Последовательность:
- Мы начинаем с
1
. - Сначала мы добавляем текущее 1-индексированное значение к предыдущему числу в последовательности.
- Затем мы применяем следующие математические операции по порядку, если они применяются к этому текущему значению:
- Делится на
2
? => Дополнение - Делится на
3
? => Вычитание - Делится на
4
? => (Дополнение И) Умножить - Не делится ни на
2
,3
ни4
? -> Продолжить с текущей суммой-результатом
- Делится на
Выход:
Выведите первые 100 чисел в этой последовательности:
1, 1, 21, 25, 30, 216, 223, 223, 2169, 2179, 2190, 2202, 2215, 2215, 2245, 2261, 2295, 2295, 2333, 2353, 2395, 2417, 56649, 56649, 56699, 56725, 1533033, 1533061, 1533090, 45993600, 45993631, 45993631, 1517792001, 1517792035, 1517792070, 1517792106, 1517792143, 1517792143, 1517792221, 1517792261, 1517792343, 1517792343, 1517792429, 1517792473, 1517792563, 1517792609, 71336257041, 71336257041, 71336257139, 71336257189, 3638149121841, 3638149121893, 3638149121946, 196460052588000, 196460052588055, 196460052588055, 11198222997525633, 11198222997525691, 11198222997525750, 11198222997525810, 11198222997525871, 11198222997525871, 11198222997525997, 11198222997526061, 11198222997526191, 11198222997526191, 11198222997526325, 11198222997526393, 11198222997526531, 11198222997526601, 795073832824398753, 795073832824398753, 795073832824398899, 795073832824398973, 59630537461829934225, 59630537461829934301, 59630537461829934378, 4651181922022734887568, 4651181922022734887647, 4651181922022734887647, 376745735683841525912529, 376745735683841525912611, 376745735683841525912694, 376745735683841525912778, 376745735683841525912863, 376745735683841525912863, 376745735683841525913037, 376745735683841525913125, 376745735683841525913303, 376745735683841525913303, 376745735683841525913485, 376745735683841525913577, 376745735683841525913763, 376745735683841525913857, 35790844889964944961834465, 35790844889964944961834465, 35790844889964944961834659, 35790844889964944961834757, 3543293644106529551221660545, 3543293644106529551221660645
Вот первые 10 чисел в последовательности с объяснением:
// Starting number of the sequence:
1
// 1 (previous number in the sequence)
// + 2 (current index in 1-indexed sequence)
// = 3 -> 3 - 2 (3 is divisible by 3, so we subtract the current index 2)
// = 1
1
// 1 (previous number in the sequence)
// + 3 (current index in 1-indexed sequence)
// = 4 -> 4 + 3 (4 is divisible by 2, so we first add the current index 3)
// = 7 -> 7 * 3 (and 4 is also divisible by 4, so we then also multiply the current index 3)
// = 21
21
// 21 (previous number in the sequence)
// + 4 (current index in 1-indexed sequence)
// = 25 (25 is not divisible by 2, 3 nor 4)
25
// 25 (previous number in the sequence)
// + 5 (current index in 1-indexed sequence)
// = 30 -> 30 + 5 (30 is divisible by 2, so we first add the current index 5)
// = 35 -> 35 - 5 (and 30 is also divisible by 3, so we then also subtract the current index 5)
// = 30
30
// 30 (previous number in the sequence)
// + 6 (current index in 1-indexed sequence)
// = 36 -> 36 + 6 (36 is divisible by 2, so we first add the current index 6)
// = 42 -> 42 - 6 (and 36 is also divisible by 3, so we then also subtract the current index 6)
// = 36 -> 36 * 6 (and 36 is also divisible by 4, so we then also multiply the current index 6)
// = 216
216
// 216 (previous number in the sequence)
// + 7 (current index in 1-indexed sequence)
// = 223 (223 is not divisible by 2, 3 nor 4)
223
// 223 (previous number in the sequence)
// + 8 (current index in 1-indexed sequence)
// = 231 -> 231 - 8 (231 is divisible by 3, so we subtract the current index 8)
// = 223
223
// 223 (previous number in the sequence)
// + 9 (current index in 1-indexed sequence)
// = 232 -> 232 + 9 (232 is divisible by 2, so we first add the current index 9)
// = 241 -> 241 * 9 (and 232 is also divisible by 4, so we then also multiply the current index 9)
// = 2169
2169
// 2169 (previous number in the sequence)
// + 10 (current index in 1-indexed sequence)
// 2179 (2179 is not divisible by 2, 3 nor 4)
2179
Правила вызова:
- Если ваш язык не поддерживает ничего больше, чем 2 31 -1, вы можете продолжить последовательность до этого максимума (поэтому первые 46 чисел, вплоть до - и включая -
1,517,792,609
). - Выходной формат гибкий. Вы можете вернуть массив или список, строку, разделенную пробелами, запятыми и т. Д. Ваш вызов.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с соответствующими параметрами, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
code-golf
sequence
number-theory
division
Кевин Круйссен
источник
источник
Ответы:
05AB1E ,
2423 байта-1 байт благодаря Кевину Круйссену
Попробуйте онлайн!
Объяснение:
источник
UX
удалить ее, но я не могу. Я получаю 24 байта, потому что он начинается0
вместо1
. Я теперь увеличил это раньше, но тогда мы должны сделать циклическое101
время вместо100
... Ну, хорошо.UX
это бельмо на глазу. Я пытался избавиться от него на некоторое время , и в конечном итоге с кучей 24 и 25 вариаций:1тF=NÌ©+DÑ3L>Ãv®…-*+yè.V
,1тL>v=y+©3F®NÌÖiy…+-*Nè.V
... Я не считал , используя переменный счетчик, это интересно.тF
вместоƵ0µ
. Я редактировал это, спасибо! (PS: там должно быть действительно один байт¼¾
...)¼¾
был бы хорош, хотя, если честно, я почти никогда не использую его таким образом. Однобайтовая встроенная функция, которую я предпочел бы больше всего сейчас, - это вторая©®
переменная, которая не появляется. Возможно, начиная с пустой строки,""
как вы уже упоминали в другой задаче.Р,
858279767270 байтungolfed:
Спасибо @rturnbull за то, что он указал, что я могу использовать
(!z%%3)
вместо(z%%3<1)
проверки модули, и что определениеz
случается при его первом использовании.Отбросил 3–4 символа, используя неправильное векторное расширение: ответ изначально начался,
s=1:56...
но нам не нужно этого делать, длинаs
будет увеличена по мере необходимости.Сохранено еще 3 байта путем замены последнего условия вызовом
"if"
функции (да, это правильная функция в R!)Сохранено еще 4 байта путем замены
s
наT
, который является встроенным, равнымTRUE
которому также равен1
. Я понял это одновременно с @rturnbull (честно!)Это приводит к некоторым численным проблемам, когда мы превышаем 2 ^ 52, но я ничего не могу с этим поделать - R может использовать
double
типы только для чисел, больших чем2^31-1
, но они точно хранят целые числа до 2 ^ 52. Таким образом, мне разрешено выводить только первые 56 членов (последний термин, который является «правильным»), который сохраняет один байт в случае длины 100.Вот вывод из 56-длины версии:
источник
1,517,792,609
). », Но это из Курс также распространяется на номера, отличные от 32-битных. Если R не может справиться с чем-то большим, чем первые 56 чисел, то все в порядке. И да, если вы знаете , что никогда не может пойти выше 56, вы можете изменить ,100
чтобы56
сохранить байт.z%%2<1
(и так далее) на!z%%2
злоупотребление неявным преобразованием типов.!
что не побил%%
, но, видимо, это так!T
использовать и использовать это вместоs
, позволяя удалитьs=1;
, сохранив еще четыре байта. Можно сложить определениеz
в определениеs[i]
(ну,T[i]
сейчас), например, такT[i]=((z=i+T[i-1])+ ...
, что означает, что вы можете потерять фигурные скобки, сохранив еще несколько байтов. РЕДАКТИРОВАТЬ: О, я вижу, что вы сделалиT
трюк, когда я писал свой комментарий! Великие умы думают одинаково, говорят они.Питон 3,
8278767472 байтаВыход:
Предложения приветствуются!
источник
while
цикл и измените порядок арифметики на -2 .05AB1E ,
343130 байтПопробуйте онлайн!
объяснение
источник
Python 2, 76 байт
Довольно стандартная реализация, я думаю, что использование оператора exec вместо цикла while позволило сэкономить 2 байта или около того. Рекурсивный метод может быть короче, я думаю, скоро появится xnor;)
Если бы я использовал обновления, которые выяснил TheNumberOne, я был бы на 69 байтах (но тогда я бы копировал)
Выход:
источник
JavaScript,
7563 байтаДругая версия:
Оба ограничиваются индексом 57 (с индексами 0), потому что тогда выходной сигнал превосходит размер безопасного числа JavaScript (2 53 - 1). Оказывается, цикл намного короче, чем рекурсивная функция, даже с ES6:
Этот возвращает массив первых 57 элементов.
источник
map
версию для полноты, и она тоже показала 75 байтов.Brain-Flak
476 466 462 456446 байтСохранено 6 байт благодаря Wheat Wizard
Попробуйте онлайн!
Это действительно медленно. TIO не может обрабатывать целые 100 чисел (кажется, что предел 22 или 23). Итак, этот пример генерирует только первые 20, но код будет работать и для 100.
Краткое объяснение:
источник
({}<>[({})]<>)(<()>)
можно заменить на(<({}<>[({})]<>)>)
Java 7, 316 байт
Ungolfed & тестовый код:
Попробуй это здесь.
Выход:
источник
C #, 120 байт
Так же, как ни один здравомыслящий человек не будет играть в гольф на Яве, ни один здравомыслящий человек не должен играть в гольф на C #! Но винт, я хотел посмотреть, что я могу сделать. В
1M
слепкиf
быть десятичным , который имеет достаточную точность для этого ответа без меня того , чтобы писатьdecimal
. Кроме того, увеличение на месте экономит несколько байтов в моем ответе на Python. в конце концов, это еще на 50 байтов больше.Вот более читаемая (и запускаемая) версия:
источник
while
for
for(int n=1;n<101;)
void k(){for(decimal f=1,d,n=1;n<101;)Console.WriteLine(f=((d=++n+f)+n*((d%2<1?1:0)-(d%3<1?1:0)))*(d%4<1?n:1));}
Пакет, 110 байт
Использует формулу @ETHproductions, но немного подправлен, потому что пакетный не имеет
?:
. Пакет использует 32-битные целые числа со знаком, поэтому цикл останавливается на 46.источник
Perl, 75 байт
Код выводит каждое значение в новой строке и вычисляет все 100 значений.
источник
-Mbigint
, нет круглых скобок1..100
, и!($a%2)*$_
вместо($a%2?0:$_)
(то же самое дляa%3..
) следует сохранить несколько байтов;)Haskell,
7064 байтаscanl1(#)[1..100]
возвращает список с первыми 100 элементами. На один байт меньше, если я могу оставаться в диапазоне 2 ^ 31 (->[1..46]
).scanl1
Это как,foldl1
но собирает промежуточные результаты в списке. Тесты делимости выполняются через вспомогательную функцию,%
которая возвращает,0^0 = 1
если делится, а0^x = 0
если нет.источник
J, 46 байт
Применяется метод, описанный в задании.
использование
Дополнительная команда
(,.~#\)
используется для добавления индексов к каждому значению.источник
Perl 6 , 62 байта
Попробуйте онлайн!
ДЕЙСТВИТЕЛЬНО пришлось поработать, чтобы мой счетчик байтов был ниже, чем у других не-гольф-решений.
источник