Trouve la différence entre le carré des sommes et la somme des carrés.
C'est la représentation mathématique:
Votre programme / méthode doit prendre deux entrées: ce sont vos limites inférieure et supérieure de la plage et sont inclusives. Les limites seront des entiers supérieurs à 0.
Votre programme / méthode devrait retourner la réponse.
Vous pouvez utiliser la base de votre choix, mais veuillez indiquer dans votre réponse quelle base vous avez utilisée.
Cas de test (base 10)
5,9 970
91,123 12087152
1,10 2640
C'est le code-golf habituel, donc plus la réponse est courte, mieux c'est.
Réponses:
Python 2, 43 octets
Testez-le sur Ideone .
Comment ça marche
Appelez la fonction définie dans la spécification g (a, b) . Nous avons cela
Définissez la fonction f (x, y, s) de manière récursive comme suit.
En appliquant la relation de récurrence de f (a, b, 0) un total de b - a times, nous pouvons montrer que.
C'est la fonction f de l'implémentation. Alors que
b/a
renvoie un entier non nul, le code suivantand
est exécuté, implémentant ainsi la définition récursive de f .Une fois que 0
b/a
atteint , nous avons que b> a et le lambda renvoie False = 0 , implémentant ainsi le cas de base de la définition de f .la source
MATL , 9 octets
Essayez-le en ligne!
Explication
Exemple
Ce sont les résultats partiels de chaque ligne pour les entrées
5
et9
:&:
&:&*
&:&*XR
&:&*XRss
&:&*XRssE
la source
Gelée,
9 à8 octetsEssayez-le en ligne!
Merci à FryAmTheEggman pour un octet!
la source
Python 2, 45 octets
Solution de formulaire fermé - pas le plus court, mais je pensais que ça valait le coup de poster.
Explication
Soit
p(n)
le n e chiffre pyramidal ett(n)
le n e chiffre triangulaire . Ensuite, pour n sur la plage a , ..., b :t(b)-t(a-1)
, etp(b) - p(a-1)
(t(b)-t(a-1))² - (p(b) - p(a-1))
.Cette expression se réduit à celle du code.
la source
p(n)
le nombre pyramidal du thèmen
e et le nombre triangulaire du th . Ensuite, ceci est une version simplifiée de .t(n)
n
(t(b)-t(a-1))^2 - (p(b) - p(a-1))
(a-b-1)
éliminer le facteur par(b*(b+1)*(2b+1)-a*(a-1)*(2a-1))/6
moi-même.05AB1E, 8 octets
A expliqué
Essayez-le en ligne
la source
Mathematica, 21 octets
Une fonction sans nom prenant deux arguments et renvoyant la différence. Usage:
Il y a trois petites astuces (et assez standard) de golf ici:
##
représente les deux arguments en même temps, afin que nous puissions utiliser la notation préfixe pourRange
.Range@##
est l’abréviation pourRange[##]
laquelle s’élargitRange[a, b]
et nous donne une plage inclusive au besoin.Tr
est pour la trace mais son utilisation sur un vecteur additionne simplement ce vecteur en économisant trois octetsTotal
.x.x
est un produit scalaire, économisant quatre octets de plusTr[x^2]
.la source
Variance
?Variance
est divisé parn
et l'autre parn^2
et je ne vois pas de moyen facile de les annuler séparément.Tr@#^2-#.#&@*Range
est seulement 18 octets.Labyrinthe ,
28 à24 octetsEssayez-le en ligne!
Explication
Comme les boucles ont tendance à être chères dans Labyrinth, j’ai pensé que la formule explicite devrait être la plus courte, car elle peut être exprimée sous forme de code linéaire.
Le pointeur d'instruction frappe alors une impasse et doit faire demi-tour. Lorsqu'il rencontre maintenant,
/
il tente une division par zéro (le bas de la pile étant implicitement rempli de zéros), ce qui termine le programme.la source
Haskell, 34 octets
Exemple d'utilisation:
91 # 123
->12087152
.Rien à expliquer.
la source
Matlab,
302928 octetsUtiliser l’idée de Suever
norm
nous donne 2 octets de moinsAncienne version (simple):
la source
Octave,
2723 octetsCrée une fonction anonyme nommée
ans
qui accepte deux entrées:ans(lower, upper)
Démo en ligne
Explication
Crée un vecteur de ligne de
x
ày
(inclus) et le stocke dansz
. Nous additionnons ensuite tous les éléments en utilisant unsum
carré (^2
). Pour calculer la somme des carrés, nous effectuons une multiplication matricielle entre le vecteur ligne et sa transposition. Cela mettra effectivement chaque élément en carré et résumera le résultat. Nous soustrayons ensuite les deux.la source
Java,
8477 caractères,8477 octets7 octets plus petits à cause de Martin Ender et FryAmTheEggMan, merci.
public int a(int b,int c){int e=0,f=0;for(;b<=c;e+=b,f+=b*b++);return e*e-f;}
Utilisation des trois cas de test de la publication d'origine: http://ideone.com/q9MZSZ
Ungolfed:
Le processus est assez explicite. J'ai déclaré deux variables représentant le carré des sommes et la somme des carrés et les ai incrémentées à plusieurs reprises de façon appropriée. Enfin, je retourne la différence calculée.
la source
++
surf+=b*b++
(vous pouvez laisser la troisième fente dufor
vide) et vous pouvez aussi ne pas besoin de la placee
avant de le retourner (c. -à- faire justereturn e*e-f
).for
vide, déplacez-lef+=b*b++
afin que vous puissiez économiser sur le point-virgule et les accolades.JavaScript (ES6), 46 octets
la source
JavaScript (ES6),
5037 octetsMaintenant un port de la solution Python de @ Dennis ♦.
la source
n=>m=>eval(`for(s=t=0;n<=m;t+=n++)s+=n*n;t*t-s`)
Facteur, 48 octets
Une fonction anonyme.
la source
Haskell, 36 octets
Notez que
la source
i+1
.Perl 6 ,
36 3231 octetsEssaye-le
Explication:
Tester:
la source
{$_=$^a..$^b;.sum²-[+] $_»²}
{.sum²-[+] $_»²}o&[..]
Brachylog , 24 octets
Attend les 2 nombres en entrée sous forme de liste, par exemple
[91:123]
.Explication
la source
APL,
23 à20 octetsFonctionne dans NARS2000.
la source
MATL, 11 octets
Essayez-le en ligne!
Explication:
la source
Pyth, 11 octets
Essayez-le en ligne!
la source
s*M.P}FQ2
Japt, 10 octets
L'essayer
la source
CJam, 17 octets
Testez-le ici.
Explication
Alternativement, on peut simplement additionner les produits de toutes les paires distinctes (en multipliant fondamentalement le carré de la somme et en supprimant les carrés), mais c'est un octet plus long:
la source
PowerShell v2 +, 47 octets
Deux variations
Dans les deux cas, nous générons une plage avec l'
..
opérateur, en la canalisant vers une boucle|%{...}
. A chaque itération, nous accumulons$o
et$p
soit la somme, soit la somme des carrés. Nous calculons ensuite le carré des sommes avec$o*$o
et soustrayons$p
. La sortie est laissée sur le pipeline et l'impression est implicite.la source
JavaScript (ES6), 67 octets
Suite de tests
la source
J, 29 octets
Réponse de la gelée du port de poignée de porte .
Usage
Où
>>
est STDIN,<<
est STDOUT etx
pour une précision étendue.la source
Pyke, 11 octets
Essayez-le ici!
la source
Julia, 25 octets
C'est une fonction qui accepte deux entiers et retourne un tableau d'entiers 1x1.
L’approche est simple: construisez un à
UnitRange
partir des points de terminaisona
etb
appelez-lex
, faites la sommex
, mettez -le en carré et soustrayez sa norme, qui est calculée commetranspose(x) * x
.Essayez-le en ligne! (inclut tous les cas de test)
la source
a\b=-(x=a:b)'x+sum(x)^2
enregistre quelques octets.TI-BASIC, 19 octets
randIntNoRep
obtient la gamme (mélangé). Le reste est assez explicite.la source
Fith , 52 octets
Il s'agit d'une fonction anonyme qui prend les deux nombres de la pile et ne laisse qu'un seul nombre.
Explication:
la source
GeoGebra, 91 octets
Définit une fonction (probablement
e(x,y)
) qui calcule la différence souhaitée.a(x)
calcule la somme des nombres naturels entre0
etx
.b(x)
calcule la somme des carrés des nombres naturels entre0
etx
.c(x,y)
calcule d’abord la somme des nombres naturels entrex
ety
, puis la met au carré.d(x,y)
calcule la somme des carrés entreb(x)
etb(y)
.La dernière ligne définit une fonction multi-variable qui termine le calcul. Un nom est automatiquement attribué à la fonction, enregistrant quelques octets.
la source
e(x,y)=
pour lui donner un nom, mais pour économiser des octets, nous n'en avons pas ici. GeoGebra attribue automatiquement à l'expression un nom (probablement e, puisqu'il s'agit de la prochaine lettre disponible). Je n'ai pas l'environnement disponible pour le moment, mais je n'utiliserais pas le volet CAS. Le volet d’algèbre et la barre de saisie doivent faire le travail correctement. (Cela fait longtemps que je n'ai pas utilisé GGb en ligne; mon image mentale en est peut-être dépassée.)