Uma serpente de fluxo, também conhecida como curva de Gosper , é uma curva fractal, que cresce exponencialmente em tamanho a cada ordem / iteração de um processo simples. Abaixo estão os detalhes sobre a construção e alguns exemplos para vários pedidos:
Encomenda 1 Flow Snake :
____
\__ \
__/
Encomenda 2 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \
/ __ \__ \ \/
\ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Encomenda 3 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \ ____
/ __ \__ \ \/ / __ \__ \
____ \ \ \__/ / __ \/ / __/ / __
____ \__ \ \/ ____ \/ / __/ / __ \ \ \
\__ \__/ / __ \__ \__/ / __ \ \ \ \/
__/ ____ \ \ \__/ ____ \ \ \ \/ / __
/ __ \__ \ \/ ____ \__ \ \/ / __ \/ /
\ \ \__/ / __ \__ \__/ / __ \ \ \__/
\/ ____ \/ / __/ ____ \ \ \ \/ ____
\__ \__/ / __ \__ \ \/ / __ \__ \
__/ ____ \ \ \__/ / __ \/ / __/ / __
/ __ \__ \ \/ ____ \/ / __/ / __ \/ /
\/ / __/ / __ \__ \__/ / __ \/ / __/
__/ / __ \ \ \__/ ____ \ \ \__/ / __
/ __ \ \ \ \/ ____ \__ \ \/ ____ \/ /
\ \ \ \/ / __ \__ \__/ / __ \__ \__/
\/ / __ \/ / __/ ____ \ \ \__/
\ \ \__/ / __ \__ \ \/
\/ \ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Construção
Considere a ordem 1 Flow Snake a ser construída com um caminho contendo 7 arestas e 8 vértices (rotulados abaixo. Ampliado para viabilidade):
4____5____6
\ \
3\____2 7\
/
0____1/
Agora, para cada próximo pedido, basta substituir as bordas por uma versão girada desse padrão original de pedido 1. Use as três regras a seguir para substituir as arestas:
1 Para uma aresta horizontal, substitua-a pela forma original como está:
________
\ \
\____ \
/
____/
2 Para uma /
aresta ( 12
na construção acima), substitua-a pela seguinte versão girada:
/
/ ____
\ / /
\/ /
/
____/
3 Para uma \
aresta ( 34
e 67
acima), substitua-a pela seguinte versão girada:
/
/ ____
\ \ \
\ \ \
\ /
\/
Por exemplo, o pedido 2 com vértices do pedido 1 rotulado terá a aparência de
________
\ \
________ \____ \6
\ \ / /
\____ \5___/ / ____
/ \ \ \
4___/ ________ \ \ \7
/ \ \ \ /
/ ____ \____ \2 \/
\ \ \ / /
\ \ \3___/ / ____
\ / \ / /
\/ ________ \/ /
\ \ /
\____ \1___/
/
0___/
Agora, para qualquer ordem superior, basta dividir o nível atual em arestas de comprimentos 1 /
, 1 \
ou 2 _
e repetir o processo. Observe que, mesmo após a substituição, os vértices comuns entre duas arestas consecutivas ainda coincidem.
Desafio
- É necessário escrever uma função de um programa completo que receba um único número inteiro
N
via argumento STDIN / ARGV / function ou o equivalente mais próximo e imprima a ordemN
Flow Snake em STDOUT. - O número inteiro de entrada é sempre maior que
0
. - Não deve haver espaços à esquerda que não façam parte do padrão.
- Não deve haver espaços finais ou espaços finais suficientes para preencher o padrão e preencher completamente o retângulo mínimo.
- A nova linha à direita é opcional.
Curiosidades
- Flow Snakes é um jogo de palavras de Snow Flakes, que esse padrão se assemelha à ordem 2 e acima
- O Flow e Snakes realmente desempenham um papel no padrão, pois o padrão é constituído por um único caminho que flui por todo lado.
- Se você observar com cuidado, o padrão da ordem 2 (e também mais alto) compreende rotações do padrão da ordem 1 giradas no vértice comum da aresta atual e da aresta anterior.
- Existe uma variante não ASCII de Flow Snakes que pode ser encontrada aqui e em vários outros locais.
Este é o código-golfe, pelo que o código mais curto em bytes ganha!
Entre os melhores
O primeiro post da série gera uma tabela de classificação.
Para garantir que suas respostas sejam exibidas, inicie todas as respostas com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes