Introducción
La curva del dragón es una curva fractal que aparece notablemente en las páginas de título de la sección de la novela de Parque Jurásico.
Puede describirse simplemente como un proceso de plegado de una tira de papel, como se explica en el artículo de Wikipedia sobre esta curva.
Las primeras iteraciones de la generación de esta curva se ven así (créditos a Wikipedia para la imagen):
El reto
Escriba un programa o función que, dado un número entero n como entrada, genere la enésima iteración de la curva del dragón como arte ASCII utilizando solo los símbolos _
y|
- Hay que dar salida a la figura usando solamente
|
,_
y espacios. No puede generar la curva como un gráfico o cualquier otra cosa. - Puede tomar la entrada como un argumento de programa, en STDIN o como un parámetro de función.
- Las entradas siempre serán un número entero> = 0. Su programa debería funcionar para valores razonables de entradas, siendo 12 el más alto en los casos de prueba ofrecidos.
Las primeras iteraciones se verán así
La iteración 0 es
_
La iteración 1 es
_|
La iteración 2 es
|_ _|
Una línea final al final está bien. No se permiten espacios finales además de llenar la línea hasta el carácter más a la derecha en la curva
No hay abuso de lagunas estándar como de costumbre
Casos de prueba
- Entrada
0
Salida
_
- Entrada
3
Salida
_
|_| |_
_|
- Entrada
5
Salida
_ _
|_|_| |_
_ _| _|
|_|_|_
|_|_|
|_
_|
|_|
- Entrada
10
Salida
_ _
_|_| _|_|
|_|_ _|_|_ _
_|_|_| |_| |_|_|
_ |_|_|_ |_
_|_| _| |_| _|
|_|_ _|_ |_|
_|_|_|_|_|_
|_| |_|_|_|_|_
_|_|_| |_|
|_| |_
_|_ _ _ _ _ _ _
_ |_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_
_|_| _|_|_|_|_| |_| _ _|_| |_| _ _|_| |_|
|_|_ _|_|_|_|_|_ |_|_|_|_ |_|_|_|_
_|_|_|_|_|_|_|_|_|_ _ _|_|_|_|_ _ _|_|_|_|_ _ _
|_| |_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_|_| _|_| _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
|_| |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_|_|_| |_| |_|_|_|_
_ |_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_
_|_| _|_|_|_|_|_|_|_|_| |_| _ _|_| |_|
|_|_ _|_|_|_|_|_|_|_|_|_ |_|_|_|_
_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_|
|_| |_|_|_| |_|_|_| |_|_|_|_|_
_|_| _|_| _|_|_| |_|
|_| |_| |_| |_
_|_ _ _
_ |_|_|_|_|_|_|_
_|_| _|_|_|_|_| |_|
|_|_ _|_|_|_|_|_
_|_|_|_|_|_|_|_|_|_ _ _
|_| |_|_|_|_|_|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_|_|_| |_|
|_| |_|_|_|_|_|_|_|_|_
_ _ _|_|_| |_| |_|_|_|_
|_|_| |_ _ |_|_|_ |_|_|_|_
_ _| _| _|_| _| |_| _ _|_| |_|
|_|_|_ |_|_ _|_ |_|_|_|_
|_|_| _|_|_|_|_|_ |_| |_|
|_ _ _ |_|_|_|_|_|_|_
_ _|_|_| _|_| _|_|_|_|_| |_|
|_|_|_|_|_ _|_|_ _|_|_|_|_|_
|_| |_| |_|_|_|_|_| |_| |_|_|_|_
|_|_|_|_ |_|_|_|_
_ _|_| |_| _ _|_| |_|
|_|_|_|_ |_|_|_|_
|_| |_| |_| |_|
- Entrada
12
Salida
_ _ _ _ _ _ _ _
|_|_|_|_ |_|_|_|_ |_|_|_|_ |_|_|_|_
_ _|_| |_| _ _|_| |_| _ _|_| |_| _ _|_| |_|
|_|_|_|_ |_|_|_|_ |_|_|_|_ |_|_|_|_
|_|_|_|_ _ _|_|_|_|_ _ _ |_|_|_|_ _ _|_|_|_|_ _ _
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| _ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _ |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_ _ _ |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_
|_|_|_|_ |_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_ |_|_|_|_
_ _|_| |_| _ _|_|_|_|_|_| |_| _ _|_| |_| _ _|_| |_| _ _|_|_|_|_|_| |_| _ _|_| |_|
|_|_|_|_ |_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_ |_|_|_|_
|_|_|_|_ _ _|_|_|_|_|_|_|_|_ |_| |_| |_|_|_|_ _ _|_|_|_|_|_|_|_|_ |_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| _ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
|_| |_| |_|_|_|_|_|_|_|_|_|_|_|_ _ _ _ _ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ _ _ _ _ _ _
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| _ _|_| |_| _ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| _ _|_| |_| _ _|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_
|_| |_| |_|_|_|_|_|_|_|_|_|_|_|_ _ _|_|_|_|_ _ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ _ _|_|_|_|_ _ _|_|_|_|_ _ _
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_| _|_|_|_|_|_|_|_|_|_| _|_| _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_| |_|_|_|_|_|_|_|_ |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|_|_|_| |_| |_|_|_|_
|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_ _ |_|_|_|_|_| |_|_ _ |_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_
_ _|_| |_| _ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_| _|_| _|_|_|_| _|_| _|_| _|_|_|_|_|_|_|_|_| |_| _ _|_| |_|
|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_|_ _|_|_|_|_ |_| |_|_ _|_|_|_|_|_|_|_|_|_ |_|_|_|_
|_|_|_|_ _ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ _ |_| |_|_|_| |_|_ |_| |_|_|_| |_|_|_| |_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_| _|_| _|_| _|_| _|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ _ |_| |_| |_| |_| |_| |_
|_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_ _ _
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_ _ |_|_|_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_| _|_| _|_|_|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_|_ _|_|_|_|_|_
|_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|_|_ _ _
_ _ |_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_ _ |_| |_|_|_|_|_|_|_|_|_|_|_|_|_
_|_| _|_| _ _|_|_|_|_| _|_| _|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|_|_|_| |_|
|_|_ _|_|_ _ |_|_|_|_|_|_|_ |_| |_| |_|_|_|_|_|_ _ |_| |_|_|_|_|_|_|_|_|_
_|_|_| |_| |_|_| _ _ |_|_|_|_|_|_| _|_|_|_|_|_|_|_| _ _ _|_|_| |_| |_|_|_|_
_ |_|_|_ |_ |_|_|_|_ |_|_| |_|_ _ |_|_|_|_|_| |_|_ |_|_| |_ _ |_|_|_ |_|_|_|_
_|_| _| |_| _| _ _|_| |_| _ _| _|_| _|_| _|_|_|_| _|_| _ _| _| _|_| _| |_| _ _|_| |_|
|_|_ _|_ |_| |_|_|_|_ |_|_|_ |_| |_|_ _|_|_|_|_ |_| |_|_|_ |_|_ _|_ |_|_|_|_
_|_|_|_|_|_ |_|_|_|_ _ _|_|_| _|_|_|_|_|_|_|_| |_|_| _|_|_|_|_|_ |_| |_|
|_| |_|_|_|_|_ |_|_|_|_|_|_|_|_|_ _ |_| |_|_|_| |_|_ |_ _ _ |_|_|_|_|_|_|_
_|_|_| |_| _ _|_|_|_|_|_|_|_|_|_|_| _|_| _|_| _ _|_|_| _|_| _|_|_|_|_| |_|
|_| |_ |_|_|_|_|_|_|_|_|_|_|_|_|_ _ |_| |_| |_|_|_|_|_ _|_|_ _|_|_|_|_|_
_|_ _ _ _ _ |_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| |_| |_|_|_|_|_| |_| |_|_|_|_
_ |_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_|_|_| |_|_ |_|_|_|_ |_|_|_|_
_|_| _|_|_|_|_| |_| _ _|_| |_| _ _|_|_|_|_|_|_|_|_| _|_| _ _|_| |_| _ _|_| |_|
|_|_ _|_|_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_ |_| |_|_|_|_ |_|_|_|_
_|_|_|_|_|_|_|_|_|_ _ _|_|_|_|_ _ _|_|_|_|_|_|_|_|_|_|_| |_| |_| |_| |_|
|_| |_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_ _
_|_| _|_| _|_|_|_|_|_|_|_|_|_| _|_| _|_|_|_|_|_|_|_|
|_| |_| |_| |_|_|_|_|_|_|_|_ |_| |_| |_|_|_|_|_|_ _
_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|
_ |_|_|_|_|_| |_|_ _ |_|_|_|_|_| |_|_
_|_| _|_|_|_| _|_| _|_| _|_|_|_| _|_|
|_|_ _|_|_|_|_ |_| |_|_ _|_|_|_|_ |_|
_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|
|_| |_|_|_| |_|_ |_| |_|_|_| |_|_
_|_| _|_| _|_| _|_|
|_| |_| |_| |_|
Tanteo
Este es el código de golf , por lo que gana el programa más corto en bytes.
Respuestas:
Ruby,
239201 bytesEsta es una función lambda que debería llamarse de la misma manera que la de la versión sin golf.
Las mejoras en el golf incluyen: asignación de
8<<n/2
una variable para su reutilización;upto
bucle en lugar deeach
bucle; operador ternario en lugar deif..else..end
; uso de[y,y+=d].max
para calcular dónde imprimir el|
; uso de?_
y en?|
lugar del equivalente'|'
y'_'
; y eliminación de redundantes%4
(gracias Sp3000.)Se basa en la siguiente fórmula de Wikipedia:
Wikipedia da el siguiente código:
Mejoré esto a lo
i/(i&-i)%4
que usa la misma técnica de usar la expresióni&-i
para encontrar el dígito menos significativo, pero mi expresión da 1 (para el giro a la izquierda) o 3 (para el giro a la derecha) directamente, lo cual es útil mientras sigo la dirección como un número0..3
(en ordene norte, oeste, sur, este por razones de golf).Original sin golf en programa de prueba
fuente
f=
al principio ya que esto normalmente no se cuenta para un anónimo. definición de función (-2 bytes). Más golf mañana. Tenga en cuenta que aún tendrá que ejecutar la función golfed, asignándola a una variablef=->n{.....}
y llamándolaf.call(n)
como en el ejemplo del programa de prueba.%4
no es necesario, yar
que solo se usa en las expresionesr%2
yr&2
. Gracias por el consejo. Ahora estoy en 202.Python 2,
270222 bytesAhora usando la fórmula para el enésimo turno. Vi la
(((n & −n) << 1) & n)
fórmula en Wikipedia, pero no me di cuenta de lo útil que era hasta que la vi en la respuesta de @ steveverrill . De hecho, también dejo caer%4
, por lo que hay mucha rotación, lo que hace que las entradas más grandes tarden un tiempo.Comentario lateral: esto no es una salida gráfica, pero aquí hay un código de tortuga golfizada:
fuente
C #, 337 bytes
Hay un poco de abuso de reglas aquí. No hay restricción en el espacio inicial. Desafortunadamente, el lienzo es finito, por lo que hay un límite superior para n .
Sangrado por claridad:
fuente
JavaScript (ES6), 220
Usando la fórmula de Wikipedia para giros a la izquierda y derecha.
Menos golf
fuente
APL (Dyalog Unicode) ,
6564 bytes SBCSPruébalo en línea!
(⊢,0j1×⌽)⍣⎕,1
genera una lista de pasos como números complejos. Comienza desde1
y agrega repetidamente (,
) una⌽
copia invertida ( ) de la lista multiplicada por0j1
= sqrt (-1).+\0,
anteponer 0 y calcular sumas de prefijos11 9∘○¨
descomponer complejo en pares (reales; imaginarios)÷∘¯2 1¨
dividir las partes reales por -22+/
sumas de pares adyacentes⌈
techo(⊢-⌊/)
reste los mínimos de todos, de modo que las coordenadas no sean negativasa←
asignar aa
⍴∘''⊃1+⌈/
crear una matriz de caracteres vacía de modo que los máximos coords puedan caber('_|'⍴⍨≢a)@a
poner alterna_
y|
en las coordenadas dea
fuente