Tiré de: OEIS- A071816
Votre tâche, étant donné une limite supérieure de n
, est de trouver le nombre de solutions qui satisfont l'équation:
a+b+c = x+y+z, where 0 <= a,b,c,x,y,z < n
La séquence commence comme décrit sur la page OEIS, et comme ci-dessous (indexé 1):
1, 20, 141, 580, 1751, 4332, 9331, 18152, 32661, 55252, 88913, 137292, 204763, 296492, 418503, 577744, 782153, 1040724, 1363573, 1762004, 2248575, 2837164, 3543035, 4382904, 5375005, 6539156, 7896825, 9471196, 11287235, 13371756
Car n = 1
, il n'y a qu'une seule solution:(0,0,0,0,0,0)
Pour n = 2
, il existe 20 solutions ordonnées (a,b,c,x,y,z)
pour a+b+c = x+y+z
:
(0,0,0,0,0,0), (0,0,1,0,0,1), (0,0,1,0,1,0), (0,0,1,1,0,0), (0,1,0,0,0,1),
(0,1,0,0,1,0), (0,1,0,1,0,0), (0,1,1,0,1,1), (0,1,1,1,0,1), (0,1,1,1,1,0),
(1,0,0,0,0,1), (1,0,0,0,1,0), (1,0,0,1,0,0), (1,0,1,0,1,1), (1,0,1,1,0,1),
(1,0,1,1,1,0), (1,1,0,0,1,1), (1,1,0,1,0,1), (1,1,0,1,1,0), (1,1,1,1,1,1).
I & O
- L'entrée est un entier unique indiquant
n
. - La sortie est un seul entier / chaîne indiquant
f(n)
, oùf(...)
est la fonction ci-dessus. - L'indexation est exactement comme décrit, aucune autre indexation n'est acceptable.
Il s'agit du code-golf , le plus petit nombre de victoires d'octets.
Réponses:
Gelée ,
96 octetsSolution O (n 6 ) .
Essayez-le en ligne!
Comment ça fonctionne
la source
O(n^6)
bien: P.Mathematica 17 ou 76 octets
En utilisant la formule:
(Enregistré 3 octets par @GregMartin et @ngenisis)
Plutôt que d'utiliser la formule, ici, je calcule littéralement toutes les solutions et les compte.
la source
11/20
par.55
pour une économie de deux octets.Haskell , 48 octets
Je n'ai pas remarqué la formule avant d'écrire ceci, donc ce n'est certainement pas la méthode générale la plus courte (ou la plus rapide), mais je pensais que c'était joli.
Essayez-le en ligne!
f n
génère toutes les listes de 6 éléments à partir de[1..n]
, puis compte ceux dont la somme alternée est 0. Utilise le fait quea+b+c==d+e+f
c'est la même chosea-(d-(b-(e-(c-f))))==0
, et aussi que cela n'a pas d'importance si nous ajoutons un 1 à tous les nombres.la source
MATL , 12 octets
Essayez-le en ligne!
Explication
Je ne pouvais pas manquer la chance d'utiliser à nouveau la convolution!
Cela utilise la caractérisation suivante d'OEIS:
et bien sûr, la multiplication polynomiale est la convolution.
la source
Gelée , 9 octets
Pas aussi court que @ Dennis, mais il se termine en moins de 20 secondes pour l'entrée
100
.Essayez-le en ligne!
Comment ça fonctionne
la source
Pyth,
1312 octetsUn octet enregistré grâce à Leaky Nun.
Explication
la source
/LJJ
place dem/JdJ
.Python 3 , 28 octets
Essayez-le en ligne!
la source
TI-BASIC, 19 octets
Évalue la formule OEIS.
la source
Prompt x
= 2 octets?Oasis , 17 octets
Essayez-le en ligne!
Oasis est un langage basé sur la pile optimisé pour les séquences récurrentes. Cependant, la formule de récursivité serait trop longue pour ce cas.
la source
Brachylog , 17 octets
Essayez-le en ligne!
Explication
la source
ᶜ
devrait venir automatiquement avec≜
ᶜ
seul, c'est un métaprédicat.JavaScript, 24 octets
Utilise la formule de la page OEIS.
Essayez-le en ligne!
la source
x=>x**5*.55+x**3/4+x/5
Octave ,
252321 octetsEssayez-le en ligne!
Utilise la formule de l'entrée OEIS. Enregistré
deuxquatre octets en réorganisant la formule et en utilisant.55
au lieu de11/20
, grâce à fəˈnɛtɪk.la source
Python 2,7,
1091059996 octetsMerci à ETHproductions et Dennis d'avoir économisé quelques octets:
la source
sum(sum(x[:3])==sum(x[3:])for x ...)
serait encore plus court. Enregistre égalementfrom itertools import*
un octet.for
. De plus, nous n'exigeons pas que les fonctions soient nommées par défaut, vous pouvez donc les supprimerh=
.Mathematica, 52 octets
La mise en œuvre de la formule OEIS par Kelly Lowder est beaucoup plus courte, mais cela calcule les chiffres directement:
Eh bien, il compte en fait le nombre de solutions avec
1 <= a,b,c,x,y,z <= n
. C'est le même nombre, car l'ajout de 1 à toutes les variables ne change pas l'égalité.Explication:
Range@#~Tuples~6
crée toutes les listes de six entiers entre 1 et n,#~Partition~3&/@
divise chaque liste en deux listes de longueur 3,Tr/@
additionne ces sous-listes etCount[...,{n_,n_}]
compte le nombre de paires ayant la même somme. J'ai eu beaucoup de chance avec l'ordre de priorité entref @
,f /@
et~f~
!la source
Octave , 41 octets
Essayez-le en ligne!
Similaire à ma réponse MATL , mais calcule la convolution via une transformée de Fourier discrète (
fft
) avec un nombre suffisant de points (n^2
).~~(1:n)
est utilisé comme une version plus courte deones(1,n)
.round
est nécessaire en raison d'erreurs en virgule flottante.la source
CJam , 17 octets
Saisie des
11
temps morts sur TIO12
et plus de mémoire.Essayez-le en ligne!
Explication
la source
Clojure, 79 octets
Des tonnes de répétition dans le code, sur un plus grand nombre de variables, une macro peut être plus courte.
la source