Un Flow Snake, également connu sous le nom de courbe de Gosper , est une courbe fractale dont la taille augmente de façon exponentielle à chaque ordre / itération d'un processus simple. Voici les détails de la construction et quelques exemples pour diverses commandes:
Commandez 1 Flow Snake :
____
\__ \
__/
Ordre 2 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \
/ __ \__ \ \/
\ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Ordre 3 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \ ____
/ __ \__ \ \/ / __ \__ \
____ \ \ \__/ / __ \/ / __/ / __
____ \__ \ \/ ____ \/ / __/ / __ \ \ \
\__ \__/ / __ \__ \__/ / __ \ \ \ \/
__/ ____ \ \ \__/ ____ \ \ \ \/ / __
/ __ \__ \ \/ ____ \__ \ \/ / __ \/ /
\ \ \__/ / __ \__ \__/ / __ \ \ \__/
\/ ____ \/ / __/ ____ \ \ \ \/ ____
\__ \__/ / __ \__ \ \/ / __ \__ \
__/ ____ \ \ \__/ / __ \/ / __/ / __
/ __ \__ \ \/ ____ \/ / __/ / __ \/ /
\/ / __/ / __ \__ \__/ / __ \/ / __/
__/ / __ \ \ \__/ ____ \ \ \__/ / __
/ __ \ \ \ \/ ____ \__ \ \/ ____ \/ /
\ \ \ \/ / __ \__ \__/ / __ \__ \__/
\/ / __ \/ / __/ ____ \ \ \__/
\ \ \__/ / __ \__ \ \/
\/ \ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Construction
Considérez l'ordre 1 Flow Snake à construire d'un chemin contenant 7 arêtes et 8 sommets (étiqueté ci-dessous. Agrandi pour la faisabilité):
4____5____6
\ \
3\____2 7\
/
0____1/
Maintenant, pour chaque prochaine commande, il vous suffit de remplacer les bords par une version pivotée de ce modèle de commande d'origine 1. Utilisez les 3 règles suivantes pour remplacer les bords:
1 Pour un bord horizontal, remplacez-le par sa forme d'origine tel quel:
________
\ \
\____ \
/
____/
2 Pour un /
bord ( 12
dans la construction ci-dessus), remplacez-le par la version pivotée suivante:
/
/ ____
\ / /
\/ /
/
____/
3 Pour un \
bord ( 34
et 67
au - dessus), remplacez-le par la version pivotée suivante:
/
/ ____
\ \ \
\ \ \
\ /
\/
Ainsi, par exemple, l'ordre 2 avec des sommets de l'ordre 1 étiqueté ressemblera à
________
\ \
________ \____ \6
\ \ / /
\____ \5___/ / ____
/ \ \ \
4___/ ________ \ \ \7
/ \ \ \ /
/ ____ \____ \2 \/
\ \ \ / /
\ \ \3___/ / ____
\ / \ / /
\/ ________ \/ /
\ \ /
\____ \1___/
/
0___/
Maintenant, pour tout ordre supérieur, vous divisez simplement le niveau actuel en bords de longueurs 1 /
, 1 \
ou 2 _
et répétez le processus. Notez que même après le remplacement, les sommets communs entre deux arêtes consécutives coïncident toujours.
Défi
- Vous devez écrire une fonction d'un programme complet qui reçoit un seul entier
N
via l'argument STDIN / ARGV / fonction ou l'équivalent le plus proche et imprime l'ordreN
Flow Snake sur STDOUT. - L'entier d'entrée est toujours supérieur à
0
. - Il ne doit pas y avoir d'espaces de tête qui ne font pas partie du motif.
- Il ne doit y avoir aucun espace de fin ou suffisamment d'espaces de fin pour remplir le motif afin de remplir complètement le rectangle de délimitation minimum.
- Le retour à la ligne est facultatif.
Faits amusants
- Flow Snakes est un jeu de mots de Snow Flakes, auquel ce modèle ressemble pour l'ordre 2 et au-dessus
- Le Flow et les serpents jouent en fait un rôle dans le motif car le motif est composé d'un seul chemin qui coule partout.
- Si vous le remarquez attentivement, le motif d'ordre 2 (et supérieur également) comprend des rotations de motif d'ordre 1 pivotant sur le sommet commun du bord actuel et du bord précédent.
- Il existe une variante non ASCII de Flow Snakes qui peut être trouvée ici et à plusieurs autres endroits.
C'est le code-golf donc le code le plus court en octets gagne!
Classement
Le premier post de la série génère un classement.
Pour vous assurer que vos réponses s'affichent, veuillez commencer chaque réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes