Tracks
/
Python
Python
/
Ejercicios
/
Conjetura de Collatz
Conjetura de Collatz

Conjetura de Collatz

Fácil

Introducción

Una noche, te topaste con un cuaderno viejo lleno de garabatos misteriosos, como si alguien hubiera estado persiguiendo una idea de forma obsesiva. En una página, una sola pregunta resaltaba: ¿Todo número puede encontrar su camino hacia el 1? Estaba ligada a algo llamado la Conjetura de Collatz, un rompecabezas que ha desconcertado a los pensadores durante décadas.

Las reglas eran engañosamente simples. Elige cualquier número entero positivo.

  • Si es par, divídelo entre 2.
  • Si es impar, multiplícalo por 3 y súmale 1.

Luego, repite estos pasos con el resultado, continuando indefinidamente.

Con curiosidad, elegiste el número 12 para probarlo y comenzaste el viaje:

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

Contando desde el segundo número (6), hizo falta 9 pasos para llegar al 1, y cada vez que las reglas se repetían, el número seguía cambiando. Al principio, la secuencia parecía impredecible, saltando hacia arriba, hacia abajo y por todos lados. Sin embargo, la conjetura afirma que sin importar cuál sea el número inicial, siempre terminaremos en el 1.

Era fascinante, pero también desconcertante. ¿Por qué parece funcionar siempre así? ¿Podría existir un número en el que el proceso se rompa, se repita en un bucle infinito o se escape hacia el infinito? El cuaderno sugería que resolver esto podría revelar algo profundo y, con ello, la fama, la fortuna y un lugar en la historia le esperan a quien logre descifrar sus secretos.

Instrucciones

Dado un entero positivo, devuelve el número de pasos que se necesitan para llegar a 1 según las reglas de la Conjetura de Collatz.

Mensajes de excepción

A veces es necesario lanzar una excepción. Cuando lo hagas, siempre debes incluir un mensaje de error significativo que indique cuál es el origen del error. Esto hace que tu código sea más legible y ayuda mucho con la depuración. En situaciones en las que sabes que el origen del error será de cierto tipo, puedes optar por lanzar uno de los tipos de error integrados, pero aun así debes incluir un mensaje significativo.

La Conjetura de Collatz solo se ocupa de los números enteros estrictamente positivos, así que este ejercicio espera que uses la sentencia raise y que «lances» un ValueError en tu solución si el valor dado es cero o un número entero negativo. Las pruebas solo pasarán si haces raise de la exception y además incluyes un mensaje con ella.

Para lanzar un ValueError con un mensaje, escribe el mensaje como argumento del tipo exception:

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

Fuente

WikipediaEl enlace se abre en una ventana o pestaña nueva
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Python Exercism

¿Todo listo para empezar Conjetura de Collatz?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.