Треугольник Паскаля генерируется, начиная с 1 в первом ряду. В последующих строках число определяется суммой двух чисел, расположенных непосредственно над ним слева и справа.
Чтобы продемонстрировать, вот первые 5 строк треугольника Паскаля:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Соревнование
Учитывая ввод n (при условии, что он наиболее удобен на выбранном вами языке), сгенерируйте первые n строк треугольника Паскаля. Вы можете предположить, что п является целым числом от 1 до 25. Между каждой строкой и пробелом между числами должен быть разрыв строки, но помимо этого вы можете отформатировать его так, как вам нравится.
Это код-гольф , поэтому выигрывает самое короткое решение.
Пример ввода / вывода
> 1
1
> 9
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
code-golf
math
combinatorics
Питер Олсон
источник
источник
Ответы:
J , 12 символов
источник
i.5
возвращает первые пять натуральных чисел. Строка 2 добавляет{:
«Хвост» (возвратите последний). Строка 3 объединяет их с!
«Out Of» (количество комбинаций). Строка 4(!{:)i.5
такая же. Факторинг Хук. Такова(!:)
операция, которая преобразует первые n натуральных чисел в n-ю строку треугольника Паскаля. Строка 5 применяет его ко всем префиксам (обратная косая черта) в 0..4, но J заполняет неиспользуемые места 0, поэтому операция объединяется (@
) с операцией форматирования строки":
. Очень крутой J, проголосовал.!
означает факториал; двоичный!
подсчитывает комбинации. Окончательный@
в":@(!{:)\@i.
только там , чтобы сделать это автономный глагол.Python, 56 байт
Пример использования:
Производит:
источник
exec
избегатьfor
петли.Python,
9491887063 символаисточник
Математика: 36 (41?)
У Mathematica есть
Binomial
функция, но от этого она получает удовольствие. Я предлагаю:Строка выше отобразит рваный массив, такой как:
Поскольку это базовый формат в Mathematica, я подумал, что это будет приемлемо, но, как только я перечитал правила, я думаю, что это может быть не так. Добавление
Grid@
даст однозначно приемлемый вывод, всего 41 символ:n = 6
:источник
С 522
Самостоятельно демонстрирующий C ответ. Не может быть яснее! Бонусные баллы за поиск дополнительного персонажа.
источник
Golfscript (21 символ)
Поскольку было запрошено объяснение:
источник
Хаскелл,
9492Выход:
Версия из 71 символа, которая не печатает пробел между каждым числом:
Выход:
источник
mapM
вместоmapM_
.Scala,
81787270 знаков81 символ: первая попытка, безбожно скопировано с версии Python :)
Запустите его как скрипт или прямо в REPL.
Сократить до 70 символов с чем-то удивительно читаемым и идиоматическим:
Или
7270 символов совершенно другим методом:источник
Рубин:
514946 символов(45 символов кода + 1 символ опции командной строки)
Благодаря:
Образец прогона:
Попробуйте онлайн!
источник
p.map!{|i|(v=n)+n=i}
.map
. Спасибо.JavaScript (
90858381)Демо: http://jsfiddle.net/tcRCS/3/
ПРИМЕЧАНИЕ . Практически не работает примерно при n> 30, поскольку числа переполняют встроенный целочисленный тип данных и становятся числами с плавающей запятой.
Редактирование 1 : 5 символов удалены путем преобразования
while
вfor
и комбинирование заявленияРедактировать 2 : переместить
s=
заявление внутрьfor
и сохранить 2 символаРедактировать 3 : объединить
s=1,j=1
инициализатор вs=j=1
и сохранить 2 символаисточник
s*(i-j)/j
, а неs*((i-j)/j)
.(i-j)
до деления наj
, то арифметика с плавающей точкой не нужна, потому что результаты всегда должны быть целыми. Если вы сделаете это((i-j)/j)
сначала, это приведет к десятичным значениям, которые могут стать источником ошибки, и, по крайней мере, потребует дополнительного кода для округления / усечения. Вы не начнете видеть это, пока не доберетесь доn>11
, и вы увидите десятичные значения в выводе, то есть,1 11 55 165 330 461.99999999999994 461.99999999999994...
R, 39 символов
R, кажется, очень подходящий инструмент для этой задачи :-)
источник
n
дано? Я исправил код. Это сейчас нормально?n
необходимо предоставить источник из внешнего источника, а аппарат для его захвата включен в вашу программу. Как правило, это означает аргумент командной строки, или стандартный ввод, или файл. По файлу почти никогда не используется, потому что он неизменно длиннее двух других вариантов.в Q (25 символов / 20 с более короткой версией)
Более короткие
Пример использования:
источник
t:{(x-1){0+':x,0}\1}
awk - 73 символа
довольно простая реализация:
образец прогона:
источник
Perl,
52, 49 символовРедактировать: используя
say
вместоprint
источник
Perl,
4754 символовОн берет число из командной строки, но не выполняет никаких проверок ошибок.
Просто понял, что это работает только до п = 4. Это был какой-то старый код, который я имел на своем HD.
Это работает, хотя:
Однако в сценарий необходимо ввести n, иначе это будет еще один символ.
источник
Бочонок , 40 байт
Разъяснения
источник
Perl, 77 символов
Пример ввода
Пример вывода
источник
C
132127 символовисточник
Паскаль:
216192 символов(Не настоящий конкурент, просто почетное присутствие.)
Образец прогона:
источник
MATL , 10 байт
Язык создан после этого вызова
Попробуйте онлайн!
источник
D
134128 символоввыход для 9
в полной мере использовать «вы можете отформатировать его так, как вам нравится»; между каждым числом и переводом строки стоит пробел
edit изменил положение для
l
бритья некоторых символовисточник
Scala, 131 персонаж
Принимает ввод из командной строки.
Выход для n = 10:
источник
0
с :-)?F♯ - 203 символа
Моя первая попытка игры в гольф и первая попытка функционального программирования. Вероятно, есть какой-то очевидный способ сократить его, я еще не совсем понял. Он соответствует в F201-компиляторе VS2010 (который в отличие от более ранних версий запускает #light по умолчанию), а также работает в интерпретаторе F♯. Принимает ввод через стандартный ввод. Хотелось бы, чтобы был лучший способ ввода / вывода! Много персонажей!
источник
Почему нет принятого ответа на этот вопрос?
VBA - 249 символов
источник
Постскриптум - 59 символов (63, если считать
-dn=
чтобы получить количество строк в)бежать с
получить
источник
Mathematica 35 символов
Вот скучный и ленивый способ разрезания треугольника Паскаля:
источник
APL,
1915 символовВозможно, немного поздно для вечеринки?
Это не бьет вход J, все же.
Это предполагает, что индекс origin (
⎕IO
) установлен в0
. К сожалению, с происхождением индекса1
нам нужно2518 символов:Есть два
⍨
коде пункта, чтобы выразить мое разочарование.Демо-версия:
Пояснения
Укороченная версия:
⍳⍵
(с источником индекса 0) создает массив чисел от 0 до⍵-1
включительно, где⍵
является правильным аргументом функции.⍳⍵+1
генерирует все числа от 0 до⍵
{⍵!⍨⍳⍵+1}
генерирует⍵
выборk
для каждого элементаk
в⍳⍵+1
. Оператор⍨
(коммутирует) меняет местами аргументы функции, так что правый аргумент становится левым, и наоборот.{⍵!⍨⍳⍵+1}¨⍳⍵
передает каждый элемент с⍳⍵
помощью¨
оператора (each). Результатом является одномерный массив, содержащий первые⍵
строки треугольника Паскаля.⍪
принимает одномерный вектор и делает его столбцом, а не строкой. Каждый ряд треугольника размещен на отдельной линии.Длинный ответ:
1-⍨
помещается перед⍳
реплицировать источник индекса 0.0,⍳⍵
с источником индекса 1 повторяет⍳⍵+1
с источником индекса 0.источник
Клен, 46
Использование:
источник
VBA,
16214210280 байтСохранено 22 байта благодаря Тейлор Скотт.
Это старый вопрос, но я нашел более короткое решение для VBA.
Это предназначено для запуска в непосредственном окне. Вход находится в ячейке
A1
активного листа. Выходные данные находятся в активном рабочем листе, начиная сB2
и используя, однако на основе входных данных требуется много ячеек. ПриCOLUMN()>ROW()
проверке верхний правый угол треугольника остается пустым.ROW()=2
Проверка делает первое значение1
, чтобы инициировать треугольник. Я мог бы сдвинуть вывод вниз и отбросить эту проверку, но он вводит много посторонних выводов до фактического треугольника, и я не чувствовал, что это было в духе задачи.Первоначально я опубликовал гораздо более сложный метод, который вычислял каждое значение на основе его строки и столбца. Все, что делает этот метод, это использование внутриклеточных формул. Я начинаю с
B2
того, что могу ссылаться на строку над ним без#REF!
ошибок. Затем он копирует и вставляет одну и ту же формулу в блок ячеек n шириной и n высотой. Вход и выход дляn=25
выглядит следующим образом:источник
Function p(r)
в,Sub p(r)
поскольку у вас нет выходного значения функции, удаление пробелаdebug.? c(n,k);
и преобразование многострочногоif-then-else
оператора в одну строку (If k Then c=c(n-1,k-1)*n/k Else c=1
) приводит к уменьшению подсчета байтов до130
моего значенияFor n=0 To...
может быть сведен кFor n=0To...
переносу моей версии кода вSub p(r):For n=0To r-1:For k=0To n:Debug.?c(n,k);:Next:Debug.?:Next:End Sub
Function c(n,k):If k Then c=1 Else c=c(n-1,k-1)*n/k
[char (10)]End Function
с количеством байтов139
For n=0To[A1-1]:For k=0To n:?c(n,k);:Next:?:Next
Вспомогательная функция:Function c(n,k)
If k Then c=c(n-1,k-1)*n/k Else c=1
End Function
)B2
вместоA1
приемлемого.05AB1E , 14 байтов
Попробуйте онлайн!
источник