Hemos tenido un par de desafíos sobre la espiral de Ulam. Pero eso no es suficiente.
En este desafío, trazaremos una espiral de Ulam triangular (en oposición a la espiral de Ulam cuadrada habitual). Aquí hay un bosquejo de cómo se ve la espiral.
Como sabemos, la espiral de Ulam organiza todos los números naturales en una espiral externa, y marca solo aquellos que son primos. Entonces, en el boceto anterior, solo se mostrarán los números que aparecen en negro (los primos).
El reto
Acepte un número N como entrada y muestre la espiral triangular de Ulam hasta ese número.
- La entrada puede ser stdin o argumento de función.
- La espiral debe girar en la dirección positiva (es decir, en sentido antihorario), como en la figura anterior.
- Cualquiera de los giros de 120 grados de la figura anterior sería válido, y el giro puede ser diferente para diferentes entradas. Pero el lado más bajo de los triángulos implícitos debe ser horizontal, ya que los únicos giros permitidos son (múltiplos de) 120 grados.
- El código debería ejecutarse teóricamente (con suficiente tiempo y memoria) para cualquier N hasta lo permitido por cualquier cálculo intermedio que realice con su tipo de datos predeterminado.
double
es suficiente; sin necesidad de tipos enteros grandes. - Todas las funciones incorporadas permitidas.
- No aceptaré mi propia respuesta (no creo que sea la más corta de todos modos ...).
Formatos de salida
Elija cualquiera de los siguientes.
Muestre un gráfico con un marcador (punto, círculo, cruz, lo que prefiera) en números primos y nada en números no primos. La escala no necesita ser la misma para los dos ejes. Es decir, los triángulos implícitos no necesitan ser equiláteros. Los ejes, las líneas de cuadrícula y las etiquetas de eje son opcionales. Solo se requieren los marcadores en los números primos.
Un resultado de ejemplo para N = 12 sería el siguiente (compárelo con el bosquejo anterior). El segundo gráfico es un ejemplo más interesante, correspondiente a N = 10000.
- Produzca un archivo de imagen con lo anterior, en cualquier formato de imagen conocido (como png, tiff, bmp).
Muestre la espiral como arte ASCII , utilizando un solo carácter de su elección para primos y espacio en blanco para no primos, con un espacio en blanco para separar las posiciones numéricas en la misma fila. Se permiten espacios iniciales o finales o nuevas líneas. Por ejemplo, el caso N = 12 usando
o
como carácter seríao · · · o · o · · · o · o
donde, por supuesto, solo
o
se mostrará la marca en los números primos. El·
al no primos se muestra aquí sólo por referencia.
Criterio ganador
La recompensa real es ver por ti mismo esos increíbles patrones. Código de golf, el código más corto gana.