Presque équivalent à la première question du projet Euler:
Si nous listons tous les nombres naturels inférieurs à 10 qui sont des multiples de 3 ou 5, nous obtenons 3, 5, 6 et 9. La somme de ces multiples est 23.
Trouvez la somme de tous les multiples de 3 ou 5 en dessous de 1000.
Défi:
Étant donné un entier positif N
et un ensemble d'au moins un entier positif A
, sortez la somme de tous les entiers positifs inférieurs à ceux N
qui sont des multiples d'au moins un membre de A
.
Par exemple, pour le cas Project Euler, l'entrée serait:
1000
3
5
Cas de test:
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
Réponses:
Gelée , 6 octets
Essayez-le en ligne!
Comment ça marche
la source
Python,
5955 octetsrepl.it
Fonction sans nom prenant un entier
n
et une liste d'entiersl
. Parcourt une plage de nombres naturels (plus zéro) jusqu'à mais non inclusn
et additionne (sum(...)
) ceux qui ont un reste après la division de zéro (v%m<1
) pourany
les entiersm
de la listel
. Utilise la multiplication plutôt qu'une conditionnelle pour économiser 3 octets.la source
Octave,
383633 octetsPrenez entrée comme:
f(10, [3;5])
. Ce serait 2 octets plus court si l'entrée pouvait êtref(9,[3;5])
pour le même cas de test.Vérifiez tous les cas de test ici.
Explication:
Octave peut pré-décrémenter, donc utiliser
1:--x
au lieu de1:x-1
(deux fois) économise deux octets.mod(a,b)
donne1 2 0 1 2 0 1 2 0
pourmod(1:9,3)
. Si le deuxième argument est un vecteur vertical, il répliquera la première entrée verticalement et prendra le module pour chacune des valeurs du deuxième argument d'entrée. Donc, pour l'entrée,mod(1:9, [3;5])
cela donne:Prendre
~all(_,1)
cela donnetrue
pour les colonnes où au moins une valeur est zéro etfalse
où toutes les valeurs sont non nulles:Le
,1
est nécessaire dans le cas où il n'y a qu'un seul numéroy
. Sinon, il agirait sur le vecteur entier au lieu de numéro par numéro.Transposer cela en une matrice verticale et utiliser la multiplication matricielle, nous donnera la bonne réponse, sans avoir besoin d'une sommation explicite:
la source
JavaScript (ES6),
403936 octetsEntrée: entier
n
et tableau d'entiersa
avec syntaxe de curry(n)(a)
Cas de test
Afficher l'extrait de code
la source
f=(n,a)=>n--&&a.some(v=>n%v<1)*n+f(n,a)
. Le mieux que je pouvais faire de manière non récursive était de 61 octets.MATL , 9 octets
Essayez-le en ligne!
la source
1 2 ...
. Vous le dupliquez et prenez le module de l'autre entrée. Vous le niez et vous multipliez avec le vecteur1 2 ..
, utilisez unique pour vous débarrasser des doublons et enfin le résumer ...Rétine , 34 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Le format d'entrée est
Essayez-le en ligne!
la source
Python, 67 octets
Après avoir écrit ceci, j'ai remarqué que mon code était similaire à la réponse python existante, mais je l'ai trouvé indépendamment et je le poste quand même.
la source
x=y=0
une ligne distincte permettrait d'économiser quatre octets.Mathematica,
3727 octetsMerci à Martin Ender pour une observation astucieuse qui a permis de grosses économies d'octets!
Fonction sans nom prenant deux arguments, une liste
#
d'entiers (les diviseurs souhaitésA
) et un entier#2
(la borne supérieureN
), et renvoyant un entier.Range[#,#2-1,#]
donne, pour chaque élémentd
de la liste#
, tous les multiplesd
inférieurs ou égaux#-1
(donc inférieurs à#
); l'union de ces listes est ensuite calculée et additionnée deTr
.La version précédente:
la source
Range
est listable:Tr[Union@@Range[#2,#-1,#2]]&
(puis enregistrez un autre octet en échangeant l'ordre des entrées)Perl 6 , 25 octets
Un lambda qui prend les nombres en entrée comme arguments. (Un argument pour N et un nombre arbitraire d'arguments pour A).
( Essayez-le en ligne. )
Explication:
{ ... }
: Un lambda.$^a
: Premier argument de la lambda.@_
: Arguments restants du lambda ("paramètre variadique").^$^a
: Plage de0
à$^a - 1
.* %% @_.any
: Un autre lambda, qui teste son argument en*
utilisant l'opérateur divisible par%%
uneany
- Jonction de la liste@_
.grep PREDICATE, RANGE
: itère la plage de nombres et retourne ceux pour lesquels le prédicat est vrai.la source
^
pour déclarer un paramètre d'espace réservé est assez explicite. D'autant plus que vous pouvez l'utiliser plus tard dans le bloc comme juste$a
. Je pense que seul$_
@_
%_
self
peut jamais être considéré comme implicitement déclaré. Je pense que je voudrais lire cette ligne " déclarer le premier paramètre comme espace réservé "@_
, et%_
en cas de fonctions, ne sont pas différentes à cet égard: elles aussi ne font partie de la signature que si elles apparaissent dans le corps. Seules$_
(etself
et%_
dans les méthodes) peuvent faire partie d'une signature par défaut.R, 67 octets
Prend un vecteur pour STDIN dans le format suivant:
[N, a_1, a_2, ...]
. Prend en charge n'importe quel nombre dea
. Pour chaquea
, crée la séquencea
àN-1
avec StepSizea
. Prend ensuite la somme de toutes les entrées uniques de ce vecteur.la source
Haskell,
4239 octetsUsage:
Merci à @Zgarb pour 3 octets
la source
(x`mod`)
est le même quemod x
.05AB1E , 9 octets
Essayez-le en ligne!
la source
à
(maximum) apparaît maintenant, mais pas avant.)Octave,
4937 octetsla fonction sera appelée comme
f([2 3 4],50)
Supposons que
A=[2 3 4];
nous ayons besoin d'avoir une somme de nombresnous pouvons multiplier
[2 3 4]
par1:50
pour obtenir la matrice(1:N)'.*A
puis extrayez de la matrice celles qui sont inférieures à 50:
z(z<N)
Puisqu'il y a des éléments répétés dans la matrice, nous extrayons des valeurs uniques et les additionnons.
réponse précédente : (cette solution échouera si N == 1)
la fonction doit être appelée comme
f(unit64([2 3 4]),uint64(50))
la source
Pyth, 10 octets
Explication
la source
T-SQL, 87 octets
Cela fonctionnera tant qu'il
@i
a une valeur de 2048 ou moinsEssaye le
la source
APL (Dyalog Unicode) , 12 octets
Essayez-le en ligne!
Fonction tacite anonyme. Merci à @ Adám de m'avoir aidé à en raser 3 octets. Les usages
⎕IO←0
.Comment:
la source
Pip ,
43 41 3935 octetsEssayez-le en ligne!
Explication:
la source
Python 2, 80 octets
C'est très long. Peut certainement être raccourci. Prendre les 3 nombres comme entrées séparées nuit définitivement au score.
la source
x,y,z=input()
et donner votre avis sous la forme de(1000,3,5)
.Lisp commun, 77
Ungolfed
la source
PowerShell , 57 octets
Essayez-le en ligne!
Solution itérative. Prend l'entrée sous forme de nombre
$a
et de tableau littéral$b
. Boucles allant1
jusqu'à une en dessous$a
(via--$a
), à l'aide d'unWhere-Object
opérateur|?{...}
avec une clause pour sélectionner certains nombres.La clause définit
$i
le nombre actuel avant d'envoyer le tableau d'entrée$b
dans un autre|?{...}
, en sélectionnant ici les éléments où le nombre actuel est divisé également par au moins l'un des nombres de$b
. Ces éléments$b
qui se divisent également sont laissés sur le pipeline.Ainsi, s'il y a au moins un élément de
$b
, le pipeline contient un élément, donc l'extérieurWhere
est$true
et le numéro actuel est laissé sur le pipeline. Sinon, sans aucun élément du$b
pipeline, l'extérieur l'Where
est$false
, donc le numéro actuel n'est pas placé sur le pipeline.Ces nombres sont tous rassemblés en parens, édités
-join
avec des+
signes, et canalisés vers|iex
(abréviation deInvoke-Expression
et similaire àeval
). Le résultat de la somme est laissé sur le pipeline et la sortie est implicite.la source
PHP,
787674 octetsLa boucle externe s'étend
$i
de 1 au-dessous du premier argument et s'ajoute$i
à$s
if$f
n'est pas défini.La boucle interne se multiplie
$f
par ($i
argument modulo) pour tous les arguments suivants, définissant$f
sur0
if$i
est le multiple de l' un d'eux.Courez avec
-r
.la source
Scala, 47 octets
n est une liste qui contient un premier argument
N
, les autres sont des éléments deA
Fonctionne en filtrant les nombres là où il n'existe pas au moins un A dont i est un multiple, puis en additionnant. À strictement parler, nous devrions utiliser
n.tail.exists
à l'intérieur de la fermeture, mais comme i est toujours inférieur à N et donc jamais un multiple de N, la solution est toujours complète sans cela.la source
Java 8, 75 octets
La signature de méthode pour cela est
int f(int N, List<Integer> A)
la source
Rubis,
52 4846 octetsla source
C11, 177 octets
Nécessite cet ensemble d'en-têtes dans le même dossier et la
fnv-hash
bibliothèque qui s'y trouve également. Compiler commegcc 1.c ../fnv-hash/libfnv.a -o 1 -DNODEBUG
Programme de test:
les sorties
la source
Japt
-x
,976 octetsL'essayer
la source
Whispers v2 , 178 octets
Essayez-le en ligne!
Arbre de structure:
Comment ça marche
Très simplement, nous mettons chaque nombre (les lignes avecα désigne l'ensemble des nombres donnés en entrée:
Each
dessus) à travers une série de fonctions (les lignes avecL
dessus), puis, en nous basant sur les résultats de ces fonctions, nous éliminons certains nombres et gardons le reste, avant de finalement les additionner . En fait, nous pouvons définir ces fonctions, oùThis 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.
la source
K (oK),
1514 bytesSolution:
Try it online!
Examples:
Explanation:
la source
Actually, 13 bytes
Try it online!
Explanation:
la source
Processing, 88 bytes
Uses the simple
for
-loop approach, sums all the multiples up and returns it. Input is the formatint
,int[]
array.la source