Code Kata
No momento estou lendo o The Passionate Programmer, livro muito inspirador do Chad Fowler, com uma série de dicas sobre como construir uma carreira na área de desenvolvimento de software.
Uma das coisas que ele cita, é que assim como músicos (Chad Fowler é músico, também), programadores precisam praticar, a maioria dos programadores pratica/aprende durante o trabalho, mas raramente ensaiam como os músicos profissionais costumam fazer, ensaiar o trabalho de programação, praticar, é algo que poucos programadores fazem, e quando chega a hora da performance, a música não fica boa.
Afinal, você não acharia aceitável um músico que falha durante uma performance, acharia?
No fim do livro, ele recomenda dois sites
Comecei a brincar com o Code Kata hoje, o primeiro Kata é mais um exercício mental, nada para se programar na prática, já o segundo tem um exercício legal, para você desenvolver um algoritmo que busque por um inteiro em específico dentro de uma array, a função é basicamente esta:
chop(int, array) -> int
o primeiro parâmetro é o inteiro que você quer buscar, o segundo é a array, e o resultado é a posição dele. -1 é o valor que a função retorna caso não encontre, ou caso a array esteja vazia. O código para testar a função é o seguinte:
test_chop.rb
require 'test/unit'
require 'chop.rb'
class TestChop < Test::Unit::TestCase
def test_chop
assert_equal(-1, chop(3, []))
assert_equal(-1, chop(3, [1]))
assert_equal(0, chop(1, [1]))
assert_equal(0, chop(1, [1, 3, 5]))
assert_equal(1, chop(3, [1, 3, 5]))
assert_equal(2, chop(5, [1, 3, 5]))
assert_equal(-1, chop(0, [1, 3, 5]))
assert_equal(-1, chop(2, [1, 3, 5]))
assert_equal(-1, chop(4, [1, 3, 5]))
assert_equal(-1, chop(6, [1, 3, 5]))
assert_equal(0, chop(1, [1, 3, 5, 7]))
assert_equal(1, chop(3, [1, 3, 5, 7]))
assert_equal(2, chop(5, [1, 3, 5, 7]))
assert_equal(3, chop(7, [1, 3, 5, 7]))
assert_equal(-1, chop(0, [1, 3, 5, 7]))
assert_equal(-1, chop(2, [1, 3, 5, 7]))
assert_equal(-1, chop(4, [1, 3, 5, 7]))
assert_equal(-1, chop(6, [1, 3, 5, 7]))
assert_equal(-1, chop(8, [1, 3, 5, 7]))
end
end
o meu código (que passa pelos testes acima) ficou assim, amanhã vou tentar outra solução para o problema
chop.rb
def chop(int, ary)
if (ary.class == Array) && ary.size > 0
found = false
ary.each_with_index
{|n,i| found = i if n == int }
found ? found : -1
else
-1
end
end

