Начав с того, что /\
вы можете создать шаблон в виде треугольника Серпинского , добавив линию под таким, чтобы ...
- Любая свободная ветвь
/
или\
расщепляется снова на две ветви:/\
. - Любое столкновение ветвей
\/
умирает ни с чем (кроме пробелов) под ним.
Повторение этих правил дает
/\
/\/\
/\ /\
/\/\/\/\
/\ /\
/\/\ /\/\
etc...
Напишите программу или функцию, которая принимает положительное целое число N и печатает первые N строк этого шаблона в stdout, не используя больше начальных или конечных пробелов, чем необходимо.
Например, если вход является 1
выходом, должен быть
/\
Если вход является 2
выходом, должен быть
/\
/\/\
Если вход является 8
выходом, должен быть
/\
/\/\
/\ /\
/\/\/\/\
/\ /\
/\/\ /\/\
/\ /\ /\ /\
/\/\/\/\/\/\/\/\
И так далее.
Код с наименьшим количеством байтов выигрывает.
code-golf
fractal
code-golf
math
polynomials
abstract-algebra
code-golf
geometry
3d
popularity-contest
string
code-golf
math
3d
code-golf
javascript
browser
code-golf
random
array-manipulation
code-golf
restricted-source
javascript
set-theory
code-golf
graph-theory
path-finding
decision-problem
code-golf
code-golf
primes
c
code-golf
graphical-output
fractal
fastest-code
simulation
code-golf
sequence
code-golf
graphical-output
code-golf
code-golf
math
binary
rational-numbers
code-golf
number
fibonacci
popularity-contest
code-golf
number
code-golf
game
Кальвин Хобби
источник
источник
Ответы:
GolfScript (42 байта)
Онлайн демо
Это использует хорошо известную связь между треугольником Паскаля и треугольником Серпинского.
источник
CJam,
4846 байтовПростой рекурсивный подход, основанный на наблюдениях 1 и 2 в вопросе.
Попробуйте онлайн.
Как это устроено
CJam, 51 байт
Мне больше нравится этот подход, но он не может конкурировать с рекурсивным. Даже после устранения
2mL
(что приводит к как минимум O (2 n ) времени выполнения), я все еще на 48 байтов ...Этот подход кодирует
/\
«1», а двойные пробелы между ними - «0». Рассматривая получившиеся массивы двоичных чисел, мы видим, что конфигурация n-й строки соответствует n-му целому числу, большему 1, которое может быть выражено как произведение различных чисел Ферма (целые числа вида 2 2 k +1 ).Как это устроено
источник
Python 2 -
140 139 127 122 121 118116На основании временных замен строк ( /programming//a/8687380/3419103 ):
/
>V
\
>V
\/
>__
(2 пробела)V
>/\
источник
b*(N-1)+m+n
может бытьb*~-N+m+n
Javascript - 117 байт
уменьшенная:
Expanded:
Пример вывода (для
n = 20
):Теперь , если только
repeat
иreplace
имена функций не было так долго. :Писточник
Pyth, 45 байт
Пример запуска
Как это устроено
источник
Руби, 90
объяснение
Integer
.String#center
для созданияString
"/\"
сn - 2
пробелами на каждой стороне и поместите его вArray
(a
).a
последнему элементуa
при каждом вхождении"\/"
заменяется на" "
и при каждом вхождении" /"
или" \"
заменяться"/\"
.puts
для печати каждого элемента вa
отдельной строке.источник
Хаскелл,
128112источник
import Data.List
(так как вы использовалиunlines
), что доводит их до 145unlines
в прелюдии.JavaScript (E6) 107
106Редактировать: исправлено количество байтов, сделано рекурсивным.
Не сильно отличается от другого ответа JS ... по крайней мере, этот "печатает" шаблон в соответствии с запросом. Ядро заменяет '/' '\' на '/ \', а все остальное на '' в каждой новой строке.
Тест в консоли FireFox / FireBug
Выход
источник
Perl 5 - 56 байт
\ 0 можно заменить действительными символами нулевого байта
Он использует тот факт, что если вы игнорируете начальные пробелы и представляете «/ \» как 1 и «» как 0, то шаблон в данной строке f (n) = f (n-1) ^ (f (n-1) < <1) Однако вычисления в приведенном выше коде выполняются для строк, которые близки к ожидаемому выводу (без начальных пробелов, другие пробелы заменяются нулевыми байтами) благодаря побитовой обработке строк в perl.
источник
Python 2, 84 байта
источник
Javascript с лямбдами,
141128141
128
Может быть протестировано в Firefox (n = 16):
источник
Python 2, 97 байт
источник
Mathematica, 86 байт
источник