Las cosas geniales
La siguiente rosace puede ayudar a calcular los números del módulo 7.
Para hacerlo, debe comenzar en 0 y girar en el sentido de las agujas del reloj una serie de pasos dados por el primer dígito. Luego, para cada dígito sucesivo, siga la flecha y luego gire en sentido horario el número de pasos dados por ese dígito.
Así es como procedes para el número 294:
- Empiezas en el círculo 0.
- Gira en sentido horario la cantidad de pasos dados por el primer dígito (que es un 2, termina en 2).
- Sigues la flecha allí (terminas en 6).
- Gira en el sentido de las agujas del reloj el número de pasos dados por el segundo dígito (que es un 9, termina en 1).
- Sigues la flecha allí (terminas en 3).
- Gira en el sentido de las agujas del reloj el número de pasos dados por el tercer número (que es 4, termina en 0).
- 294 mod 7 = 0 (lo que significa que 294 es múltiplo de 7).
( Explicación en video si aún no lo entendiste )
La meta
Averigua cómo funciona eso (lo sé pero no te lo diré).
Cree un programa que tome un número n
en el parámetro y que genere un rosáceo mod n
.
El rosáceo se puede mostrar de cualquier manera que desee (ASCII, generar PNG, generar SVG, ...) siempre que pueda ser utilizado por un niño de 8 años (¡ así que no hay una lista de reglas, quiero una foto )!
Puede usar líneas estrechas, incluso si es un poco menos claro que lo que hice para el ejemplo, pero debe mostrar claramente los números que apuntan a sí mismos con algún tipo de flecha que muerde la cola.
Casos de prueba
(Solo doy los enlaces entre los números, siéntase libre de editar mi pregunta una vez que su programa los genere correctamente)
mod 2:
0 -> 0
1 -> 0
mod 3:
0 -> 0
1 -> 1
2 -> 2
mod 4:
0 -> 0
1 -> 2
2 -> 0
3 -> 2
mod 5:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
mod 6:
0 -> 0
1 -> 4
2 -> 2
3 -> 0
4 -> 4
5 -> 2
mod 7:
0 -> 0
1 -> 3
2 -> 6
3 -> 2
4 -> 5
5 -> 1
6 -> 4
mod 8:
0 -> 0
1 -> 2
2 -> 4
3 -> 6
4 -> 0
5 -> 2
6 -> 4
7 -> 6
mod 9:
0 -> 0
1 -> 1
2 -> 2
3 -> 3
4 -> 4
5 -> 5
6 -> 6
7 -> 7
8 -> 8
mod 10:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
5 -> 0
6 -> 0
7 -> 0
8 -> 0
9 -> 0
Reglas
Este es el código de golf , el código más corto en bytes gana.
Como de costumbre, las lagunas y trampas están prohibidas.
fuente
Respuestas:
Mathematica, 192 bytes
¡Este tipo de desafío (computación matemática no trivial junto con salida de gráficos de alto nivel) es para lo que está hecho Mathematica!
Ampliado y explicado:
Las líneas 1 y 8 delimitan una función sin nombre de un argumento. Las líneas 3 y 7 delimitan varios comandos que generan gráficos.
Las líneas 2 almacenan la entrada como
d
; define una función binaria quet
da las coordenadas de un punton/d
del camino alrededor del círculo de radior
, en sentido horario desde la parte superior (en el espíritu de este sitio, guardé un byte redondeando 2π a6.3
!); y define una función unaria quem
calcula el destino de la flecha comenzando en su argumento.Línea 4 hace que los números
0
ad–1
igualmente espaciados alrededor de la circunferencia de radio 9 (la importancia exacta radio, elegido para maximizar la estética sujetos a ajuste en un byte).La línea 5 representa las flechas rectas en sentido horario alrededor de la circunferencia del círculo. El
1/7
y6/7
dejar suficiente espacio para leer los números.La línea 6 representa las flechas curvas de cada número a (10 veces el módulo de número
d
).BezierCurve
dibuja automáticamente una curva de Bézier usando los puntos de control dados. Afortunadamente, usar el origen como un único punto de control interior produce resultados razonables.Ejemplo de salida (tenga en cuenta que los casos 9, 10 y 11 son triviales de diferentes maneras):
d = 7
d = 8
d = 9
d = 10
d = 11
d = 12
d = 13
d = 37
Esta última entrada se eligió porque 37 divide 10 ^ 3–1, por lo que las flechas interiores (sin contar la auto-flecha obligatoria de 0 a 0) forman muchos ciclos triangulares.
fuente
Python 2, 294 bytes
Imprime el diagrama en este formato:
No sé si este formato está bien, por lo tanto, dejaré esta respuesta como no válida por el momento.¡Yay, es válido!Pruébalo en repl.it!
fuente
n
números de dígitos. Sinn>9
embargo, no estoy seguro de si el desafío requiere que lo hagas .PHP + SVG, 500 bytes
pequeña flecha para conexiones entre los mismos valores
para ver las flechas a los mismos valores, uso este valor de color
rgba(255,0,0,0.3)
. Es una posibilidad acortarlo.expandido
salida para n = 45
320 Bytes trabajando con rect
expandido
salida para n = 72
fuente
Python 2,
540464431 bytesAlgunos jugadores de golf les gusta usar nombres de variables más cortos, sustitución de variables, comprensión de listas y cambiar todo a blanco (excepto el texto). El mayor ahorro fue cambiar las posiciones precalculadas a dinámicamente (ver
L
).L
calcula las posiciones de los círculos por distancia al origen para los grandes que contienen los números y los pequeños externos que indican auto señalamiento.El primer bucle dibuja las conexiones: la primera línea es el círculo alrededor y la segunda línea está en el interior, se agrega un círculo pequeño para mostrar la dirección o el auto señalamiento.
El segundo bucle pone un círculo grande y un número.
Obviamente no es tan bueno como las respuestas de Mathematica, pero todo está hecho desde cero.
fuente
Mathematica,
124121 bytesCrea una figura como un gráfico con bordes dirigidos. La salida del gráfico ahora sigue el mismo patrón, excepto en sentido antihorario. Prefiero la solución de Greg Martin mucho más, ya que el resultado es mucho más estéticamente agradable.
Se puede generar un gráfico menos agradable visualmente para 82 bytes usando
Para d = 8,
fuente
Graph
pero tuve la misma reacción negativa. Además, para el algoritmo es importante distinguir entre los bordes "en el sentido de las agujas del reloj" y los bordes "por 10". Estoy seguro de que hay opciones paraGraph
ese manejo, pero luego, aquí vienen más bytes ...Graph
funciones y encontré trucos como usar en->
lugar deDirectedEdge
. Acorté esa versión inicial de 100 bytes a 82 bytes, pero luego, corrigiéndola para que esté en el formato correcto, agregó otros 42 bytes.CircularEmbedding
, pero no puso los vértices en el sentido de las agujas del relojn=7
(admito que no probé otras entradas). ¿Funciona para tin=7
?Join
yTranspose
para que los bordes exteriores se enumeren primero antes que los bordes interiores. Los vértices están ordenados correctamente a lo largo de un camino circular, pero dado que los bordes prefieren ser rectos, termina pareciéndose a un n -gon.Python 2 + graphviz, 147 bytes
No siempre dibuja un círculo, genera un archivo pdf llamado
o
fuente
Haskell, 350 bytes
Inspirado por @Loovjo, también uso el arte ASCII. Esto funciona para números menores de 100000 (o algo así).
Básicamente, usted señala de x a (x * 10)% n.
Puedes probar esto aquí . Pero como el teclado no admite entrada, cambie q por el valor de n que desee y vuelva a enviar. (Tenga en cuenta que la bifurcación no funciona, así que copie y vuelva a enviar desde la página principal). El código enviado allí es un poco diferente, porque la versión anterior toma la entrada de la consola.
Espero que la salida sea intuitiva. Las sugerencias de compresión son bienvenidas (particularmente si eso supera a 294 ;)).
fuente
foldl (++) ""$map (\...
Lote, 394 bytes.
Escapar en Batch es feo en el mejor de los casos. Ejemplo de salida para 7:
fuente
>0<
espectáculos que0
se asigna a sí mismo, mientras que>2<<<3<
muestra que3
se asigna a2
.