A5f3d249cc5053cdc1eb4ede60fd2f45

Considere que, para um determinado número inteiro n existe uma
sequencia de números a partir de n que leva ao número 1. Tal
sequencia será definida da seguinte forma:

* se n for ímpar, multiplique n por 3 e some 1 para obter o próximo número da sequencia
* caso contrário, ou seja, se n for par, divida o por 2 para obter o próximo número

Para determinar se um número é ímpar ou par utilize o operador "%".
Este operador retorna o resto da divisão, logo, se "n % 2 == 1"
significa que o número é ímpar, pois o resto da divisão por 2 foi
igual a um.

Vejamos um exemplo, para n igual a 22 teremos a seguinte sequencia:

22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

numbers  = [int(raw_input("enter number: "))]
p = lambda x: ((x % 2) and x * 3 + 1) or x / 2

while numbers[-1] != 1: numbers.append(p(numbers[-1]))
print numbers

Refactorings

No refactoring yet !

D41d8cd98f00b204e9800998ecf8427e

Anony

March 8, 2010, March 08, 2010 22:56, permalink

No rating. Login to rate!

Not in any way better than yours, but for some reason I felt compelled to refactor it in to a single expression...

(lambda n:(lambda i=[n]:reduce(lambda a,x:(x!=1 and i.append(x%2 and x*3+1 or x/2)) or a+[x],i,[]))())(22)
D41d8cd98f00b204e9800998ecf8427e

Cr44c1n0l4s

September 10, 2010, September 10, 2010 22:38, permalink

No rating. Login to rate!

Muito legal o código ! :D

Your refactoring





Format Copy from initial code

or Cancel