(Вызов из многопользовательской игры (столкновение кода) на сайте codingame.com )
Соревнование
Найдите n-й член следующей последовательности: 1, 1, 2, 1, 2, 3, 1, 2, 3, 4...
или, чтобы сделать его более очевидным,{1}, {1,2}, {1,2,3}, {1,2,3,4}...
Последовательность состоит из объединенных диапазонов от 1 до x , начиная с 1, вплоть до бесконечности.
Правила / IO
Ввод и вывод могут быть в любом формате, если они различимы. Ввод может быть взят из любого подходящего источника: STDIN, файла и т. Д.
Ввод может быть 0- или 1-индексирован, а выбранная индексация должна быть упомянута в посте.
Вам нужно будет обработать по крайней мере до результата 255 включительно (то есть максимальный вход с индексом 0 равен 32640). Все, что с этим связано, должно быть обработано, если ваш язык поддерживает это.
Так code-golf
выигрывает самый короткий байт!
Контрольные примеры (индексация на основе 0)
0 -> 1
1 -> 1
5 -> 3
10 -> 1
59 -> 5
100 -> 10
1001 -> 12
59
,100
и т.д.)Ответы:
05AB1E , 5 байтов
Программа 0-проиндексирована, код:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
GNG¹¾¼QiN
итеративный подход, но это было умнее.Haskell ,
2726 байтовПопробуйте онлайн!
Спасибо @DanD. за -1 байт!
Это анонимная функция, создавая бесконечную последовательность ап только возвращая
n
его -ю элемент:[[1..k]| k<-[1..]]
производит бесконечный список список:[[1],[1,2],[1,2,3],[1,2,3,4],...]
. Чтобы объединить их, мы можем написать,[z|k<-[1..],z<-[1..k]]
что приводит к[1,1,2,1,2,3,1,2,3,4,...]
и, наконец,(...!!)
принимает вводn
(бессмысленное обозначение) и возвращаетn
-ое слагаемое (на основе 0).источник
concat
с большим пониманием только экономит 1 байт:([z|k<-[1..],z<-[1..k]]!!)
.JavaScript,
2928 байт-1 байт благодаря Арно!
Использует рекурсивную формулу с 0 индексами, найденную в OEIS.
При вызове с 1 аргументом, как и ожидалось, значение по умолчанию второго
m
,, будетundefined
. Однако-~undefined
возвращает 1, что позволяет намm = 1
переходить рекурсия без явного в списке аргументов (спасибо @Arnauld!)Тестовый фрагмент:
В качестве альтернативы, для одного и того же числа байтов мы можем использовать функцию карри следующим образом:
Вы можете вызвать это с помощью
f(5)()
- она возвращает функцию, которая при вызове возвращает результат, как описано в этом мета-посте .источник
Желе , 5 байтов, 1-индексированный
Попробуйте онлайн!
Объяснение:
источник
Октава, 39 байт
1 основанный индекс
Объяснение:
Рассмотрим эту последовательность:
если мы посчитаем количество элементов подпоследовательностей мы имеем
поэтому, используя формулу Гаусса для треугольного числа, мы можем сформировать формулу для z:
это квадратное уравнение, если мы решим его для п мы имеем
Попробуйте онлайн!
источник
Haskell,
2524 байтаПример использования:
((!!)$[1..]>>= \x->[1..x]) 10
->1
. Попробуйте онлайн! ,Сопоставляет анонимную функцию make-a-list-from-1-to-x
\x->[1..x]
(встроенная длина наenumFromTo 1
один байт) с бесконечным списком[1..]
и объединяет полученные списки в один список.!!
выбирает n-й элемент.Спасибо @flawr за один байт.
источник
(!!)$[1..]>>= \x->[1..x]
. Иногда мне очень\x->[1..x]
<$>
что не входит в объем. Знаете ли вы какой-нибудь онлайн-компилятор / интерпретатор Haskell, который использует новейшую версию? haskell.org разрешает только выражения, и вы не можете создавать ссылки на введенный вами код.Октава , 39 байт
Попробуйте онлайн!
Это использует альтернативный подход.
Например,
n=1
этоA=triu(v'+0*v)
создает матрицуПри удалении всех нулевых элементов и добавлении столбцов
A(A>0)
мы получаем последовательность:Тогда это просто вопрос извлечения
n
-й член этой последовательности.источник
Python ,
3936 байт-3 байта благодаря Денису!
Рекурсивная лямбда, которая использует индексирование на основе 1.
Попробуйте онлайн!
Мы отслеживаем текущий размер "увеличения", используя
m
. Еслиn
оно меньше или равноm
, оно вписывается в текущий «рост», и поэтому мы его возвращаем. Однако, если оно больше чемm
, мыm
убираем его, затем добавляем 1 кm
и рекурсивно вызываем функцию (переходя к следующему повышению).источник
R, 25 байт
Индекс основан на 1.
источник
sequence
ответ, и был счастлив увидеть это.Pyth ,
65 байт1 байт сохранен благодаря @TheBikingviking!
При этом используется индексирование на основе 0.
Попробуйте онлайн!
объяснение
источник
.n
наs
.Mathematica,
2724 байтаСпасибо @MartinEnder за 3 байта!
1-индексироваться. Это выбрасывает ошибки, которые безопасно игнорировать.
объяснение
источник
Join@@
слишком дорого;)((r=Range)@r@#<>1)[[#]]&
StringJoin
не оценивается ... Мне это нравитсябрейнф * ск, 78 байт
Принимает ввод (на основе 0) и выводит как байтовые значения.
Вы можете проверить это здесь.
Ввод требует
\
до десятичных чисел (например,\10
для 10). Если вывод является печатным символом ASCII, вы должны увидеть его. В противном случае, нажмите Просмотр памяти -> Финальный дамп. Значение, которое было напечатано, находится в 3-й ячейке (ячейка № 2).Объяснение:
Ячейка 0 (INPUT): является входом и уменьшается на 1 каждый раз через цикл.
Ячейка 1 (RESET): увеличивается на 1 каждый раз, когда она равна TERM. Для этого каждый раз в цикле мы добавляем 1, а если они не равны, мы вычитаем 1.
Ячейка 2 (TERM): увеличивается на 1 в каждом цикле и устанавливается на 0, если соответствует RESET. Для этого я копирую значение обратно из HOLD только в том случае, если эта ячейка не равна RESET.
Ячейка 3 (EQUAL): используется для проверки того, равны ли RESET и TERM.
Ячейка 4 (HOLD): используется для копирования значений RESET и TERM обратно после проверки на равенство.
источник
Пайк, 6 байт
Попробуй это здесь!
0 индексированные.
источник
R,
4341 байтИзменить: Найден более короткий рекурсивный подход с использованием A002262 + 1 (0 проиндексировано):
Старая версия:
1-индексированная формула от OEIS.
источник
Perl 6 , 21 байт
0 индексированные. Попробуйте онлайн!
Как это работает:
Perl 6 , 21 байт
0 индексированные. Попробуйте онлайн!
Как это работает:
источник
Ни одно из этих решений не является таким же коротким, как у JungHawn Min , но они представляют собой альтернативные подходы, что, я думаю, и есть. Обе функции являются безымянными и берут (1-индексированный) положительный целочисленный ввод и возвращают положительное целое число.
Mathematica, 30 байт
Фактическая математическая формула для этой функции! Сделано более удобным для чтения (в части перевода символов 3 байта
⌈
,√
и⌉
):Ceiling[Sqrt[2 * #] - 1/2]
говорит нам, к какому подсписку относится входной элемент, из которого мы вычитаем один, чтобы сообщить нам, какой подсписок заканчивается, прежде чем мы попадем на вход; затем((#^2 + #) / 2 &)
вычисляет, сколько элементов встречается во всех подсписках до того, который нам нужен, и вычитаем из входных данных#
наш ответ. (Некоторые заметят знакомую формулу(#^2 + #) / 2
для#
треугольного числа;Ceiling[Sqrt[2 * #] - 1/2]
по сути это обратная функция.)Mathematica, 32 байта
Рекурсивное решение, в основном, такое же, как в ответе Билливоба и других.
источник
Brain-Flak , 46 байтов
Ноль индексируется
Попробуйте онлайн!
Чистый стек, 48 байт
Попробуйте онлайн!
объяснение
Это модифицированная версия функции по модулю . Вместо того чтобы использовать постоянное число в качестве делителя, оно увеличивает делитель на каждый раз, когда из него вычитается делитель (один раз за итерацию внешнего цикла).
Аннотированный код
источник
Java 8,
857355 байт0-индексированный рекурсивный подход с формулой, представленной в OEIS :
Попробуй это здесь.
Старый ответ (
8556 байт):Использовали другую 0-индексированную формулу, представленную в OEIS :
Попробуй это здесь.
источник
Perl , 30 байт
29 байт кода +
-p
флаг.Попробуйте онлайн!
источник
MATL, 8 байт
В этом решении используется индексирование на основе 1
Попробуйте это на MATL Online
объяснение
источник
v
после]
QBIC , 21 байт, 1-индексированный
Объяснение:
Чуть более интересный подход, но на 10 байт длиннее:
Эта программа непрерывно вычисляет общее количество чисел в этой скобке и всех предыдущих (
1 at loop 1, 3 at loop 2, 6 at loop 3 ...
). Когда этот счетчик превысит искомый индекс N, верните X из текущей скобки, где X - это N минус предыдущее значение счетчика.источник
Рубин, 30 байтов
Индексирование на основе 1
источник
R, 37 байт
Принимает входные данные
n
и создает последовательность для первыхn
последовательностей. Это делает его несколько неэффективным при более высоких входах, но это должно быть хорошо. Затем возвращаетn
-й элемент, 1-индексированный.Использует небольшой трюк, начиная с последовательности
T
, которая являетсяTRUE
или1
по умолчанию.источник
C11, 48 байтов
Попробуйте онлайн!
Также работает на C ++ и Java.
Альтернатива для того же количества байтов:
источник
мозговой трах, 141 байт
Я знаю, что опаздываю за вознаграждение, но я просто хотел посмотреть, сколько байтов придумал алгоритм, о котором я думал.
Эта программа имеет нулевую индексацию.
Попробуйте онлайн
255
, измените размер ячейки (биты) на 16 или 32 .\5
для ввода5
.\999
Объяснение:
Это показывает программу, разбитую по шагам, показывая, что происходит для ввода
5
.#
размещены в идеальных местах дампа памяти для переводчика.Вы, вероятно, захотите использовать чекбокс Dump Memory на char:
#
если используете эту версию. Это удалит память при ударе#
, позволяя вам увидеть значение на ленте в случае, если это непечатаемый символ, или посмотреть, что происходит на любом шаге, который вы хотите. Ячейка, на которой находится указатель, будет выделена жирным шрифтом.Попробуйте онлайн
#
Заметки:
>
в начале. Требуемое число может варьироваться в зависимости от входного значения, но равно O (1).источник
тинилисп (repl), 90 байт (0-индексированный)
Или неконкурентный (с использованием функции, которая была зафиксирована после публикации этого вызова), 80 байтов :
Первая строка определяет вспомогательную функцию
r
, а вторая строка является неназванной функцией, которая принимаетn
и возвращает n-й член последовательности. Я указал это как представление repl, потому что repl автоматически заполняет скобки в конце каждой строки, а не только в конце программы. С этими предостережениями приведена версия, измененная для работы в онлайн-режиме Попробовать , и вот версия без присмотра, работающая на входах с 0 по 54.объяснение
Я буду использовать неконкурентную версию здесь. Разница лишь в том, что официальная версия должна реализовывать сложение в виде двух вычитаний.
источник
C 54 байта
Не самое короткое C-решение, но оно имеет преимущество работы в постоянном времени (без циклов, только математика). Используется индексация с нуля:
Ungolfed:
Тест с:
источник
C 103 байта
Для начинающего все нормально, я думаю :).
или отформатированный путь
источник
n,c,i,j
глобальные переменные, они гарантированно инициализируются значением 0, что не относится к локальным.n
является входным или n-ным числом в последовательности,c
является счетчикомi
иj
является элементами цикла;j
будет 1, затем 2, затем 3, аi
будет 1, затем 1,2, затем 1,2,3 и так далее. @ Qwerp-Derpпостоянный ток , 21 байт, индексирование на основе 0
Попробуйте программу DC онлайн!
Объяснение:
Вершина стека теперь содержит индекс k наибольшего треугольного числа, которое <= n.
Эта программа постоянного тока может быть преобразована в bash-скрипт конкурентоспособного размера:
Утилиты Bash + Unix, 28 байтов, индексация на основе 0
Попробуйте программу bash онлайн!
источник
C,
8144 байтапрямой итерационный метод, 0 проиндексирован, и с небольшим массажем;
Попробуйте онлайн!
источник