Finden Sie die Differenz zwischen dem Quadrat der Summen und der Summe der Quadrate.
Dies ist die mathematische Darstellung:
Ihr Programm / Ihre Methode sollte zwei Eingaben annehmen, dies sind Ihre unteren und oberen Grenzen des Bereichs und sind inklusive. Limits sind ganze Zahlen über 0.
Ihr Programm / Ihre Methode sollte die Antwort zurückgeben.
Sie können jede Basis verwenden, die Sie möchten, aber geben Sie in Ihrer Antwort an, welche Basis Sie verwendet haben.
Testfall (Basis 10)
5,9 970
91,123 12087152
1,10 2640
Dies ist übliches Code-Golf. Je kürzer die Antwort, desto besser.
Antworten:
Python 2, 43 Bytes
Teste es auf Ideone .
Wie es funktioniert
Rufen Sie die in der Spezifikation g (a, b) definierte Funktion auf . Wir haben das
Definieren Sie die Funktion f (x, y, s) rekursiv wie folgt.
Indem wir die Wiederholungsrelation von f (a, b, 0) insgesamt b - a mal anwenden , können wir das zeigen.
Dies ist die Funktion f der Implementierung. Während
b/a
eine Ganzzahl ungleich Null zurückgegeben wird, wird der folgende Codeand
ausgeführt, wodurch die rekursive Definition von f implementiert wird .Einmal
b/a
erreicht 0 , haben wir , dass b> ein und die Lambda - Renditen Falsch = 0 , so dass der Basisfalles der Definition der Umsetzung f .quelle
MATL , 9 Bytes
Probieren Sie es online!
Erläuterung
Beispiel
Dies sind die Teilergebnisse jeder Zeile für Eingaben
5
und9
:&:
&:&*
&:&*XR
&:&*XRss
&:&*XRssE
quelle
Gelee,
98 BytesProbieren Sie es online!
Danke an FryAmTheEggman für ein Byte!
quelle
Python 2, 45 Bytes
Closed-Form-Lösung - nicht die kürzeste, aber ich dachte, es lohnt sich trotzdem, sie zu veröffentlichen.
Erläuterung
Sei
p(n)
die n- te quadratische Pyramidenzahl undt(n)
sei die n- te dreieckige Zahl . Dann gilt für n über den Bereich a , ..., b :t(b)-t(a-1)
undp(b) - p(a-1)
(t(b)-t(a-1))² - (p(b) - p(a-1))
.Dieser Ausdruck reduziert sich auf den im Code.
quelle
p(n)
das seinn
th Platz Pyramidenzahl , undt(n)
die seinn
th Dreieckszahl . Dann ist dies eine vereinfachte Version von(t(b)-t(a-1))^2 - (p(b) - p(a-1))
.(a-b-1)
Faktor(b*(b+1)*(2b+1)-a*(a-1)*(2a-1))/6
alleine hätte herausholen können .05AB1E, 8 Bytes
Erklärt
Probieren Sie es online aus
quelle
Mathematica, 21 Bytes
Eine unbenannte Funktion, die zwei Argumente verwendet und die Differenz zurückgibt. Verwendung:
Hier gibt es drei kleine (und ziemlich übliche) Golf-Tricks:
##
repräsentiert beide Argumente gleichzeitig, so dass wir die Präfixnotation für verwenden könnenRange
.Range@##
ist eine Abkürzung,Range[##]
die erweitert wirdRange[a, b]
und uns je nach Bedarf ein umfassendes Angebot bietet.Tr
ist für die Verfolgung, aber wenn Sie es für einen Vektor verwenden, addieren Sie einfach diesen Vektor und sparen Sie drei Bytes mehrTotal
.x.x
ist ein Skalarprodukt, bei dem vier Bytes eingespart werdenTr[x^2]
.quelle
Variance
helfen?Variance
durchn
und der andere durch geteilt wirdn^2
und ich keine einfache Möglichkeit sehe, diese getrennt voneinander rückgängig zu machen.Tr@#^2-#.#&@*Range
ist nur 18 Bytes.Labyrinth ,
2824 BytesProbieren Sie es online!
Erläuterung
Da Schleifen im Labyrinth oft teuer sind, sollte die explizite Formel die kürzeste sein, da sie als linearer Code ausgedrückt werden kann.
Der Befehlszeiger stößt dann auf eine Sackgasse und muss sich umdrehen. Wenn es nun auf etwas stößt
/
, versucht es eine Division durch Null (da der Boden des Stapels implizit mit Nullen gefüllt ist), wodurch das Programm beendet wird.quelle
Haskell, 34 Bytes
Anwendungsbeispiel:
91 # 123
->12087152
.Nichts zu erklären.
quelle
Matlab,
302928 BytesDie Verwendung von Suevers Idee von
norm
ergibt 2 Bytes wenigerAlte (einfache) Version:
quelle
Oktave,
2723 BytesErstellt eine anonyme Funktion mit dem Namen,
ans
die zwei Eingaben akzeptiert:ans(lower, upper)
Online Demo
Erläuterung
Erstellt einen Zeilenvektor von
x
bisy
(einschließlich) und speichert ihn inz
. Wir addieren dann alle Elemente mitsum
und quadrieren es (^2
). Um die Summe der Quadrate zu berechnen, führen wir eine Matrixmultiplikation zwischen dem Zeilenvektor und seiner Transponierung durch. Dies wird effektiv jedes Element quadrieren und das Ergebnis zusammenfassen. Wir subtrahieren dann die beiden.quelle
Java,
8477 Zeichen,8477 Bytes7 Bytes kleiner dank Martin Ender und FryAmTheEggMan, danke.
public int a(int b,int c){int e=0,f=0;for(;b<=c;e+=b,f+=b*b++);return e*e-f;}
Verwenden der drei Testfälle im Originalbeitrag: http://ideone.com/q9MZSZ
Ungolfed:
Der Prozess ist ziemlich selbsterklärend. Ich habe zwei Variablen deklariert, um das Quadrat der Summen und die Summe der Quadrate darzustellen, und habe sie wiederholt entsprechend inkrementiert. Schließlich gebe ich die berechnete Differenz zurück.
quelle
++
auff+=b*b++
(so dass Sie den dritten Schlitz des hinterlassenfor
leer) und Sie auch nicht auf Platz brauchen ,e
bevor es (dh nur tun Rückkehrreturn e*e-f
).for
, schieben Sie denf+=b*b++
dort hinein, damit Sie sowohl ein Semikolon als auch die geschweiften Klammern einsparen können.JavaScript (ES6), 46 Byte
quelle
JavaScript (ES6),
5037 BytesNun ein Port von @ Dennis ♦ 's Python-Lösung.
quelle
n=>m=>eval(`for(s=t=0;n<=m;t+=n++)s+=n*n;t*t-s`)
Faktor 48 Bytes
Eine anonyme Funktion.
quelle
Haskell, 36 Bytes
Beachten Sie, dass
quelle
i+1
.Perl 6 ,
36 3231 BytesProbier es aus
Erläuterung:
Prüfung:
quelle
{$_=$^a..$^b;.sum²-[+] $_»²}
{.sum²-[+] $_»²}o&[..]
Brachylog , 24 Bytes
Erwartet die 2 Zahlen in Input als Liste, z
[91:123]
.Erläuterung
quelle
APL,
23 bis20 BytesFunktioniert in NARS2000.
quelle
MATL, 11 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Pyth, 11 Bytes
Probieren Sie es online!
quelle
s*M.P}FQ2
Japt, 10 Bytes
Versuch es
quelle
CJam, 17 Bytes
Teste es hier.
Erläuterung
Alternativ kann man einfach die Produkte aller unterschiedlichen Paare summieren (im Grunde genommen das Quadrat der Summe multiplizieren und Quadrate entfernen), aber das ist ein Byte länger:
quelle
PowerShell v2 +, 47 Byte
Zwei Variationen
In beiden Fällen generieren wir mit dem
..
Operator einen Bereich und leiten diesen an eine Schleife weiter|%{...}
. Bei jeder Iteration akkumulieren wir$o
und$p
entweder als Summe oder als Quadratsumme. Wir berechnen dann das Summenquadrat mit$o*$o
und subtrahieren$p
. Die Ausgabe bleibt in der Pipeline und das Drucken ist implizit.quelle
JavaScript (ES6), 67 Byte
Test Suite
quelle
J, 29 Bytes
Antwort von Port of Doorknob's Jelly .
Verwendung
Wo
>>
ist STDIN,<<
ist STDOUT undx
ist für erweiterte Präzision.quelle
Pyke, 11 Bytes
Probieren Sie es hier aus!
quelle
Julia, 25 Bytes
Dies ist eine Funktion, die zwei Ganzzahlen akzeptiert und ein 1x1-Ganzzahl-Array zurückgibt.
Der Ansatz ist einfach: Erstellen Sie eine
UnitRange
von den Endpunktena
undb
und es nenntx
, dann summierenx
, quadratisch es, und seine Norm subtrahieren, die als berechnettranspose(x) * x
.Probieren Sie es online! (beinhaltet alle Testfälle)
quelle
a\b=-(x=a:b)'x+sum(x)^2
spart ein paar Bytes.TI-BASIC, 19 Bytes
randIntNoRep
Ruft die Reichweite ab (gemischt). Der Rest ist ziemlich selbsterklärend.quelle
Fünftens 52 Bytes
Dies ist eine anonyme Funktion, die die beiden Zahlen auf dem Stapel aufnimmt und eine einzelne Zahl hinterlässt.
Erläuterung:
quelle
GeoGebra, 91 Bytes
Definiert (wahrscheinlich
e(x,y)
) eine Funktion , die die gewünschte Differenz berechnet.a(x)
berechnet die Summe der natürlichen Zahlen zwischen0
undx
.b(x)
berechnet die Summe der Quadrate der natürlichen Zahlen zwischen0
undx
.c(x,y)
Berechnet zuerst die Summe der natürlichen Zahlen zwischenx
undy
und quadriert dann diese Summe.d(x,y)
berechnet die Summe der Quadrate zwischenb(x)
undb(y)
.Die letzte Zeile definiert eine Funktion mit mehreren Variablen, die die Berechnung beendet. Der Funktion wird automatisch ein Name zugewiesen, der einige Bytes spart.
quelle
e(x,y)=
, ihm einen Namen zu geben, aber um Bytes zu sparen, sind wir nicht hier. GeoGebra weist dem Ausdruck automatisch einen Namen zu (wahrscheinlich e, da dies der nächste verfügbare Buchstabe ist). Ich habe die Umgebung momentan nicht verfügbar, aber ich würde den CAS-Bereich nicht verwenden. Das Algebra-Fenster und die Eingabeleiste sollten den Job richtig machen. (Es ist eine Weile her, seit ich GGb online verwendet habe; mein geistiges Bild davon ist möglicherweise veraltet.)