Это проблема из NCPC 2005 . У Роя есть квартира только с одной электрической розеткой, но у него есть несколько разветвителей. Подсчитайте максимальное количество розеток, которое он может иметь, используя удлинители, которые он имеет. Количество розеток на удлинитель указано в качестве входных данных.
Получается, что если количество выходов полос соответственно
тогда количество розеток равно ,
или
.
Входные данные для программы или функции представляют собой непустую последовательность натуральных чисел.
Примеры
2 3 4
> 7
2 4 6
> 10
1 1 1 1 1 1 1 1
> 1
100 1000 10000
> 11098
code-golf
number
arithmetic
Пол Г.Д.
источник
источник
Ответы:
Желе, 3 байта
Уменьшение (все), сумма, приращение. Попробуй это здесь.
источник
Сетчатка , 3 байта
Конечный перевод строки является значительным.
Ввод - это разделенный пробелами список унарных чисел .
Попробуйте онлайн!
объяснение
Код просто удаляет все пробелы, а также
1
после них из строки. Вот почему это работает:Добавление в унарном простое: просто объединить числа, что аналогично удалению разделителей. Уменьшение на 1 также просто: просто удалите a
1
из каждого числа. Мы хотим на 1 больше, чем сумма уменьшенных входных данных, поэтому мы просто удаляем только те1
s, которые мы находим после пробелов, тем самым уменьшая все, кроме первого ввода.источник
Гексагония ,
1814 байтовРазвернутая:
Попробуйте онлайн!
Я не думаю, что длина стороны 2 возможна, но
должнобыть более эффективное решение с длиной стороны 3, чем это.Это обычный подход «уменьшить все, сумма, приращение», но мне придется добавить диаграммы позже, чтобы показать, как именно это работает в гексагонии.
источник
Python, 24 байта
Попробуйте онлайн
источник
Mathematica, 9 байт
источник
Haskell,
1715 байтПример использования:
( foldl1$(+).pred ) [2,4,6]
->10
.Старая версия, другой подход, 17 байт:
succ.sum.map pred
.источник
J, 6 байт
Сумма плюс один минус длина. Сложите в скобки и примените это так:
источник
Лабиринт , 9 байт
Попробуйте онлайн!
Обычный праймер:
Здесь мы начинаем в левом верхнем углу
"
, без операции, направляясь вправо. Следующее?
, что читает int из STDIN (отбрасывая символы, которые не могут быть проанализированы как целое число, например, пробелы). Теперь у нас есть два случая:Если вход положительный, мы поворачиваем направо, выполняя:
Если ввод равен нулю (что происходит в EOF), мы идем прямо, выполняя:
источник
Pyth, 5 байт
приращение (сумма (карта (уменьшение, ввод)))
источник
ES6, 25 байт
источник
l=>l.reduce((a,b)=>a+b-1)
.(,b)
это дорого, но мне тоже нравится эта версия.MATL, 3 байта
Попробуйте онлайн.
объяснение
источник
05AB1E , 4 байта
Код:
Объяснение:
Принимает ввод как массив (например
[3, 4, 5]
).источник
Звездный ,
2624 байтаОжидает разделенные новой строкой целые числа. Попробуйте онлайн!
Спасибо @ MartinBüttner за -2 байта.
Цикл развернут, так что первое число не уменьшается, что исключает необходимость увеличения. Нажатие номера дорого в Звездном ...
источник
Утилиты Bash + GNU, 16
Если есть
N
удлинители, тоN-1
в списке ввода, разделенном запятыми, должны быть разделители. Все, что нам нужно сделать, это заменить разделители- 1 +
и арифметически оценить:Или используя тот же трюк:
Pure Bash (без внешних утилит), 19
источник
APL (NARS 2000),
1310 байт{1+(+/⍵)-⍴∊⍵}
Изменить: до 10 с подходом Линн (лучше).
{1++/1-⍨⍵}
источник
gs2, 5 байтов
(CP437-кодированию.)
Это
read-nums dec m1 sum inc
.источник
CJam, 7 байтов
Проверьте это здесь.
Тот же подход, что и у Линн (уменьшить все, сумма, увеличить). Это также работает для 8 байтов (и, возможно, немного интереснее):
Это сворачивает «уменьшить, добавить» по списку. Делая это, декремент применяется только ко всем элементам, кроме первого, так что нам не нужно заботиться о приращении отдельно.
источник
C
605955 байтовисточник
Perl 6, 14 байт
использование
источник
{.sum-$_+1}
Серьезно, 7 байтов
Попробуйте онлайн!
Объяснение:
источник
Perl 6 , 20 байт
(Вы можете использовать
<<
вместо«
)Использование:
источник
@arraya »+« @arrayb
++«@array
@array».method
@array»++
« a 'space separated' list of words »
Некоторые из них называются мета-операторами, так как они объединяются с другими операторами. (Perl 5 не имеет этих операторов в настоящее время.)Perl 5 23 + 2 = 25 или 19 + 2 = 21
Требуются
-ap
флаги:Сохраняется в файл и запускается как
РЕДАКТИРОВАТЬ: Другой ответ, меньше (19 + 2), но в основном скопированы из ответа dev-null:
источник
F #, 25 байт
Это функция, которая принимает массив / список / последовательность целых чисел и возвращает требуемый результат.
Как это работает:
Seq.fold
позволяет применять функцию к каждому элементу последовательности, сохраняя при этом некоторое состояние. Результат функции применительно к первому элементу даст состояние, которое будет помещено в функцию для второго элемента, и так далее. Например, чтобы подвести итог списка[1; 3; 4; 10]
, вы должны написать это так:Который будет применяться так:
С последним состоянием является возвращаемое значение
Seq.fold
.источник
𝔼𝕊𝕄𝕚𝕟, 5 символов / 7 байтов
Try it here (Firefox only).
Использует пользовательскую кодировку с 10-битными символами (thx @Dennis!). Запустите
encode('ï⒭+‡_')
в консоли JS, чтобы получить закодированную форму, иdecode(/*ENCODED TEXT HERE*/)
декодировать закодированную форму.объяснение
Переводит на Javascript ES6 как:
источник
Морнингтон Полумесяц ,
1909 18731839 байтовПопробуйте онлайн!
источник
Python 3, 79 байт
источник
Рубин, 30 байтов
Достаточно просто - начиная с 1, сложите предоставленные числа, каждое -1 (аргументы командной строки в
$*
). Стыдinject
это такое длинное слово.источник
PowerShell, 19 байт
Обратите внимание, что
1 + p1-1 + p2-1 + ... + pn-1
эквивалентноp1-1 + p2-1 + ... + pn
.Принимает ввод как отдельные аргументы командной строки с
$args
. Мы-join
вместе с-1+
разделителем для создания строки, такие как2-1+3-1+4
. Затем строка передается по каналуInvoke-Expression
(аналогичноeval
) и выводит результат.источник
Perl, 21 + 2 = 23 байта
Требуется
-a
и-E
:источник
-a
флаг, чтобы получить@F
переменную с уже разделенными элементами, и заменить -n на -p, чтобы вам это не понадобилосьsay
, уменьшив его до 21 + 2:$a+=$_-1for@F;$_=++$a
-p
вместо тогоsay
же, потому что мне нужно использовать в$_=
любом случае.-a
хорошая идея!Brainfuck, 15 байтов
Предположение: оператор, возвращает 0, когда все входные данные исчерпаны, и нет удлинителей с 0 штекерами. Кроме того, IO должен быть в байтовых значениях вместо кодов символов ASCII.
Пояснение: при этом используются 2 регистра. Регистр накопителя «Значение», представляющий количество устройств, которые можно подключить, и регистр «текущего шнура», который отслеживает значение текущего шнура. Он начинается с увеличения значения на 1 для существующего выхода. Затем для каждого удлинителя он вычитает единицу из значения, так как вилка берется, а затем увеличивает значение на количество вилок.
Большинство онлайн-переводчиков не работают в режиме ввода необработанных байтов. Чтобы проверить это онлайн, используйте этот код:
источник