Niemal równoważne z pierwszym pytaniem Project Euler:
Jeśli podamy wszystkie liczby naturalne poniżej 10, które są wielokrotnościami 3 lub 5, otrzymamy 3, 5, 6 i 9. Suma tych wielokrotności wynosi 23.
Znajdź sumę wszystkich wielokrotności 3 lub 5 poniżej 1000.
Wyzwanie:
Biorąc pod uwagę dodatnią liczbę całkowitą N
i zestaw co najmniej jednej dodatniej liczby całkowitej A
, wypisz sumę wszystkich dodatnich liczb całkowitych mniejszą niż N
wielokrotności co najmniej jednego elementu A
.
Na przykład w przypadku projektu Euler dane wejściowe będą następujące:
1000
3
5
Przypadki testowe:
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
Odpowiedzi:
Galaretka , 6 bajtów
Wypróbuj online!
Jak to działa
źródło
Python,
5955 bajtówrepl.it
Nienazwana funkcja przyjmująca liczbę całkowitą
n
i listę liczb całkowitychl
. Przechodzi przez zakres liczb naturalnych (plus zero) do, ale nie wliczającn
i sumuje (sum(...)
) te, które mają resztę po dzieleniu zera (v%m<1
) dlaany
liczb całkowitychm
na liściel
. Używa mnożenia zamiast warunkowego, aby zapisać 3 bajty.źródło
Oktawa,
383633 bajtówWeź dane jako:
f(10, [3;5])
. Byłoby to 2 bajty krótsze, gdyby dane wejściowe mogły dotyczyćf(9,[3;5])
tego samego przypadku testowego.Sprawdź tutaj wszystkie przypadki testowe.
Wyjaśnienie:
Oktawa może wstępnie zmniejszyć, więc używając
1:--x
zamiast1:x-1
(dwa razy) oszczędza dwa bajty.mod(a,b)
daje1 2 0 1 2 0 1 2 0
zamod(1:9,3)
. Jeśli drugi argument jest wektorem pionowym, powiela pierwsze wejście pionowo i przyjmuje moduł dla każdej wartości drugiego argumentu wejściowego. Tak więc dla danych wejściowychmod(1:9, [3;5])
daje to:Przyjęcie
~all(_,1)
tego dajetrue
kolumny, w których co najmniej jedna wartość wynosi zero, ifalse
wszystkie wartości są niezerowe:The
,1
Jest potrzebne w przypadku, gdy istnieje tylko jeden numer wy
. W przeciwnym razie działałby na cały wektor zamiast liczby po liczbie.Przeniesienie tego na macierz pionową i użycie mnożenia macierzy da nam prawidłową odpowiedź, bez potrzeby wyraźnego podsumowania:
źródło
JavaScript (ES6),
403936 bajtówDane wejściowe: liczba całkowita
n
i tablica liczb całkowitycha
ze składnią curry(n)(a)
Przypadki testowe
Pokaż fragment kodu
źródło
f=(n,a)=>n--&&a.some(v=>n%v<1)*n+f(n,a)
. Najlepsze, co mogłem zrobić nierekurencyjnie, to 61 bajtów.MATL , 9 bajtów
Wypróbuj online!
źródło
1 2 ...
. Powielasz go i bierzesz moduł drugiego wejścia. Negujesz go i mnożysz z wektorem1 2 ..
, użyj unikalnego, aby pozbyć się duplikatów, a na końcu zsumować ...Retina , 34 bajty
Liczba bajtów zakłada kodowanie ISO 8859-1.
Format wejściowy to
Wypróbuj online!
źródło
Python, 67 bajtów
Po napisaniu tego zauważyłem, że mój kod jest podobny do istniejącej odpowiedzi w Pythonie, ale wymyśliłem go niezależnie i i tak go publikuję.
źródło
x=y=0
osobnego wiersza pozwoliłoby zaoszczędzić cztery bajty.Mathematica,
3727 bajtówDzięki Martin Ender za sprytną obserwację, która doprowadziła do dużych oszczędności bajtów!
Funkcja bez nazwy, która przyjmuje dwa argumenty, listę
#
liczb całkowitych (pożądane dzielnikiA
) i liczbę całkowitą#2
(górna granicaN
) i zwraca liczbę całkowitą.Range[#,#2-1,#]
daje dla każdego elementud
listy#
wszystkie wielokrotnościd
mniejsze lub równe#-1
(a więc mniejsze niż#
); unia tych list jest następnie obliczana i sumowanaTr
.Poprzednia wersja:
źródło
Range
jest wymienny:Tr[Union@@Range[#2,#-1,#2]]&
(a następnie zapisz kolejny bajt, zamieniając kolejność danych wejściowych)Perl 6 , 25 bajtów
Lambda, która przyjmuje liczby wejściowe jako argumenty. (Jeden argument dla N i dowolna liczba argumentów dla A).
( Wypróbuj online. )
Wyjaśnienie:
{ ... }
: A lambda.$^a
: Pierwszy argument lambda.@_
: Pozostałe argumenty lambda („parametr variadic”).^$^a
: Zakres od0
do$^a - 1
.* %% @_.any
: Kolejna lambda, która sprawdza swój argument*
za pomocą operatora podzielnego przez%%
względemany
- Łączenie listy@_
.grep PREDICATE, RANGE
: iteruje zakres liczb i zwraca te, dla których predykat jest prawdziwy.źródło
^
celu zadeklarowania parametru zastępczego jest dość wyraźne. Zwłaszcza, że możesz użyć go później w bloku jako sprawiedliwego$a
. Myślę, że tylko$_
@_
%_
self
można kiedykolwiek uznać za dorozumiane. Myślę, że powinienem przeczytać ten wiersz „ zadeklaruj pierwszy parametr jako symbol zastępczy ”@_
, a%_
w przypadku funkcji nie różnią się pod tym względem: one również stają się częścią podpisu tylko wtedy, gdy pojawiają się w ciele. Tylko$_
(aself
i%_
metod) może stać się częścią podpis domyślnie.R, 67 bajtów
Staje wektor do standardowego wejścia w następującym formacie:
[N, a_1, a_2, ...]
. Obsługuje dowolną liczbęa
. Dla każdegoa
, tworzy sekwencjęa
doN-1
z stepSizea
. Następnie pobiera sumę wszystkich unikalnych wpisów w tym wektorze.źródło
Haskell,
4239 bajtówStosowanie:
Dzięki @Zgarb za 3 bajty
źródło
(x`mod`)
jest taki sam jakmod x
.05AB1E , 9 bajtów
Wypróbuj online!
źródło
à
(maksymalnie) pojawia się teraz na liście, ale nie wcześniej.)Oktawa,
4937 bajtówfunkcja zostanie wywołana jako
f([2 3 4],50)
Załóżmy,
A=[2 3 4];
że potrzebujemy sumy liczb jakomożemy pomnożyć
[2 3 4]
,1:50
aby uzyskać macierz(1:N)'.*A
następnie wyodrębnij z macierzy te, które są mniejsze niż 50:
z(z<N)
Ponieważ w macierzy występują powtarzające się elementy, wyodrębniamy unikalne wartości i sumujemy je.
poprzednia odpowiedź : (to rozwiązanie zawiedzie, jeśli N == 1)
funkcję należy wywołać jako
f(unit64([2 3 4]),uint64(50))
źródło
Pyth, 10 bajtów
Wyjaśnienie
źródło
T-SQL, 87 bajtów
Będzie to działać tak długo, jak
@i
ma wartość 2048 lub niższąWypróbuj to
źródło
APL (Dyalog Unicode) , 12 bajtów
Wypróbuj online!
Anonimowa funkcja ukryta. Dzięki @ Adám za pomoc w goleniu 3 bajtów. Zastosowania
⎕IO←0
.W jaki sposób:
źródło
Pip,
43 41 3935 bytesTry it online!
Explanation:
źródło
Python 2, 80 Bytes
This is very long. Can definitely be shortened. Taking the 3 numbers as separate inputs is definitely hurting the score.
źródło
x,y,z=input()
and give input in the form of(1000,3,5)
.Common Lisp, 77
Ungolfed
źródło
PowerShell, 57 bytes
Try it online!
Iterative solution. Takes input as a number
$a
and as a literal array$b
. Loops from1
up to one below$a
(via--$a
), using aWhere-Object
operator|?{...}
with a clause to select certain numbers.The clause sets
$i
to be the current number before sending input array$b
into another|?{...}
, here picking out those items where the current number is evenly divided by at least one of the numbers in$b
. Those elements of$b
that do divide evenly are left on the pipeline.Thus, if there is at least one element from
$b
, the pipeline contains an element, so the outerWhere
is$true
and the current number is left on the pipeline. Otherwise, with no elements from$b
on the pipeline, the outerWhere
is$false
, so the current number is not placed on the pipeline.Those numbers are all gathered up in parens,
-join
ed together with+
signs, and piped to|iex
(short forInvoke-Expression
and similar toeval
). The summation result is left on the pipeline, and output is implicit.źródło
PHP,
787674 bytesThe outer loop runs
$i
from 1 to below first argument and adds$i
to$s
if$f
is not set.The inner loop multiplies
$f
with ($i
modulo argument) for all subsequent arguments, setting$f
to0
if$i
is the multiple of any of them.Run with
-r
.źródło
Scala, 47 bytes
n is a List which contains of a first argument
N
, the rest are elements ofA
Works by filtering out numbers where there doesn't exist at least one A of which i is a multiple, then summing. Strictly speaking we should use
n.tail.exists
inside the closure, but as i is always less than N and therefore never a multiple of N the solution is still complete without this.źródło
Java 8, 75 bytes
The method signature for this is
int f(int N, List<Integer> A)
źródło
Ruby,
52 4846 bytesźródło
C11, 177 bytes
Requires this set of headers in the same folder, and the
fnv-hash
library found there as well. Compile likegcc 1.c ../fnv-hash/libfnv.a -o 1 -DNODEBUG
Test Program:
outputs
źródło
Japt
-x
,976 bytesTry it
źródło
Whispers v2, 178 bytes
Try it online!
Structure tree:
How it works
Very simply, we put each number (the lines withα denotes the set of numbers given as input:
Each
on them) through a series of functions (the lines withL
on them), then, based off the results of those functions, we discard some numbers and keep the rest, before finally summing them. In fact, we can define those functions, whereThis is what lines 5 through to 10 represent. Lines 11 through 16 are simply the application of those three functions. Once we've defined all the functions, we then mutateα to β according to the following rule:
whereαi denotes the i th element of α , and the same for β . Finally, we can simply take the sum of β , as the 0 elements do not affect the sum.
źródło
K (oK),
1514 bytesSolution:
Try it online!
Examples:
Explanation:
źródło
Actually, 13 bytes
Try it online!
Explanation:
źródło
Processing, 88 bytes
Uses the simple
for
-loop approach, sums all the multiples up and returns it. Input is the formatint
,int[]
array.źródło