Почти все здесь знакомы с Треугольником Паскаля. Он образован последовательными строками, где каждый элемент является суммой двух его верхних левых и верхних правых соседей. Вот первые 5
строки (заимствованные из треугольника Generate Pascal ):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Свернуть эти строки влево
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Сортировать их по возрастанию
1
1 1
1 1 2
1 1 3 3
1 1 4 4 6
. . .
Читать этот треугольник по строкам
[1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 4, 6 ...]
Учитывая вход n
, выведите n
число в этой серии. Это OEIS 107430 .
правила
- Вы можете выбрать индексацию на основе 0 или 1. Пожалуйста, укажите, что в вашем представлении.
- Можно предположить, что ввод и вывод соответствуют целочисленному типу вашего языка.
- Вход и выход могут быть заданы любым удобным способом .
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
code-golf
sequence
number-theory
AdmBorkBork
источник
источник
Ответы:
JavaScript (ES6), 79 байт
0 индексированные.
демонстрация
Показать фрагмент кода
Как?
Этот алгоритм напрямую генерирует отсортированные строки треугольника Паскаля. Он обновляет n в соответствии с длиной предыдущей строки, пока не существует a [n] . Например, для n = 19 требуется 6 итераций :
источник
Октава , 46 байт
1 на основе.
Попробуйте онлайн!
объяснение
Рассмотрим
n=4
в качестве примера.pascal(n)
дает матрицу Паскаля:Строки треугольника Паскаля являются антидиагоналами этой матрицы. Так что это перевернуто по вертикали, используя
flip(···)
который превращает антидиагоналы в диагонали.
spdiags(···)
извлекает (ненулевые) диагонали, начиная с нижнего левого угла, и размещает их в виде столбцов с нулевым отступом:M=sort(···)
сортирует каждый столбец этой матрицы и присваивает результат переменнойM
:Логическое индексирование
(···)(~~M)
теперь используется для извлечения ненулевых элементов этой матрицы в главном порядке столбцов (вниз, затем поперек). Результатом является вектор столбца:Наконец,
n
-я запись этого вектора извлекается с использованием(···)(n)
, которое в этом случае дает1
.источник
Python 2 ,
867872 байта-8 байт благодаря штанге
Попробуйте онлайн!
Ungolfed
Попробуйте онлайн!
Функция рекурсивно вычисляет строку треугольника Паскаля. Учитывая текущую строку , как
row
,map(sum, zip([0] + row, row + [0]))
.При каждом вызове
n
сокращается длина текущего ряда. Если функция попадает в правуюnth
строку, должен быть возвращен наименьший номер строки.Поскольку первая половина строки находится в порядке возрастания, а каждая строка является симметричной, число находится в индексе
n/2
(0-индексированное, целочисленное деление).источник
Wolfram Language (Mathematica) , 55 байтов
Индексирование основано на 1.
Попробуйте онлайн!
объяснение
Это, вероятно, игра в гольф, я не очень опытный пользователь Mathematica.
Для каждого n ∈ [0, Input] ∩ ℤ сгенерируйте таблицу биномов с каждым k ∈ [0, n] ∩ ℤ .
Сортировать каждый. Использует сокращение к
Map[function,object]
-function/@object
.Выровняйте результирующий список и извлеките элемент, индекс которого в списке является входным.
источник
APL (Dyalog) ,
2625 байтов1 байт сохранен благодаря @ngn
Попробуйте онлайн!
источник
{⍵[⍋⍵]}
->(⍋⊃¨⊂)
R , 58 байт
Попробуйте онлайн!
Вычисляет
n choose k
каждый элементn,k
в[0,1,...,n]
виде матрицы, сортирует строки по возрастанию (*), удаляет нули и затем выбираетn
элемент th.(*) Это также преобразует их в столбцы, но это лучше, поскольку R хранит матрицу как вектор по столбцам, что позволяет нам индексировать ее непосредственно при сохранении порядка.
источник
Haskell ,
143132125123 байтаПервая строка - это функция без точек, которая берет индекс (на основе 0) и возвращает соответствующее число в последовательности. Попробуйте онлайн!
Это моя первая в истории программа на Haskell! Я уверен, что это может стать намного короче. Советы приветствуются.
Сохранено 2 байта благодаря nimi
Ungolfed
источник
i
в функцииs
, которая была переименована!
, я думаю. Если вы используете функцию инфиксных вы можете уронить()
вокругreverse b
:s(a,b)=reverse b!a
.JavaScript, 57 байт
0 индексированные.
Как это происходит:
Шаг 0:
Этот код легко понять:
c
вычисления комбинации использует формулу: C (n, k) = C (n-1, k) + C (n-1, k-1); или 1, если k == 0 или k == nf
пытается выяснить номер строки и индекс в строке, а затем вызвать функцию c для получения результата.Шаг 1:
На этом этапе, мы пытаемся изменить вызов функции
c
к ,c(i,r)
что делает ее такой же , как параметрf
.Шаг 2:
Мы проверяем
i<r
, используется ли функцияf
или функцияc
. Вот почему мы держим мускусi<r
во время рекурсии функцииc
.Шаг 3:
На этом этапе мы объединяем эти две функции в одну.
После некоторого большего количества гольфа мы наконец получили ответ, описанный выше.
Показать фрагмент кода
источник
Желе , 13 байт
Попробуйте онлайн!
Используя алгоритм Уриэля Дьялога.
1-индексироваться.
Объяснение:
источник
þ
здесь делает.JavaScript (Node.js) , 65 байт
Даже массив не используется. 0 индексированные.
Попробуйте онлайн!
Объяснение:
источник
Паскаль , 373 байта
g
это функция.Попробуйте онлайн!
источник
n=1 then
может бытьn=1then
.if(k=0)then
может статьif k=0then
.word
вместоinteger
.Java 8, 187 байт
Объяснение:
Попробуйте онлайн.
источник
MATL , 11 байт
1 на основе.
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Рассмотрим ввод
4
в качестве примера.;
является разделителем строк для матриц или векторов столбцов.источник
Пакетная, 128 байтов
0 индексированные.
источник
r
и столбец%1-(s-2)
из%1
й серии. Затем четвертая строка использует это для вычисления биномиального коэффициента(n k) = n!/(n-k)!k!
=n(n-1)...(n+1-k)/(1)(2)...k
=(n/1)((n-1)/2)...((n+1-k)/k)
. Где MathJax, когда мне это нужно?APL (Dyalog Classic) , 17 байтов
Попробуйте онлайн!
Индексирование на основе 0
обратите внимание, что
(49!98) > 2*53
, т. е. биномиальный коэффициент 98 над 49 больше, чем 2 53 , поэтому в этот момент Dyalog уже начал терять точность из-за IEEE с плавающей запятойисточник
05AB1E , 10 байтов
0 индексированные
Попробуйте онлайн!
объяснение
источник
Желе , 11 байт
Попробуйте онлайн!
Монадическая ссылка, берущая индекс и возвращающая целое число - использует индексирование на основе 1.
Как?
Выполняет задачу почти так же, как написано, с большей частью правого треугольника Паскаля (нулей), который затем выбрасывается ...
источник
Красный , 206 байт
1 на основе
Попробуйте онлайн!
Объяснение:
источник
Perl, 48 байт
Включает
+1
в себя дляp
Использует индексирование базы 0.
источник
J,
4641 байт0 индексированные
Попробуйте онлайн!
Заметки:
<.2&!@,:^:_1
дает соответствующий номер строки треугольника Паскаля, округляя до обратногоy choose 2
./:~@(i.!<:)@]
вычисляет строку и сортирует ее[-2!]
дает индекс в строке.источник
Юлия , 70 байт
1 на основе
Объяснение:
сначала найти номер строки, затем номер столбца, а затем вычислить бином
источник
Желе , 17 байт
Попробуйте онлайн!
источник
Pyth, 15 байт
0 индексированные
Попытайся
объяснение
источник
Чисто , 80 байт
Попробуйте онлайн!
Как лямбда-функция.
источник
Рубин , 56 байт
0 на основе
Сначала получите строку и столбец в треугольнике, затем рассчитайте биномиальный коэффициент, соответствующий этой позиции.
Попробуйте онлайн!
источник
На самом деле 8 байтов
В значительной степени основано на ответе желе Джонатана Аллана . Использует 0-индексацию.
Попробуйте онлайн!
Ungolfing
источник
n
- й в серии. Это производит массив.Кокос , 69 байт
Попробуйте онлайн!
источник
Пари / ГП , 47 байт
Попробуйте онлайн!
источник
C (gcc) ,
140123 байтаПопробуйте онлайн!
источник