La curva de Hilbert es un fractal que llena espacios y se puede representar como un sistema Lindenmayer con generaciones sucesivas que se ven así:
Gracias a http://www.texample.net/tikz/examples/hilbert-curve/ por la imagen.
Gol
Escriba el programa más corto posible (en bytes) que tome un entero positivo n de stdin y dibuje la curva de Hilbert de enésimo orden en stdout usando solo barra diagonal, barra diagonal inversa, espacio y nueva línea.
Por ejemplo, si la entrada es 1
la salida debe ser
\
\/
Si la entrada es 2
la salida debe ser
/
\/\
/\ \
/ /\/
\ \
\/
Si la entrada es 3
la salida debe ser
\
/\/
/ /\
\/\ \ \
/\ / / /
/ / \/ \/\
\ \/\ /\ \
\/ / / / /\/
/\/ / \ \
\ \/\ \/
\/\ \
/ /\/
\ \
\/
Y así. (Se ven mejor si los pega en algo con menos espacio entre líneas).
La salida no debe contener nuevas líneas por encima o por debajo de las extremidades de la curva, ni espacios finales en ninguna línea.
.map(&:rstrip)
tuvo que agregar para cumplir con el requisito de "no espacios finales".x
y acortar la asignación ay
yd
, para un total de 205 caracteres (ver el mismo enlace que antes).Pitón, 282
Esto utiliza un enfoque recursivo para construir la curva de Hilbert de enésimo orden a partir de la curva anterior. Las curvas se representan como una matriz numpy en 2d para un mejor corte y manipulación.
Aquí hay unos ejemplos:
fuente
Malsys -
234221 caracteresHuelo algunos sistemas L aquí :) Malsys es un intérprete en línea del sistema L. Esta no es una entrada realmente seria, pero sentí que esta solución es algo interesante.
La sintaxis de Malsys no es realmente buena para el golf, ya que contiene muchas palabras clave largas, pero aún así, es bastante corta, legible y expresiva.
http://malsys.cz/g/3DcVFMWn
Intérprete: http://malsys.cz/Process
Versión de golf:
¿Y qué hay de la curva Ascii hexagonal Gosper? :)
http://malsys.cz/g/ae5v5vGB
fuente
JavaScript (ES6) 313
340Editar Se eliminan algunos caracteres usando prácticas realmente malas , como la variable global w en lugar de un valor de retorno de la función H
Convirtiendo la posición x, y a la distancia d (ver Wikipedia ) para cada x, y verificando si las posiciones más cercanas están conectadas,
Prueba en la consola FireFox. Entrada a través de ventana emergente, salida a través de console.log.
No hay espacios finales ni líneas nuevas encima o debajo de la imagen. Pero cada línea termina con una nueva línea, creo que es la forma correcta de hacer una imagen de arte Ascii.
fuente
alert
lugar deconsole.log
. También tiene un espacio extra despuésfor
de la cuarta línea, y debería poder deshacerse de ese último salto de línea.Perl, 270 caracteres
Super golf
No tanto golf
Probablemente podría jugar más golf si entendiera mejor a Perl. Utiliza un enfoque de sistema Lindenmayer utilizando reglas de producción definidas en la línea 1.
fuente
APL (Dyalog Unicode) , SBCS de 90 bytes
Pruébalo en línea!
2 2⍴0
una matriz de ceros 2x2{ }⍣⎕
ingrese N y aplique una función N veces⍵,⍨-⊖⍵
concatenar a la izquierda de la matriz una copia verticalmente invertida y negada de sí mismo(2×s←⍴⍵)↑
pad con ceros para que las dimensiones (recordadas comos
) sean dos veces las del argumento¯.5×≢⍵
girar hacia abajo para centrarlo verticalmente, intercalado entre los ceros de relleno2@(¯1 0+3 1×s÷2)
pon 2-s en ubicaciones específicas: estas son las barras diagonales entre instancias más pequeñas del fractal(⊢+⍉)
agregue la matriz con su yo transpuesto3|
módulo 3; utilizamos negación, así que tenga en cuenta que -1≡2 (mod 3) y -2≡1 (mod 3)' /\'[ ]
usar los elementos de la matriz como índices en la cadena' /\'
1↓∘⍉∘⌽⍣4
recorte el margen vacío de 1 elemento de ancho desde todos los lados↓
dividido en líneas' +$'⎕r''¨
eliminar espacios finales de cada uno (este desafío lo requiere)⎕∘←¨
salida cadafuente