Escribe el programa más pequeño que puedas para crear fractales afines. Puede usar cualquier método que considere que genera los mismos resultados que las reglas a continuación. ¡No tiene que usar ninguna idea de los métodos sugeridos!
Su programa tomará dos entradas, la primera para definir el patrón en el formato 074
de tres dígitos del 0 al 7. La segunda entrada definirá el tamaño, 3
será 8x8, 4
será 16x16 y así sucesivamente (2 ^ n). Su programa debe generar el resultado correcto para todos los tamaños desde 0 (1x1) hasta al menos 5 (32x32). Si produce alguna salida para números más altos, debe ser correcta, es decir, debe producir la salida correcta hasta cierto tamaño, pero no producirá una salida por encima de ese tamaño si fuera incorrecta. ¡Puede asumir un tamaño máximo de 15 (32768x32768) ya que ese ya es un tamaño loco para el arte ASCII (1GB)!
Un patrón de 8x8 se verá más abajo (regla 160
). El dígito que se encuentra más a la izquierda será para el bloque A
, el dígito del medio (sin pensamientos groseros, por favor) para el bloque B
y el dígito que se encuentra más a la derecha para el bloque C
. Para construir el fractal, reduzca a la mitad la mitad en ambas dimensiones y aplique la regla de rotación / reflejo para el bloque. Para reducir el patrón, divídalo uniformemente en áreas de 2x2. Habrá 3 caracteres visibles o ninguno en cada área. Si hay caracteres visibles, coloque un carácter en el lugar apropiado en el bloque más pequeño; de lo contrario, coloque un espacio. Reglas 0
- 3
no se reflejan, reglas 4
- 7
se reflejan. Reglas 0
y 4
no se giran, 1
y 5
se giran 90 grados en sentido horario, 2
y6
se giran 180 grados 3
y 7
se giran 270 grados en el sentido de las agujas del reloj. Unir los tres bloques en el orden que se muestra, A
en la esquina superior izquierda, B
inferior izquierda e C
inferior derecha.
AAA
AA A
AA
A
BBB CC
B BBC
BBCCC
B CCC
Reducido, girado y reflejado por el número de regla:
0 1 2 3 4 5 6 7
---- ---- ---- ---- ---- ---- ---- ----
AA BAA CCB C C BCC AAB AA
A BB A CBB CC CC BBC A BB A
BBC CC A A BB BB A A CC CBB
BCC C AA AAB BAA AA C CCB
Reglas:
- No reflejado, girado 90 grados en sentido horario
- No reflejado, girado 180 grados en sentido horario
- Sin espejo, girado 270 grados en sentido horario
- Reflejado pero no girado
- Reflejado y luego girado 90 grados en sentido horario
- Reflejado y luego girado 180 grados en sentido horario
- Reflejado y luego girado 270 grados en sentido horario
- Regla 0: sin espejo, sin rotación
La duplicación siempre se realiza primero y se realiza diagonalmente a través de la esquina en blanco, por ejemplo, la regla 0 frente a la regla 4:
0 4
---- ----
AA / C /
A / CC/
BBC BB A
/BCC /BAA
Sólo reglas 1
, 6
y 0
se utilizan en el patrón anterior, en ese orden. Después de que se hayan aplicado las transformaciones y los bloques unidos, se verá como a continuación, excepto que he separado cada bloque uno del otro en un espacio. Su código no tendrá este espacio extra. Si lo compara con la imagen "principal", verá que tiene caracteres visibles en las mismas posiciones.
BAA
BB A
CC
C
AAB AA
A BB A
CC BBC
C BCC
Otra forma de generar la imagen sin reducir es la siguiente: Comience con un carácter:
X
Aplica las transformaciones para cada uno de los tres bloques (ninguno ya que es solo un personaje) y une los bloques:
X
XX
Aplique las transformaciones para cada uno de los tres bloques nuevamente:
1
--
XX
X
6 0
-- --
XX X
X XX
Coserlos juntos:
XX
X
XXX
XXX
Aplique las transformaciones para cada uno de los tres bloques nuevamente:
1
----
XXX
XX X
XX
X
6 0
---- ----
XXX XX
X XX X
XX XXX
X XXX
Coserlos juntos:
XXX
XX X
XX
X
XXX XX
X XXX
XXXXX
X XXX
Puede usar cualquier carácter o caracteres imprimibles (0x21 - 0x7E) para la parte visible del patrón, pero solo el carácter de espacio (0x20) para los espacios en blanco. Se permiten espacios finales, pero no debe haber espacios en blanco fuera del cuadrado completo (es decir, para un cuadrado de 8x8 no puede haber caracteres más allá de la columna 8).
Hay 512 reglas diferentes, pero algunas de ellas producen el mismo patrón. Como nota al margen, cualquier patrón que contenga solo 0
y 4
produzca el triángulo de Sierpinski (8 reglas diferentes).
Opcionalmente, puede publicar su patrón favorito y la regla que lo genera. Si lo hace, asegúrese de que el tamaño sea al menos 3 (8x8) para distinguirlo de reglas similares.
Respuestas:
CJam,
63 57 5452 bytesCómo funciona :
La idea básica es que ejecute un bucle, el segundo número de entrada de veces. En cada bucle, comenzando desde una única matriz de matriz que contiene
0
([[0]]
), construimos el fractal para el siguiente paso usando las tres reglas, rellenamos el cuadrante vacío y preparamos los cuadrantes para el siguiente bucle.Pruébalo en línea aquí
fuente
0
y James Bond tiene una licencia para matar.007
: IndexOutOfBoundsExceptionAPL (Dyalog Classic) , 47 bytes
Pruébalo en línea!
fuente