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 ( 12dans la construction ci-dessus), remplacez-le par la version pivotée suivante:
/
/ ____
\ / /
\/ /
/
____/
3 Pour un \bord ( 34et 67au - 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
Nvia l'argument STDIN / ARGV / fonction ou l'équivalent le plus proche et imprime l'ordreNFlow 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ù Nest 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