¡Aparentemente sí! En tres sencillos pasos.
Paso 1
Supongamos que f ( n ) denota la función de recuento de primos (número de primos menor o igual que n ).
Defina la secuencia entera s ( n ) de la siguiente manera. Para cada entero positivo n ,
- Iniciar t to n .
- Mientras t no sea primo ni 1, reemplace t por f ( t ) e itere.
- El número de iteraciones es s ( n ).
Se garantiza que el proceso iterativo finalizará porque f ( n ) < n para todo n .
Considere por ejemplo n = 25. Iniciamos t = 25. Como esto no es un primo ni 1, calculamos f (25), que es 9. Esto se convierte en el nuevo valor para t . Esto no es primo ni 1, por lo que continuamos: f (9) es 4. Continuamos nuevamente: f (4) es 2. Como es primo, nos detenemos aquí. Hemos realizado 3 iteraciones (de 25 a 9, luego a 4, luego a 2). Así s (25) es 3.
Los primeros 40 términos de la secuencia son los siguientes. La secuencia no está en OEIS.
0 0 0 1 0 1 0 2 2 2 0 1 0 2 2 2 0 1 0 3 3 3 0 3 3 3 3 3 0 3 0 1 1 1 1 1 0 2 2 2
Paso 2
Dado un número entero positivo impar N , construya una matriz N × N (matriz) enrollando la secuencia finita s (1), s (2), ..., s ( N 2 ) para formar una espiral cuadrada hacia afuera . Por ejemplo, dado N = 5, la espiral es
s(21) s(22) s(23) s(24) s(25)
s(20) s(7) s(8) s(9) s(10)
s(19) s(6) s(1) s(2) s(11)
s(18) s(5) s(4) s(3) s(12)
s(17) s(16) s(15) s(14) s(13)
o, sustituyendo los valores,
3 3 0 3 3
3 0 2 2 2
0 1 0 0 0
1 0 1 0 1
0 2 2 2 0
Paso 3
Representa la matriz N × N como una imagen con un mapa de color gris, o con algún otro mapa de color de tu gusto. El mapa debe ser gradual, de modo que el orden de los números corresponda a un orden visualmente obvio de los colores. Los casos de prueba a continuación muestran algunos mapas de colores de ejemplo.
El reto
Dado un número entero positivo impar N , produzca la imagen descrita anteriormente.
Reglas
La espiral debe estar hacia afuera, pero puede estar en sentido horario o antihorario, y puede comenzar a moverse hacia la derecha (como en el ejemplo anterior), hacia la izquierda, hacia abajo o hacia arriba.
Las escalas de los ejes horizontal y vertical no necesitan ser las mismas. También las etiquetas de eje, la barra de colores y elementos similares son opcionales. Mientras se pueda ver claramente la espiral, la imagen es válida.
Las imágenes pueden emitirse por cualquiera de los medios estándar . En particular, la imagen puede mostrarse en la pantalla, o puede producirse un archivo de gráficos, o puede emitirse una matriz de valores RGB. Si genera un archivo o una matriz, publique un ejemplo de cómo se ve cuando se muestra.
Los medios de entrada y el formato son flexibles como de costumbre . Se puede proporcionar un programa o una función . Las lagunas estándar están prohibidas .
El código más corto en bytes gana.
Casos de prueba
Las siguientes imágenes (clic para una resolución total) corresponden a varios valores de N . Se utiliza una espiral en sentido horario, hacia la derecha, como en el ejemplo anterior. Las imágenes también ilustran varios mapas de colores válidos.
fuente
s(n)
se puede alimentar a alguna función / paquete de trazado sin ser modificado (creo queimshow
en matplotlib podría manejar esto, por ejemplo) ¿es esta una forma de salida aceptable?imshow
haceimshow
hace eso.Respuestas:
Dyalog APL, 94 bytes
asume
⎕IO=0
salida para n = 701 (convertido de .pgm a .png):
fuente
MATLAB -
197185178175184163162148142140 bytesAfeitado 12 bytes, gracias a Ander y Andras, y muchas gracias a Luis por poner los dos juntos. Afeitado 16 gracias a Remco, 6 gracias a flawr
Resultado para
N=301
(F(301)
):Explicación:
fuente
Wolfram Language (Mathematica) , 124 bytes
¡Gracias a Martin Ender por guardar 12 bytes!
Pruébalo en línea!
La imagen generada es:
Fórmula de forma cerrada del valor espiral tomado directamente de esta respuesta mía.
fuente
#/2-.5
guarda un byte.p
hasta que la necesites:...,{y,p=(1-#)/2,-p},{x,p,-p}
MATLAB:
115114110 bytesOne liner (ejecutado en R2016b + como función en script ) 115 bytes
Poner la función en un archivo separado, como sugiere flawr, y usar el 1 byte adicional por regla de archivo adicional
En el archivo
s.m
, 64 + 1 bytes para código + archivoVentana de comando para definir
I
, 45 bytesTotal: 110 bytes
Esto utiliza la recursividad en lugar de
while
bucle como lo hacen las otras implementaciones de MATLAB ( gnovice , Adriaan ). Ejecútelo como un script (en R2016b o posterior), esto define la funciónI
que se puede ejecutar comoI(n)
.Versión estructurada:
Ejemplo:
Notas:
Traté de hacer la
s
función anónima también, por supuesto, eso reduciría el recuento significativamente. Sin embargo, hay 2 problemas:La recursión infinita es difícil de evitar cuando se utilizan funciones anónimas, ya que MATLAB no tiene un operador ternario para ofrecer una condición de interrupción. Crear un tipo de operador ternario (ver más abajo) también cuesta bytes, ya que necesitamos la condición dos veces.
Debe pasar una función anónima a sí misma si es recursiva (ver aquí ) que agrega bytes.
Lo más cerca que llegué a esto fue usar las siguientes líneas, tal vez se pueda cambiar para que funcione:
fuente
MATLAB -
126121 * bytesIntenté un enfoque más vectorizado que Adriaan y pude eliminar más bytes. Aquí está la solución de una sola línea:
Y aquí está la solución bien formateada:
* Nota: si usted está dispuesto a permitir que un crapton métrica de iteraciones innecesarias, puede cambiar la línea
while any(i),
afor m=v,
y guardar 5 bytes.fuente
cumsum
para vectorizar y evitarnnz(primes(...)
while any(i)
porfor m=M
. A quién le importa si el código tarda horas en ejecutarse :-)n^2
o más iteraciones van a doler? ;)Python 3,
299265 bytesSaved 5 bytes thanks to formatting suggestions from Jonathan Frech and NoOneIsHere. Removed an additional 34 bytes by removing a function definition that was only called once.
This is a little longer than some others, due to python not having a command to determine primeness, or spiral an array. It runs relatively quickly however, around a minute for
n = 700
.Test it with
fuente
import
and*
.J, 121 Bytes
Defines a function:
fuente
R, 231 bytes
Slightly less golfed:
Anonymous function. Output in a graphic window. Scale is on the red-scale with darkest shade equals to 0 and clearer shades increasing values.
Result for n=101:
fuente