Треугольник Зейделя - это математическая конструкция, похожая на треугольник Паскаля, и известная своей связью с числами Бернулли.
Первые несколько строк:
1
1 1
2 2 1
2 4 5 5
16 16 14 10 5
16 32 46 56 61 61
Каждая строка генерируется следующим образом:
Если номер строки четный (1-индексированный):
Сбить первый элемент предыдущего ряда
Каждый следующий элемент является суммой предыдущего элемента и элемента над ним
Дублировать последний элемент
Если номер строки нечетный:
Сбить последний элемент предыдущего ряда
Возвращаясь назад , каждый элемент является суммой предыдущего элемента и элемента над ним.
Дублируйте то, что сейчас является первым предметом.
По сути, мы строим треугольник в виде зигзага:
1
v
1 > 1
v
2 < 2 < 1
v
2 > 4 > 5 > 5
Для получения дополнительной информации см. Страницу Википедии о числах Бернулли.
Соревнование:
Если n
в качестве аргумента функции или из STDIN, выведите или вернете либо т- n
ю строку треугольника Зейделя, либо первые n
строки. Вы можете использовать либо 0, либо 1 индексирование.
Вам не нужно обрабатывать отрицательный или нецелочисленный ввод (ни 0, если индексирован 1). Вам не нужно обрабатывать выходы больше2147483647 = 2^31 - 1
Поскольку это код-гольф, делайте это как можно меньше байтов.
Примеры:
В этих примерах возвращаемое значение является n
строкой с 0 индексами.
Input -> Output
0 1
1 1 1
2 2 2 1
6 272 272 256 224 178 122 61
13 22368256 44736512 66750976 88057856 108311296 127181312 144361456 159575936 172585936 183194912 191252686 196658216 199360981 199360981
источник
Ответы:
Brain-Flak , 66 байт
Попробуйте онлайн!
Строка имеет индекс 0.
источник
JavaScript (SpiderMonkey) , 67 байт
Этот код злоупотребляет
sort()
методом и работает не на всех движках.Строки нумерованы.
Попробуйте онлайн!
Как?
Мы условно обращаем массив, используя
sort()
метод с функцией обратного вызова, которая игнорирует его параметры и возвращает либо 0, либо положительное целое число. Не пытайтесь сделать это дома! Это надежно работает только на SpiderMonkey.Обратите внимание, что V8, вероятно, использует разные алгоритмы сортировки в зависимости от длины массива (менее или более 10 элементов).
комментарии
источник
sort()
этого движка. Я добавил объяснение.Perl 6 , 52 байта
Попробуйте онлайн!
источник
Haskell ,
898782 байтаТолько
s
печатает строки в зигзагообразном порядке, анонимная функция в первой строке переворачивает половину строк.Спасибо @nimi за сохранение 5 байтов!
Попробуйте онлайн!
источник
Желе , 12 байт
Попробуйте онлайн!
источник
⁸
Python 3 ,
9891 байтПопробуйте онлайн!
Переключение на нумерацию строк на основе 0 сэкономило 7 байтов.
источник
Юлия 0,6 , 85 байт
Попробуйте онлайн!
Это рекурсивное решение в Юлии. Обратите внимание, что он имеет индексирование на основе 1. Отсюда и тесты.
Неуправляемая версия, чтобы понять логику:
Как бонус, вот нерекурсивная версия, но она длиннее:
источник
Python 2 ,
10397 байтПопробуйте онлайн!
Нерекурсивная версия (легче читать):
Python 2 , 106 байт
Попробуйте онлайн!
Конечно, лучше возможно!
источник
Python 3 , 91 байт
Попробуйте онлайн!
источник
import
и*