Una serpiente de flujo, también conocida como curva de Gosper , es una curva fractal, que crece exponencialmente en tamaño con cada orden / iteración de un proceso simple. A continuación se detallan los detalles de la construcción y algunos ejemplos de varios pedidos:
Pedido 1 serpiente de flujo :
____
\__ \
__/
Orden 2 serpiente de flujo :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \
/ __ \__ \ \/
\ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Orden 3 serpiente de flujo :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \ ____
/ __ \__ \ \/ / __ \__ \
____ \ \ \__/ / __ \/ / __/ / __
____ \__ \ \/ ____ \/ / __/ / __ \ \ \
\__ \__/ / __ \__ \__/ / __ \ \ \ \/
__/ ____ \ \ \__/ ____ \ \ \ \/ / __
/ __ \__ \ \/ ____ \__ \ \/ / __ \/ /
\ \ \__/ / __ \__ \__/ / __ \ \ \__/
\/ ____ \/ / __/ ____ \ \ \ \/ ____
\__ \__/ / __ \__ \ \/ / __ \__ \
__/ ____ \ \ \__/ / __ \/ / __/ / __
/ __ \__ \ \/ ____ \/ / __/ / __ \/ /
\/ / __/ / __ \__ \__/ / __ \/ / __/
__/ / __ \ \ \__/ ____ \ \ \__/ / __
/ __ \ \ \ \/ ____ \__ \ \/ ____ \/ /
\ \ \ \/ / __ \__ \__/ / __ \__ \__/
\/ / __ \/ / __/ ____ \ \ \__/
\ \ \__/ / __ \__ \ \/
\/ \ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Construcción
Considere el orden 1 Flow Snake que se construirá a partir de una ruta que contiene 7 bordes y 8 vértices (etiquetados a continuación. Ampliado para mayor factibilidad):
4____5____6
\ \
3\____2 7\
/
0____1/
Ahora, para cada orden siguiente, simplemente reemplace los bordes con una versión girada de este patrón de orden 1 original. Use las siguientes 3 reglas para reemplazar los bordes:
1 Para un borde horizontal, reemplácelo con la forma original como está:
________
\ \
\____ \
/
____/
2 Para un /
borde ( 12
en la construcción anterior), reemplácelo con la siguiente versión girada:
/
/ ____
\ / /
\/ /
/
____/
3 Para un \
borde ( 34
y 67
superior), reemplácelo con la siguiente versión girada:
/
/ ____
\ \ \
\ \ \
\ /
\/
Entonces, por ejemplo, el orden 2 con vértices del orden 1 etiquetado se verá como
________
\ \
________ \____ \6
\ \ / /
\____ \5___/ / ____
/ \ \ \
4___/ ________ \ \ \7
/ \ \ \ /
/ ____ \____ \2 \/
\ \ \ / /
\ \ \3___/ / ____
\ / \ / /
\/ ________ \/ /
\ \ /
\____ \1___/
/
0___/
Ahora, para cualquier orden superior, simplemente divida el nivel actual en bordes de longitudes 1 /
, 1 \
o 2 _
y repita el proceso. Tenga en cuenta que incluso después de la sustitución, los vértices comunes entre dos bordes consecutivos siguen coincidiendo.
Reto
N
Debe escribir una función de un programa completo que reciba un número entero único a través del argumento STDIN / ARGV / function o el equivalente más cercano e imprima la ordenN
Flow Snake en STDOUT.- El entero de entrada siempre es mayor que
0
. - No debe haber espacios iniciales que no sean parte del patrón.
- No debe haber espacios finales o suficientes espacios finales para rellenar el patrón para llenar completamente el rectángulo límite mínimo.
- La nueva línea final es opcional.
Hechos graciosos
- Flow Snakes es un juego de palabras de Snow Flakes, que este patrón se asemeja al orden 2 y superior
- El flujo y las serpientes realmente juegan un papel en el patrón, ya que el patrón se compone de un solo camino que fluye a lo largo.
- Si observa con cuidado, el patrón de orden 2 (y también superior) se compone de rotaciones del patrón de orden 1 pivotado en el vértice común del borde actual y el borde anterior.
- Hay una variante no ASCII de Flow Snakes que se puede encontrar aquí y en varios otros lugares.
Este es el código de golf, ¡el código más corto en bytes gana!
Tabla de clasificación
La primera publicación de la serie genera una tabla de clasificación.
Para asegurarse de que sus respuestas aparezcan, comience cada respuesta con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes