Почти эквивалентно первому вопросу проекта Эйлера:
Если мы перечислим все натуральные числа ниже 10, кратные 3 или 5, мы получим 3, 5, 6 и 9. Сумма этих кратных равна 23.
Найти сумму всех кратных 3 или 5 ниже 1000.
Вызов:
Учитывая положительное целое число N
и набор по крайней мере одного положительного целого числа A
, выведите сумму всех положительных целых чисел, меньшую, чем N
кратные по крайней мере одного члена A
.
Например, для случая Project Euler вход будет:
1000
3
5
Тестовые случаи:
Input : 50, [2]
Output: 600
Input : 10, [3, 5]
Output: 23
Input : 28, [4, 2]
Output: 182
Input : 19, [7, 5]
Output: 51
Input : 50, [2, 3, 5]
Output: 857
Ответы:
Желе , 6 байт
Попробуйте онлайн!
Как это работает
источник
Python,
5955 байтrepl.it
Безымянная функция принимает целое число
n
и список целых чиселl
. Обходит диапазон натуральных чисел (плюс ноль) до, но не включая,n
и сумм (sum(...)
) тех, которые имеют остаток после деления на ноль (v%m<1
) дляany
целых чиселm
в спискеl
. Использует умножение, а не условное, чтобы сохранить 3 байта.источник
Октава,
383633 байтаВозьмите вход как:
f(10, [3;5])
. Это будет на 2 байта короче, если вводf(9,[3;5])
для одного и того же контрольного примера.Проверьте все контрольные примеры здесь.
Объяснение:
Октава может предварительно уменьшать, поэтому
1:--x
вместо1:x-1
(два раза) сохраняет два байта.mod(a,b)
дает1 2 0 1 2 0 1 2 0
заmod(1:9,3)
. Если второй аргумент является вертикальным вектором, он будет реплицировать первый вход по вертикали и принимать модуль для каждого из значений во втором входном аргументе. Итак, для вводаmod(1:9, [3;5])
это дает:Принятие
~all(_,1)
этого даетtrue
для столбцов, где по крайней мере одно значение равно нулю, иfalse
где все значения отличны от нуля:,1
Требуется в случае , если имеется только один номер вy
. В противном случае он будет действовать на весь вектор, а не на число за номером.Транспонирование этого в вертикальную матрицу и использование умножения матриц даст нам правильный ответ без необходимости явного суммирования:
источник
JavaScript (ES6),
403936 байтВвод: целое число
n
и массив целых чиселa
с синтаксисом карри(n)(a)
Контрольные примеры
Показать фрагмент кода
источник
f=(n,a)=>n--&&a.some(v=>n%v<1)*n+f(n,a)
. Лучшее, что я мог сделать нерекурсивно - 61 байт.MATL , 9 байт
Попробуйте онлайн!
источник
1 2 ...
. Вы дублируете его и берете модуль другого входа. Вы отрицаете это и умножаете на вектор1 2 ..
, используете уникальные, чтобы избавиться от дубликатов и, наконец, суммировать ...Сетчатка , 34 байта
Число байтов предполагает кодировку ISO 8859-1.
Формат ввода
Попробуйте онлайн!
источник
Python, 67 байт
После написания этого я заметил, что мой код был похож на существующий ответ на Python, однако я придумал его независимо и в любом случае публикую его.
источник
x=y=0
на отдельной строке сэкономит четыре байта.Mathematica,
3727 байтСпасибо Мартину Эндеру за проницательное наблюдение, которое привело к большой экономии байтов!
Безымянная функция, принимающая два аргумента, список
#
целых чисел (требуемые делителиA
) и целое число#2
(верхняя границаN
) и возвращающая целое число.Range[#,#2-1,#]
дает для каждого элементаd
списка#
все кратные числа,d
меньшие или равные#-1
(следовательно, меньшие#
); объединение этих списков затем вычисляется и суммируетсяTr
.Предыдущая версия:
источник
Range
в списке:Tr[Union@@Range[#2,#-1,#2]]&
(а затем сохранить еще один байт, меняя порядок входов)Perl 6 , 25 байт
Лямбда, которая принимает входные числа в качестве аргументов. (Один аргумент для N и произвольное количество аргументов для A).
( Попробуйте онлайн. )
Объяснение:
{ ... }
Лямбда$^a
: Первый аргумент лямбды@_
: Остальные аргументы лямбды («переменный параметр»).^$^a
: Диапазон от0
до$^a - 1
.* %% @_.any
: Другая лямбда, которая проверяет свой аргумент,*
используя оператор делимого на-%%
противany
- Junction из списка@_
.grep PREDICATE, RANGE
: перебирает диапазон чисел и возвращает те, для которых предикат истинен.источник
^
для объявления параметра-заполнителя является довольно явным. Тем более, что вы можете использовать его позже в блоке как раз$a
. Я думаю, что только$_
@_
%_
self
когда-либо можно считать неявно объявленным. Я думаю, что в этой строке будет@_
и%_
в случае функций ничем не отличаются в этом отношении: они тоже становятся частью подписи, только если они появляются в теле. Только$_
(иself
и%_
в методах) может стать частью подписи по умолчанию.R, 67 байт
Принимает вектор для STDIN в следующем формате:
[N, a_1, a_2, ...]
. Поддерживает любое количествоa
. Для каждогоa
, создает последовательность ,a
чтобыN-1
с размер шагаa
. Затем берется сумма всех уникальных записей в этом векторе.источник
Haskell,
4239 байтИспользование:
Спасибо @Zgarb за 3 байта
источник
(x`mod`)
так же, какmod x
.05AB1E , 9 байтов
Попробуйте онлайн!
источник
à
(максимум) сейчас появляется в списке, но не раньше.)Октава,
4937 байтфункция будет называться
f([2 3 4],50)
Предположим, что
A=[2 3 4];
мы требуем, чтобы сумма чисел какмы можем умножить
[2 3 4]
на,1:50
чтобы получить матрицу(1:N)'.*A
затем извлеките из матрицы те, которые меньше 50:
z(z<N)
Поскольку в матрице есть повторяющиеся элементы, мы извлекаем уникальные значения и суммируем их.
предыдущий ответ : (это решение потерпит неудачу, если N == 1)
функция должна называться
f(unit64([2 3 4]),uint64(50))
источник
Pyth, 10 байт
объяснение
источник
T-SQL, 87 байт
Это будет работать до тех пор, пока
@i
имеет значение 2048 или нижеПопробуйте это
источник
APL (Dyalog Unicode) , 12 байт
Попробуйте онлайн!
Анонимная молчаливая функция. Спасибо @ Adám за помощь, чтобы избавиться от этого на 3 байта. Использует
⎕IO←0
.Как:
источник
Пип ,
43 41 3935 байтПопробуйте онлайн!
Объяснение:
источник
Python 2, 80 байт
Это очень долго. Определенно можно сократить. Принятие 3-х чисел в качестве отдельных входов определенно повредит счету.
источник
x,y,z=input()
и дать вклад в виде(1000,3,5)
.Common Lisp, 77
Ungolfed
источник
PowerShell , 57 байт
Попробуйте онлайн!
Итеративное решение. Принимает ввод в виде числа
$a
и в виде литерального массива$b
. Цикл1
до одного ниже$a
(через--$a
), используяWhere-Object
оператор|?{...}
с предложением для выбора определенных чисел.Предложение устанавливает
$i
текущий номер перед отправкой входного массива$b
в другой|?{...}
, здесь выбираются те элементы, в которых текущий номер равномерно разделен по крайней мере на одно из чисел в$b
. Те элементы,$b
которые делятся равномерно, остаются на конвейере.Таким образом, если существует, по крайней мере , один элемент из
$b
, трубопровод содержит элемент, так что внешняяWhere
является$true
и текущий номер остается на трубопроводе. В противном случае, если нет элементов из$b
конвейера, внешнийWhere
является внешним$false
, поэтому текущий номер не помещается в конвейер.Все эти числа собраны в парены, помечены
-join
вместе со+
знаками и переданы по трубопроводу|iex
(сокращенноInvoke-Expression
и аналогичноeval
). Результат суммирования остается на конвейере, а вывод неявным.источник
PHP,
787674 байтаВнешний цикл запускается
$i
от 1 до первого аргумента ниже и добавляет$i
значение$s
if, если$f
оно не установлено.В умножает внутренний цикл
$f
с ( по$i
модулю аргумента) для всех последующих аргументов, полагая ,$f
чтобы ,0
если$i
это кратно любой из них.Беги с
-r
.источник
Скала, 47 байт
n является списком, который содержит первый аргумент
N
, остальные являются элементамиA
Работает, отфильтровывая числа, где не существует хотя бы одного A, для которого i кратно, затем суммируя. Строго говоря, мы должны использовать
n.tail.exists
внутри замыкания, но так как i всегда меньше N и, следовательно, никогда не кратно N, решение по-прежнему завершено без этого.источник
Java 8, 75 байт
Подпись метода для этого
int f(int N, List<Integer> A)
источник
Рубин,
52 4846 байтисточник
C11, 177 байт
Требуется этот набор заголовков в той же папке, и
fnv-hash
библиотека, найденная там же. Компилировать какgcc 1.c ../fnv-hash/libfnv.a -o 1 -DNODEBUG
Тестовая программа:
выходы
источник
Japt
-x
,976 байтПопытайся
источник
Whispers v2 , 178 байт
Попробуйте онлайн!
Структура дерева:
Как это работает
Очень просто, мы помещаем каждое число (строки сα обозначает набор чисел, заданных в качестве входных данных:
Each
ними) через ряд функций (строки сL
ними), затем, основываясь на результатах этих функций, мы отбрасываем некоторые числа и сохраняем остальные, прежде чем их окончательно суммировать. , На самом деле, мы можем определить те функции, гдеЭто то, что представляют строки с 5 по 10 . Строки с 11 по 16 являются просто применением этих трех функций. Как только мы определили все функции, мы затем мутируемα в β согласно следующему правилу:
гдеαя обозначает я й элемент α и то же самое для β , Наконец, мы можем просто взять суммуβ как 0 элементы не влияют на сумму.
источник
K (ок) ,
1514 байтРешение:
Попробуйте онлайн!
Примеры:
Объяснение:
источник
На самом деле , 13 байтов
Попробуйте онлайн!
Объяснение:
источник
Обработка, 88 байт
Использует простой
for
-loop подход, суммирует все кратные и возвращает его. Ввод - это форматint
,int[]
массив.источник