Mientras investigaba para un desafío diferente que estoy formulando, me encontré con un gráfico de Cayley , específicamente este . Como soy uno de los mejores escritores de desafío de arte ascii , por supuesto, tuve que hacer un desafío de arte ASCII para esto.
Su desafío es producir esta representación artística ASCII de un gráfico de Cayley del grupo libre en dos generadores de la siguiente manera:
+
+++
+ | +
++-+-++
+ | +
+ | +
+++ | +++
+ | | | +
++-+----+----+-++
+ | | | +
+++ | +++
+ | +
+ | +
+++ | +++
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+ | | | +
+++ | | | +++
+ | | | | | +
++-+----+-----------+-----------+----+-++
+ | | | | | +
+++ | | | +++
+ | | | +
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+ +++ | +++ +
+++ + | + +++
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+ | + | + | +
+++ | +++ | +++ | +++
+ | | | + | + | | | +
++-+----+----+-++ | ++-+----+----+-++
+ | | | + | + | | | +
+++ | +++ | +++ | +++
+ | + | + | +
+ | | | +
+++ | | | +++
+ | + | | | + | +
++-+-++ | | | ++-+-++
+ | + | | | + | +
+ | | | | | +
+++ | | | | | +++
+ | | | | | | | +
++-+----+-----------+--------------------------+--------------------------+-----------+----+-++
+ | | | | | | | +
+++ | | | | | +++
+ | | | | | +
+ | + | | | + | +
++-+-++ | | | ++-+-++
+ | + | | | + | +
+++ | | | +++
+ | | | +
+ | + | + | +
+++ | +++ | +++ | +++
+ | | | + | + | | | +
++-+----+----+-++ | ++-+----+----+-++
+ | | | + | + | | | +
+++ | +++ | +++ | +++
+ | + | + | +
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+++ + | + +++
+ +++ | +++ +
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+ | | | +
+++ | | | +++
+ | | | | | +
++-+----+-----------+-----------+----+-++
+ | | | | | +
+++ | | | +++
+ | | | +
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+++ | +++
+ | +
+ | +
+++ | +++
+ | | | +
++-+----+----+-++
+ | | | +
+++ | +++
+ | +
+ | +
++-+-++
+ | +
+++
+
Entrada
Sin entrada, a menos que su idioma explícitamente requiera entrada para ejecutarse.
Salida
La representación artística ASCII que se muestra arriba.
MD5 Hashes
Dado que este es un resultado bastante grande, para verificar su trabajo aquí hay algunos hash MD5 de formas de salida de ejemplo (todos son UTF-8 sin BOM):
- Relleno de espacio cuadrado,
CR/LF
saltos de línea y nueva línea final954B93871DAAE7A9C05CCDF79B00BF3C
: esta es la representación utilizada anteriormente. - Relleno de espacio cuadrado,
CR/LF
avances de línea, sin línea nueva -28405EF91DA305C406BD03F9275A175C
- Relleno de espacio cuadrado
LF
, saltos de línea y nueva línea final -8CA65FB455DA7EE5A4C10F25CBD49D7E
- Relleno de espacio cuadrado,
LF
avances de línea, sin línea nueva -FDB1547D68023281BB60DBEC82C8D281
- Sin espacios finales,
CR/LF
avances de línea y nueva línea final -77FDE8CE5D7BD1BDD47610BA23264A19
- Sin espacios finales,
CR/LF
avances de línea, sin nueva línea final -EAD390C3EFD37F0FCACE55A84B793AB5
- Sin espacios finales,
LF
avances de línea y nueva línea final -1F6CAB740F87881EB2E65BED65D08C36
- Sin espacios finales,
LF
avances de línea, sin nueva línea final -7D41CE1E637619FEA9515D090BFA2E9C
- Si desea comparar un MD5 adicional, hágamelo saber y lo crearé y actualizaré el desafío.
Reglas
- Las nuevas líneas o espacios en blanco iniciales o finales son opcionales, siempre que los caracteres se alineen correctamente.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
code-golf
ascii-art
kolmogorov-complexity
fractal
AdmBorkBork
fuente
fuente
-
/|
s siguen la fórmula en(2<<n)-n-2
lugar de(1<<n)-1
lo que habría sido mi suposición original.Respuestas:
JavaScript (ES6),
204195188180 bytesRelleno de espacio cuadrado, saltos de línea LF
ysin línea nueva, aunque no he comprobado el MD5.Versión parametrizada para
222216207199 bytes. Explicación: El tamaño de salida es de 9119 caracteres ASCII, incluidas 46 líneas nuevas. (Para la versión parametrizada, el tamaño de salida se calcula incluyendo la nueva línea final). Cada carácter se determina individualmente, primero verificando si se debe una nueva línea, de lo contrario, llamando a una función en las coordenadas relativas al origen en el medio de la final diagrama. La función verifica recursivamente el punto contra las cruces más cercanas de cada tamaño al punto, y devuelve el carácter apropiado dependiendo de si se descubre que el punto se encuentra en el centro o eje de una cruz.fuente
Röda ,
284280238234 bytesPruébalo en línea!
Esta es una función anónima. Utilicé líneas nuevas en lugar de punto y coma, por lo que está muy bien formateado.
La función recursiva
f
crea el gráfico en una matriz bidimensionalt
, que luego se imprime en la última línea.No encontré una manera de calcular
27,12,5,2,1
en pocos bytes, por lo que están codificados.fuente
b_shiftl
operador, pero creo que es demasiado largo para ser utilizado en este programa.10000110001200020001
->1168671727
dudo que pueda convertir y dividir con menos de 2 bytes aunque je ...Carbón ,
5043 bytesPruébalo en línea! El enlace es a la versión detallada del código. Originalmente probé varias reflexiones y rotaciones, pero no hicieron lo que quería o, en algunos casos, tenían errores. Luego probé un enfoque de bucle anidado, pero ahora he cambiado a este método iterativo que funciona dibujando una serie de líneas entre cada cruz interna dependiendo de cuántas potencias de 3 es divisible el número de paso. Incluso se puede modificar fácilmente para aceptar un parámetro de tamaño a un costo de solo 4 bytes:
Editar: desde entonces he resuelto cómo usar
RotateShutterOverlap
para lograr esta tarea, pero molestamente me lleva 44 bytes:Si se
RotateShutterOverlap
acepta un número entero de rotaciones variables, eso lo reduciría a 40 bytes:Tal como está, usar un parámetro de lista de rotaciones toma 45 bytes:
fuente
05AB1E , 620 bytes
Pruébalo en línea!
Todo lo que hice fue cortar el patrón en cuartos, convertir los símbolos en base-4, comprimir 1/4 del patrón en base-214 y luego voltearlo sobre las líneas de simetría. Estoy trabajando en algo más inteligente usando el algoritmo real, pero hasta que termine, esto es lo que estará aquí para mí.
fuente
05AB1E
respuesta más grande que he visto. xD Por lo general, está cerca de 6.20 en lugar de 620 con respuestas en este idioma. ;)Python 3, 264 bytes
Utiliza un par de funciones recursivas mutuamente. F dibuja las líneas y P inserta los '+'. Se puede jugar más al golf, pero fuera de tiempo por ahora.
fuente
C, 236 bytes
Simplemente construyendo la tabla de caracteres de forma recursiva antes de mostrarla.
Pruébalo en línea!
Gracias @Neil por hacerme darme cuenta de que la longitud de las ramas sigue una regla real.
fuente