Sequência de Fibonacci com uma linha
Publicado em Developer
Lembrando de um famoso comercial de TV: "Tem coisas ... TUM! que só Ruby faz por você!". Olha só que coisa retardada que um sujeito fez para calcular uma sequência de Fibonacci em Ruby:
Fib = Hash.new{ |h, n| n < 2 ? h[n] = n : h[n] = h[n - 1] + h[n - 2] } puts Fib[10] => 55
Dããããã! Coisa de doido. :-) O que acontece ali é o seguinte:
- É enviado um bloco para o método new da Hash, que indica que toda vez que for acessado um elemento da Hash e ele não existir, vai ser executado aquele código;
- Aí tentamos acessar o elemento com a chave 10 (que não existe);
- Nesse ponto é executado o bloco, verificando se o valor do elemento acessado é menor que 2, se for, ele atribui o elemento da Hash ao próprio valor (ou seja, 0=0, 1=1);
- Se não for menor que 2, é atribuído ao elemento o valor do elemento antes do corrente somado ao elemento antes desse também, ou seja, elemento_corrente-1 + elemento_corrente-2. Como os dois não existem, o bloco é executado para criar os dois, e por aí vai, até retornar o valor desejado;
Se quisermos verificar o que aconteceu, dá para fazer isso:
Fib.inspect => "{5=>5, 0=>0, 6=>8, 1=>1, 7=>13, 2=>1, 8=>21, 3=>2, 9=>34, 4=>3, 10=>55}"
Legal. :-)
Comentários
Comentários fechados.
Sem nenhum comentário.
Artigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300