Почти все здесь знакомы с Треугольником Паскаля. Он образован последовательными строками, где каждый элемент является суммой двух его верхних левых и верхних правых соседей. Вот первые 5
строки (заимствованные из треугольника Generate Pascal ):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Мы возьмем треугольник Паскаля и выполним некоторые суммы (ха-ха). Для данного ввода n
выведите столбчатую сумму первых n
строк треугольника Паскаля. Например, для ввода 5
, выход будет сформирован
1
1 1
1 2 1
1 3 3 1
[+] 1 4 6 4 1
----------------------
1 1 5 4 9 4 5 1 1
Так что выход будет [1, 1, 5, 4, 9, 4, 5, 1, 1]
.
Обратите внимание, что вам не обязательно генерировать треугольник Паскаля для вычисления суммы - это зависит от вашей реализации, если это будет короче или нет.
вход
Один положительное целое число n
с n >= 1
в любом удобном формате .
Выход
Результирующий массив / список суммирования по столбцам первых n
строк треугольника Паскаля, как указано выше. Опять же в любом подходящем формате.
правила
- Начальные или завершающие символы новой строки или пробелы являются необязательными, при условии, что сами символы выстроены правильно.
- Допустимы либо полная программа, либо функция. Если функция, вы можете вернуть вывод, а не распечатать его.
- Если возможно, укажите ссылку на среду онлайн-тестирования, чтобы другие люди могли опробовать ваш код!
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Примеры
[input]
[output]
1
[1]
2
[1, 1, 1]
3
[1, 1, 3, 1, 1]
5
[1, 1, 5, 4, 9, 4, 5, 1, 1]
11
[1, 1, 11, 10, 54, 44, 155, 111, 286, 175, 351, 175, 286, 111, 155, 44, 54, 10, 11, 1, 1]
источник
CJam ,
322524 байтаСпасибо Луису Мендо за сохранение 1 байта.
Попробуйте онлайн!
объяснение
источник
JavaScript (ES6), 83 байта
1-индексация обошлась мне в байт. Объяснение:
g(j-1,i-1)+g(j-1,i+1)
рекурсивно вычисляет треугольник Паскаля, пока он не достигнет первой строки, которая является базовым случаем. Для получения сумм столбцов я использую тот факт, чтоmap
фактически передается третий параметр, поэтому в этом случае требуется дополнительный рекурсивный шаг.источник
JavaScript (ES6),
9087868482 байтаСохранено 3 байта благодаря ETHproductions
Контрольные примеры
Показать фрагмент кода
источник
Mathematica,
5957 байтСпасибо Martin Ender за поиск двухбайтовой экономии!
Чистая функция, принимающая положительное целочисленное значение и возвращающая список целых чисел. Буквально производит все соответствующие записи треугольника Паскаля и суммирует их соответствующим образом.
Предыдущее представление (которое немного легче читать):
источник
Октава ,
846745 байт22 байта сэкономлено благодаря Нейлу !
Попробуйте онлайн!
объяснение
pascal
Функция дает матрицу, содержащее значение в треугольнике Паскаля:Чтобы извлечь нужные значения, мы переворачиваем вертикально (
flip
), сохраняем нижнюю треугольную часть (tril
) и снова переворачиваем. Это даетspdiags
затем извлекает диагонали в виде столбцови
sum
вычисляет сумму каждого столбца, который дает результат.источник
@(n)sum(spdiags(flip(tril(flip(pascal(n))))))
?05AB1E ,
3432282524 байта-4 спасибо Эмигне.
Попробуйте онлайн!
В основном все, что он делает, это генерирует это:
Транспонировать это:
Затем суммируем каждый ряд:
Если ведущий и конечный 0 не приемлемы,
®>-Å
вместо этого®-Å
он исправляет штраф +1 байт.Результат для
50
:источник
-Å0
а не>-Ý0*
должно работать и€
не нужно в конце.>F
может бытьƒ
.Å
, умные! Я хранил "ctrl + f" для "списка идентичности" или чего-то в этомinfo.txt
роде ...13 x 5
в5 x 11
? Куда делись другие две колонки / строки?PHP , 119 байт
номера столбцов от 1-ввода до ввода -1
Попробуйте онлайн!
источник
array_column
новая функция в этой версииarray_column()
.$x=2*$j++-$i
экономит 7 байт. Зацикливание $ j вниз вместо up может сохранить 1 (for($j=$i+1;$j--;)
). И еще 3 байта могут быть выведены из игры.array_column
Желе , 12 байт
Попробуйте онлайн!
Как это работает
источник
Python 3,
201184 байтаисточник
Python 2 ,
140137 байтПопробуйте онлайн! или попробуйте онлайн!
Для
n=3
начинающих со списком, состоящим из
n
нулей, окружите единицу -[[0, 0, 0, 1, 0, 0, 0]]
создайте полную пирамиду
Поверните на 90º и суммируйте каждую строку, отбрасывая первый и последний (только нули)
источник
Хаскелл,
118112104 байта614 байтов сохранено благодаря @nimiисточник
#
доr#n|d<-0<$[1..n]=d++r++d
.#
, потому что это больше не рекурсивно: определитеf
какf n=foldl1 z[d++p x++d|x<-[1..n],d<-[0<$[1..n-x]]]
и дамп#
.Python 3, 124 символа
При этом используется тот факт, что треугольник Паскаля можно определить с помощью биномиальных коэффициентов. Я попытался удалить
abs(x)
иrange(-n+1,n)
, сделав этоrange(n)
а затем с помощьюlambda l:l[-1:0:-1]+l
но это было дольше.Кроме того, я впервые играю в гольф, так что я надеюсь, что вы простите любую ложь.
Бином не мой и был взят отсюда .
источник