Después de una larga pausa volvemos con los desafíos, esta vez vamos a jugar con Fortran IV :).
Hay lenguages antiguos, como Fortran IV que usan sentencias goto condicionales e incondicionales, en vez de estructuras como if y while.
IMPORTANTE: Dado algunas solicitudes en privado y puesto que este post fue publicado el día 14 de julio, he decidido ampliar el plazo hasta el 15 de septiembre. Aún hay tiempo para que puedan participar.
Es hora de entregar el premio al ganador del desafío de Junio.
Participaron:
Javier Rovegno: con dos soluciones, la segunda es correcta, esencialmente calcula todos los números posibles dentro del rango, y luego ordena la secuencia.
Richard Hamming fue un notable matemático norteamericano, en 1945 trabajó en el proyecto Manhattan programando uno de los primeros computadores, desarrolló un programa que debía determinar si la explosión de la bomba atómica era capaz de incendiar la atmósfera, uno de los mayores temores de los científicos de esa época y que determinó la viabilidad de los lamentables bombardeos posteriores a Hiroshima y Nagasaki.
Estaba por publicar la respuesta al desafío de junio y noté que no les respondí la solución al desafío de mayo, así que hay que cumplir con los compromisos, así que aquí va.
Esta es una variante del problema de Haming, que el mismo Dijkstra aborda en uno de sus escritos.
La secuencia de Hamming
Tomemos 3 números primos p1, p2 y p3. Definiremos la secuencia de Haming H(p1,p2,p3) como un conjunto que contiene, en orden incremental, todos los números naturales cuyos únicos divisores primos son p1,p2 y p3.
No es primera vez que publico este desafío, pero seguramente hay muchos de ustedes que no lo conocen, vamos a ver si este tiene más éxito, considérenlo un calentamiento para el desafío de Junio :)
Lamentablemente hasta ahora sólo tengo una respuesta al desafío de mayo, el valiente fue Javier Rovegno, quién además ha investigado bastante sobre el tema.
He usado esta misma pregunta varias veces en pruebas de selección de personal (es buena idea aparte de ver el currículum, preguntarle a los ingenieros de software si son capaces de programar).
En Programming Pearls[1], Jon Bentley propone la manera de hacerse de un PhD:
Dado el siguiente algoritmo
while (n > 1) do if (n is even) n <- n / 2 else n <- n*3+1 end