Percursos
/
Python
Python
/
Exercícios
/
Conjetura de Collatz
Conjetura de Collatz

Conjetura de Collatz

Fácil

Introdução

Numa noite, encontraste um caderno antigo cheio de rabiscos enigmáticos, como se alguém perseguisse uma ideia de forma obsessiva. Numa das páginas, destacava-se uma única pergunta: Será que todos os números conseguem chegar ao 1? Estava ligada a algo chamado Conjetura de Collatz, um enigma que intriga pensadores há décadas.

As regras eram enganadoramente simples. Escolhe qualquer número inteiro positivo.

  • Se for par, divide-o por 2.
  • Se for ímpar, multiplica-o por 3 e soma 1.

Depois, repete estes passos com o resultado e continua assim indefinidamente.

Curioso, escolheste o número 12 para testar e começaste a viagem:

12 ➜ 6 ➜ 3 ➜ 10 ➜ 5 ➜ 16 ➜ 8 ➜ 4 ➜ 2 ➜ 1

A contar desde o segundo número (6), foram precisos 9 passos para chegar ao 1, e a cada repetição das regras o número continuava a mudar. Ao início, a sequência parecia imprevisível: saltava para cima, para baixo e para todos os lados. No entanto, a conjetura afirma que, seja qual for o número de partida, acabamos sempre no 1.

Era fascinante, mas também desconcertante. Porque é que isto parece funcionar sempre? Será que existe algum número em que o processo se desmorone, entre num ciclo sem fim ou se perca no infinito? O caderno sugeria que resolver isto poderia revelar algo profundo, e, com isso, a fama, a fortuna e um lugar na história esperam quem conseguir desvendar os seus segredos.

Instruções

Dado um número inteiro positivo, devolve o número de passos necessários para chegar a 1 de acordo com as regras da Conjetura de Collatz.

Mensagens de exceção

Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda bastante a depurar. Nas situações em que sabes que a origem do erro será de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves na mesma incluir uma mensagem significativa.

A Conjetura de Collatz diz apenas respeito a números inteiros estritamente positivos, por isso este exercício espera que uses a instrução raise e que "lances" um ValueError na tua solução, se o valor recebido for zero ou um número inteiro negativo. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.

Para lançares um ValueError com uma mensagem, escreve a mensagem como argumento do tipo exception:

# example when argument is zero or a negative integer
raise ValueError("Only positive integers are allowed")

Fonte

WikipediaO link abre numa nova janela ou separador
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar Conjetura de Collatz?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.