Ваша цель состоит в том, чтобы написать программу, которая принимает входные данные и, когда они объединены воедино N
, выполняет «последовательное умножение». Вы можете спросить, что такое последовательное умножение? Это последовательность с начальным числом, a
определенным следующим образом:
f(0) = a
f(n+1) = f(n)*(f(n)-1)
Итак, давай a = 5
. Таким образом, f(0) = 5
, f(1) = f(0)*(f(0)-1) = 5*4 = 20
и f(2) = f(1)*(f(1)-1) = 20*19 = 380
.
Если ваша программа была ABC
, то ABC
должны брать ввод a
и вывод f(1)
. Программа ABCABC
должна выводить f(2)
и т. Д. Ваша серия программ должна вводить только один раз и выводить только один раз.
Это код-гольф, поэтому выигрывает самая короткая программа в байтах. Стандартные лазейки запрещены.
источник
if
иelse
.CJam, 5 байтов
Попробуйте онлайн!
Как это устроено
источник
pl, 5 байт
Попробуйте онлайн.
Было бы 4 байта, если бы я не был ленивым и не реализовал "назначить на _" ...
объяснение
источник
05AB1E , 3 байта
Код:
Объяснение:
Попробуйте онлайн!
источник
GolfScript, 5 байт
Попробуйте онлайн.
Де-гольф и прокомментировал:
Интерпретатор GolfScript автоматически считывает ввод и помещает его в стек, но не в виде числа, а в виде строки. Таким образом, нам нужно превратить входные данные в число с
~
, а затем снова преобразовать их в строку`
. В конце интерпретатор автоматически распечатает строковый номер в стеке.(Теперь, если бы задача состояла в том, чтобы повторить
f(n+1) = f(n)*(-f(n)-1)
, я мог бы сделать это в 4 байта с~.~*
. Выяснение, как и почему это работает, оставлено в качестве упражнения. :)источник
JavaScript REPL,
2520 байтБудет работать над устранением REPL
источник
Луа,
3518 байтЭто то, что Lua может сделать довольно легко за один раз!
Редактировать: я обнаружил много вещей в Lua, так как я сделал это, поэтому я обновляю это :)
...
содержит распакованный аргумент командной строки, в котором он будет использовать первое значение в этом случае, так как ему не будет позволено тратить деньги, что приведет к простой печатиn*(n-1)
.источник
Y 7 байт
Попробуй это здесь!
Вот как это работает:
j
принимает числовой ввод.z
активирует неявную печать.C
начинается новая ссылка.:
дублирует значение в стеке иt
уменьшает его, оставляя нас с[a a-1]
. Затем мы получаем[a*a-a]
от*
.!
пропускает следующую команду; на EOF это ничего не делает. При объединении он пропускает команду ввода, и процесс начинается снова.источник
Джольф, 6 байт
Попробуй это здесь!
объяснение
источник
𝔼𝕊𝕄𝕚𝕟, 5 символов / 7 байтов
Try it here (Firefox only).
Должен ли я действительно объяснить это? О, хорошо, здесь идет ...
объяснение
Это в основном оценивается
input*=--input;
в JS.источник
Perl, 23 байта
Альтернативная версия, 10 байт
Это требует
-p
переключения. Я не уверен, является ли это честной игрой в вопросе расположения источника .источник
Haskell,
1411 байтовПример использования
Может быть, это не правильная функция. Если вы придирчивы, вы можете использовать с
(*)=<<pred$id
(<-это пробел в конце) для 14 байтов.Редактировать: @Zgarb переписал функцию, используя функцию монады и сохранил 3 байта. Благодарность!
источник
(*)=<<pred$
экономит 3 байта. Кроме того, следует отметить, что это на самом деле не определяет функцию, и входное значение должно быть помещено непосредственно после него.id
делает это правильной функцией. Я поставил записку в своем ответе.Pure Bash (без коммунальных услуг), 40
источник
TI-Basic,
65 байтовРаботает на калькуляторах ТИ-83/84
Эта программа работает из-за того, что выражение в последней строке программы печатается вместо обычного
Done
текста.источник
:Ans²-Ans
Mathcad, 39 "байтов"
С точки зрения пользователя, Mathcad - это фактически двухмерная доска с выражениями, вычисляемыми слева направо и сверху вниз. Mathcad не поддерживает обычный ввод текста, но вместо этого использует комбинацию текста и специальных клавиш / панели инструментов / пунктов меню для вставки выражения, текста, графика или компонента. Например, введите «:», чтобы ввести оператор определения (отображается на экране как «: =»), «[», чтобы ввести индекс массива, или «ctl-]», чтобы ввести оператор цикла while (включая заполнители для контролирующее состояние и одно выражение тела). На изображении выше вы видите именно то, что отображается в пользовательском интерфейсе и как «напечатано» в.
В целях игры в гольф число байтов - это эквивалентное количество операций клавиатуры, необходимых для ввода выражения.
Одна вещь, в которой я еще менее уверен (с точки зрения «байтовой» эквивалентности), - как считать создание новой области (например, a: = 5 или k: = 0..n-1). Я приравнял каждое перемещение к новой области как равное новой строке и, следовательно, 1 байт (на практике я использую мышь, чтобы щелкнуть там, где я хочу область).
Я включил только активные операторы, а не комментарии, и я включил 2 байта каждый для входов a и n, но не сами значения (5 и 7 в примере).
источник
Haskell, 72 байта
Эта задача неприемлема для Haskell. Однако, если ввод выполняется в унарном формате, а код выполняется в GHCI:
Объяснение:
Унарное всегда странно, поэтому первое приложение преобразуется в десятичное.
x*(x-1)
всегда четный, так что в противном случае возвращаетсяx*(x-1)
, гдеx
ввод. Поскольку Haskell строго типизирован и «специальные» символы нельзя назвать похожими&1
, я считаю, что это практически единственный способ завершить это в Haskell, если только не используются глобальные переменные или форма ввода с четным коэффициентом.источник
C ++ (gcc) , 173/176 байт
Обе версии имеют решающий символ новой строки в конце.
Макро версия, 173 байта
Попробуйте онлайн!
Версия шаблона, 176 байт
Несколько больше C ++ ish:
Попробуйте онлайн!
источник
Бурлеск - 5 байтов
источник