Поток Змея, также известный как кривой Госпером , является фрактальной кривой, растет в геометрической прогрессии по размеру с каждым порядка / итерации процесса простой. Ниже приведены подробности о конструкции и несколько примеров для различных заказов:
Порядок 1 Flow Snake :
____
\__ \
__/
Порядок 2 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \
/ __ \__ \ \/
\ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Порядок 3 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \ ____
/ __ \__ \ \/ / __ \__ \
____ \ \ \__/ / __ \/ / __/ / __
____ \__ \ \/ ____ \/ / __/ / __ \ \ \
\__ \__/ / __ \__ \__/ / __ \ \ \ \/
__/ ____ \ \ \__/ ____ \ \ \ \/ / __
/ __ \__ \ \/ ____ \__ \ \/ / __ \/ /
\ \ \__/ / __ \__ \__/ / __ \ \ \__/
\/ ____ \/ / __/ ____ \ \ \ \/ ____
\__ \__/ / __ \__ \ \/ / __ \__ \
__/ ____ \ \ \__/ / __ \/ / __/ / __
/ __ \__ \ \/ ____ \/ / __/ / __ \/ /
\/ / __/ / __ \__ \__/ / __ \/ / __/
__/ / __ \ \ \__/ ____ \ \ \__/ / __
/ __ \ \ \ \/ ____ \__ \ \/ ____ \/ /
\ \ \ \/ / __ \__ \__/ / __ \__ \__/
\/ / __ \/ / __/ ____ \ \ \__/
\ \ \__/ / __ \__ \ \/
\/ \ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
строительство
Рассмотрим построение потока 1 Змея из пути, содержащего 7 ребер и 8 вершин (помечено ниже. Увеличено для возможности):
4____5____6
\ \
3\____2 7\
/
0____1/
Теперь для каждого следующего заказа вы просто заменяете ребра повернутой версией этого исходного шаблона заказа 1. Используйте следующие 3 правила для замены ребер:
1 Для горизонтального края замените его исходной формой как:
________
\ \
\____ \
/
____/
2 Для /
кромки ( 12
в приведенной выше конструкции) замените ее на следующую повернутую версию:
/
/ ____
\ / /
\/ /
/
____/
3 Для \
кромки ( 34
и 67
выше) замените ее на следующую повернутую версию:
/
/ ____
\ \ \
\ \ \
\ /
\/
Так, например, порядок 2 с вершинами из порядка 1 будет выглядеть как
________
\ \
________ \____ \6
\ \ / /
\____ \5___/ / ____
/ \ \ \
4___/ ________ \ \ \7
/ \ \ \ /
/ ____ \____ \2 \/
\ \ \ / /
\ \ \3___/ / ____
\ / \ / /
\/ ________ \/ /
\ \ /
\____ \1___/
/
0___/
Теперь для любого более высокого порядка вы просто разбиваете текущий уровень на ребра длиной 1 /
, 1 \
или 2 _
и повторяете процесс. Обратите внимание, что даже после замены общие вершины между любыми двумя последовательными ребрами все еще совпадают.
Вызов
- Вы должны написать функцию полной программы, которая получает одно целое число
N
через аргумент функции STDIN / ARGV / или ближайший эквивалент и печатает порядокN
Flow Snake на STDOUT. - Входное целое число всегда больше чем
0
. - Не должно быть никаких начальных пробелов, которые не являются частью шаблона.
- Не должно быть либо конечных пробелов, либо достаточно пробелов, чтобы заполнить шаблон, чтобы полностью заполнить минимальный ограничивающий прямоугольник.
- Трейлинг новой строки не является обязательным.
Забавные факты
- Flow Snakes - игра слов снежных хлопьев, которая напоминает эту модель для порядка 2 и выше.
- Поток и Змеи на самом деле играют роль в паттерне, так как паттерн состоит из единственного пути, проходящего по всему.
- Если вы внимательно обратите внимание, паттерн порядка 2 (и выше) также состоит из поворотов паттерна порядка 1, повернутых на общей вершине текущего и предыдущего ребра.
- Существует не ASCII-вариант Flow Snakes, который можно найти здесь и в нескольких других местах.
Это код-гольф, поэтому выиграй самый короткий код в байтах!
Leaderboard
Первый пост серии генерирует таблицу лидеров.
Чтобы убедиться, что ваши ответы отображаются, начните каждый ответ с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes