Кривая Гильберта является пространство начинка фрактала , который может быть представлен в виде системы Lindenmayer с последующими поколениями , которые выглядят следующим образом :
Благодаря http://www.texample.net/tikz/examples/hilbert-curve/ для изображения.
Цель
Напишите самую короткую возможную программу (в байтах), которая берет положительное целое число n из стандартного ввода и выводит кривую Гильберта n-го порядка в стандартный вывод, используя только прямую косую черту, обратную косую черту, пробел и символ новой строки.
Например, если вход является 1
выходом, должен быть
\
\/
Если вход является 2
выходом, должен быть
/
\/\
/\ \
/ /\/
\ \
\/
Если вход является 3
выходом, должен быть
\
/\/
/ /\
\/\ \ \
/\ / / /
/ / \/ \/\
\ \/\ /\ \
\/ / / / /\/
/\/ / \ \
\ \/\ \/
\/\ \
/ /\/
\ \
\/
И так далее. (Они выглядят лучше, если вы вставите их во что-нибудь с меньшим межстрочным интервалом.)
Выходные данные не должны содержать переводы строк выше или ниже конечных точек кривой, а также пробелы в конце строк.
.map(&:rstrip)
нужно было добавить, чтобы выполнить требование «без пробелов».x
и сократить назначение дляy
иd
, в общей сложности до 205 символов (см. Ту же ссылку, что и раньше).Питон, 282
При этом используется рекурсивный подход для построения кривой Гильберта n-го порядка из предыдущей кривой. Кривые представлены в виде двумерного массива для лучшей нарезки и манипуляции.
Вот некоторые примеры:
источник
Malsys -
234221 персонажаЗдесь чувствую запах некоторых L-систем :) Malsys - онлайн-переводчик L-систем. Это не очень серьезная статья, но мне показалось, что это решение несколько интересное.
Синтаксис Malsys не очень хорош для игры в гольф, так как он содержит много длинных ключевых слов, но все же он довольно короткий, читаемый и выразительный.
http://malsys.cz/g/3DcVFMWn
Переводчик: http://malsys.cz/Process
Гольф версия:
А как насчет Ascii шестиугольной кривой Госпера? :)
http://malsys.cz/g/ae5v5vGB
источник
JavaScript (ES6) 313
340Редактировать Некоторые символы удалены с использованием очень плохих методов - например, глобальная переменная w вместо возвращаемого значения из функции H
Преобразование положения x, y в расстояние d (см. Википедию ) для каждого значения x, y и проверка, соединены ли ближайшие положения,
Тест в консоли FireFox. Вход через всплывающее окно, вывод через console.log.
Там нет пробелов и новых строк выше или ниже изображения. Но каждая строка заканчивается новой строкой, я думаю, что это правильный способ сделать художественный образ Ascii.
источник
alert
вместоconsole.log
. У вас также есть дополнительный пробел послеfor
четвертой строки, и вы должны быть в состоянии избавиться от этого последнего разрыва строки.Perl, 270 символов
Супер гольф
Не так много в гольфе
Вероятно, я бы больше проиграл, если бы я лучше понял Perl. Использует системный подход Lindenmayer с использованием правил производства, определенных в строке 1.
источник
APL (Dyalog Unicode) , 90 байтов SBCS
Попробуйте онлайн!
2 2⍴0
матрица нулей 2x2{ }⍣⎕
введите N и примените функцию N раз⍵,⍨-⊖⍵
объединить слева от матрицы вертикально перевернутую и отрицательную копию себя(2×s←⍴⍵)↑
заполнить нулями, чтобы размеры (запоминаемые какs
) были в два раза больше аргумента¯.5×≢⍵
повернуть вниз, чтобы центрировать его вертикально, зажатый между нулями заполнения2@(¯1 0+3 1×s÷2)
поставить 2-е в определенных местах - это косые черты между меньшими экземплярами фрактала(⊢+⍉)
добавить матрицу с ее транспонированным я3|
по модулю 3; мы использовали отрицание, поэтому обратите внимание, что -1≡2 (мод 3) и -2≡1 (мод 3)' /\'[ ]
использовать элементы матрицы в качестве индексов в строке' /\'
1↓∘⍉∘⌽⍣4
обрезать пустое поле шириной в 1 элемент со всех сторон↓
разбить на линии' +$'⎕r''¨
убрать завершающие пробелы из каждого (этот вызов требует этого)⎕∘←¨
выводить каждыйисточник