Un Flow Snake, noto anche come curva di Gosper , è una curva frattale, che cresce esponenzialmente in dimensioni con ogni ordine / iterazione di un semplice processo. Di seguito sono riportati i dettagli sulla costruzione e alcuni esempi per vari ordini:
Ordina 1 Flow Snake :
____
\__ \
__/
Ordina 2 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \
/ __ \__ \ \/
\ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Ordina 3 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \ ____
/ __ \__ \ \/ / __ \__ \
____ \ \ \__/ / __ \/ / __/ / __
____ \__ \ \/ ____ \/ / __/ / __ \ \ \
\__ \__/ / __ \__ \__/ / __ \ \ \ \/
__/ ____ \ \ \__/ ____ \ \ \ \/ / __
/ __ \__ \ \/ ____ \__ \ \/ / __ \/ /
\ \ \__/ / __ \__ \__/ / __ \ \ \__/
\/ ____ \/ / __/ ____ \ \ \ \/ ____
\__ \__/ / __ \__ \ \/ / __ \__ \
__/ ____ \ \ \__/ / __ \/ / __/ / __
/ __ \__ \ \/ ____ \/ / __/ / __ \/ /
\/ / __/ / __ \__ \__/ / __ \/ / __/
__/ / __ \ \ \__/ ____ \ \ \__/ / __
/ __ \ \ \ \/ ____ \__ \ \/ ____ \/ /
\ \ \ \/ / __ \__ \__/ / __ \__ \__/
\/ / __ \/ / __/ ____ \ \ \__/
\ \ \__/ / __ \__ \ \/
\/ \ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Costruzione
Considera l'ordine 1 Flow Snake da costruire di un percorso contenente 7 spigoli e 8 vertici (etichettati di seguito. Ingrandito per fattibilità):
4____5____6
\ \
3\____2 7\
/
0____1/
Ora per ogni ordine successivo, è sufficiente sostituire i bordi con una versione ruotata di questo modello di ordine 1 originale. Utilizzare le seguenti 3 regole per sostituire i bordi:
1 Per un bordo orizzontale, sostituirlo con la forma originale così com'è:
________
\ \
\____ \
/
____/
2 Per un /
bordo ( 12
nella costruzione sopra), sostituirlo con la seguente versione ruotata:
/
/ ____
\ / /
\/ /
/
____/
3 Per un \
bordo ( 34
e 67
sopra), sostituirlo con la seguente versione ruotata:
/
/ ____
\ \ \
\ \ \
\ /
\/
Quindi, ad esempio, apparirà l'ordine 2 con i vertici dall'ordine 1 etichettati
________
\ \
________ \____ \6
\ \ / /
\____ \5___/ / ____
/ \ \ \
4___/ ________ \ \ \7
/ \ \ \ /
/ ____ \____ \2 \/
\ \ \ / /
\ \ \3___/ / ____
\ / \ / /
\/ ________ \/ /
\ \ /
\____ \1___/
/
0___/
Ora per qualsiasi ordine superiore, devi semplicemente suddividere il livello corrente in bordi di lunghezze 1 /
, 1 \
o 2_
e ripetere il processo. Si noti che anche dopo la sostituzione, i vertici comuni tra due bordi consecutivi continuano a coincidere.
Sfida
- Devi scrivere una funzione di un programma completo che riceve un singolo intero
N
tramite STDIN / ARGV / argomento della funzione o l'equivalente più vicino e stampa l'ordineN
Flow Snake su STDOUT. - L'intero di input è sempre maggiore di
0
. - Non dovrebbero esserci spazi iniziali che non fanno parte del modello.
- Non dovrebbero esserci spazi finali o spazi finali sufficienti per riempire il motivo per riempire completamente il rettangolo di delimitazione minimo.
- Il trascinamento di newline è facoltativo.
Fatti divertenti
- Flow Snakes è un gioco di parole di Snow Flakes, che questo schema ricorda per l'ordine 2 e superiori
- Flow e Snakes svolgono effettivamente un ruolo nel pattern poiché il pattern è costituito da un singolo percorso che scorre attraverso.
- Se notate attentamente, il modello di ordine 2 (e anche superiore) comprende rotazioni di modello di ordine 1 imperniate sul vertice comune del bordo corrente e del bordo precedente.
- Esiste una variante non ASCII di Flow Snakes che può essere trovata qui e in diverse altre posizioni.
Questo è code-golf quindi il codice più breve in byte vince!
Classifica
Il primo post della serie genera una classifica.
Per assicurarti che le tue risposte vengano visualizzate, inizia ogni risposta con un titolo, utilizzando il seguente modello Markdown:
# Language Name, N bytes
dov'è N
la dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:
# Ruby, <s>104</s> <s>101</s> 96 bytes