La courbe de Hilbert est une fractale remplissant l'espace qui peut être représentée comme un système Lindenmayer avec des générations successives qui ressemblent à ceci:
Merci à http://www.texample.net/tikz/examples/hilbert-curve/ pour l'image.
Objectif
Écrivez le programme le plus court possible (en octets) qui prend un entier positif n de stdin et dessine la courbe de Hilbert de nième ordre vers stdout en utilisant uniquement la barre oblique, la barre oblique inverse, l'espace et la nouvelle ligne.
Par exemple, si l'entrée est 1
la sortie doit être
\
\/
Si l'entrée est 2
la sortie doit être
/
\/\
/\ \
/ /\/
\ \
\/
Si l'entrée est 3
la sortie doit être
\
/\/
/ /\
\/\ \ \
/\ / / /
/ / \/ \/\
\ \/\ /\ \
\/ / / / /\/
/\/ / \ \
\ \/\ \/
\/\ \
/ /\/
\ \
\/
Etc. (Ils sont plus beaux si vous les collez dans quelque chose avec moins d'espacement de ligne.)
La sortie ne doit pas contenir de nouvelles lignes au-dessus ou au-dessous des extrémités de la courbe, ni aucun espace de fin sur aucune ligne.
.map(&:rstrip)
devait être ajouté pour répondre à l'exigence "sans espaces de fuite".x
et de raccourcir l'affectation ày
etd
, pour un total de 205 caractères (voir le même lien que précédemment).Python, 282
Celui-ci utilise une approche récursive pour construire la courbe de Hilbert d'ordre n à partir de la courbe précédente. Les courbes sont représentées sous la forme d'un tableau numpy 2D pour un meilleur découpage et une meilleure manipulation.
Voici quelques exemples:
la source
Malsys -
234221 caractèresJe sens quelques L-systèmes ici :) Malsys est un interpréteur de L-système en ligne. Ce n'est pas une entrée vraiment sérieuse, mais j'ai senti que cette solution était quelque peu intéressante.
La syntaxe de Malsys n'est pas vraiment bonne pour le golf car elle contient beaucoup de mots-clés longs mais néanmoins, elle est assez courte, lisible et expressive.
http://malsys.cz/g/3DcVFMWn
Interprète: http://malsys.cz/Process
Version golfée:
Et que diriez-vous de la courbe de Gosper hexagonale Ascii? :)
http://malsys.cz/g/ae5v5vGB
la source
JavaScript (ES6) 313
340Modifier un caractère supprimé en utilisant vraiment mauvais pratiques - comme la variable globale w au lieu d'une valeur de retour de la fonction H
Convertir la position x, y en distance d (voir Wikipedia ) pour chaque x, y et vérifier si les positions les plus proches sont connectées,
Testez dans la console FireFox. Entrée via popup, sortie via console.log.
Il n'y a aucun espace de fin et aucun retour à la ligne au-dessus ou au-dessous de l'image. Mais chaque ligne se termine par une nouvelle ligne, je pense que c'est la bonne façon de créer une image d'art Ascii.
la source
alert
au lieu deconsole.log
. Vous disposez également d'un espace supplémentaire après lefor
sur la quatrième ligne, et vous devriez pouvoir vous débarrasser de ce dernier saut de ligne.Perl, 270 caractères
Super golfé
Pas tellement joué au golf
Je pourrais probablement le jouer davantage si je comprenais mieux Perl. Utilise une approche système Lindenmayer utilisant des règles de production définies à la ligne 1.
la source
APL (Dyalog Unicode) , 90 octets SBCS
Essayez-le en ligne!
2 2⍴0
une matrice 2x2 de zéros{ }⍣⎕
saisir N et appliquer une fonction N fois⍵,⍨-⊖⍵
concaténer à gauche de la matrice une copie de lui-même inversée et inversée verticalement(2×s←⍴⍵)↑
tampon avec des zéros de sorte que les dimensions (rappelées commes
) soient deux fois plus¯.5×≢⍵
tourner vers le bas pour le centrer verticalement, pris en sandwich entre les zéros de remplissage2@(¯1 0+3 1×s÷2)
mettre 2 s à des emplacements spécifiques - ce sont les barres obliques de liaison entre les petites instances de la fractale(⊢+⍉)
ajouter la matrice avec son auto transposé3|
modulo 3; nous avons utilisé la négation, veuillez donc noter que -1≡2 (mod 3) et -2≡1 (mod 3)' /\'[ ]
utiliser les éléments de la matrice comme indices dans la chaîne' /\'
1↓∘⍉∘⌽⍣4
couper la marge vide à 1 élément de tous les côtés↓
divisé en lignes' +$'⎕r''¨
supprimer les espaces de fuite de chacun (ce défi l'exige)⎕∘←¨
sortie chacunla source