Eine indische Legende erzählt die Geschichte des angeblichen Erfinders des Schachspiels, der den Kaiser von Indien mit seinem Spiel so sehr beeindruckte, dass er mit allem belohnt wurde, was gefragt wurde.
Der Mann sagte, er wolle mit Reis bezahlt werden. Er wollte ein Reiskorn für das erste Feld des Schachbretts, zwei für das zweite, vier für das dritte, acht für das vierte und so weiter bis zum 64. Feld.
Der Kaiser war erstaunt, dass der Mann um eine so kleine Belohnung bat, aber als seine Mathematiker zu zählen begannen, verlor er schließlich eine seiner Provinzen.
Aufgabe
Berechnen Sie anhand der Seitenlänge eines hypothetischen Schachbretts (8 auf einem Standardschachbrett) und des Multiplikators zwischen den Quadraten (2 in der Legende) die Anzahl der Reiskörner, die der Kaiser dem Mann zahlen muss.
Anmerkungen
Die Seitenlänge ist immer eine positive ganze Zahl. Der Multiplikator kann stattdessen eine beliebige rationale Zahl sein.
Wenn Ihre bevorzugte Sprache keine sehr großen Zahlen anzeigen kann, ist dies in Ordnung, solange Ihr Programm kleinere Eingaben korrekt verarbeiten kann.
Auch wenn Ihre bevorzugte Sprache größere Werte (mit Exponentialnotationen) rundet, ist es in Ordnung, wenn diese Werte ungefähr korrekt sind.
Testfälle
Input (side length, multiplier) => Output
8, 2 => 18446744073709551615
3, 6 => 2015539
7, 1.5 => 850161998.2854
5, -3 => 211822152361
256, 1 => 65536
2, 2 => 15
2, -2 => -5
Bitte beachten Sie die explizite Formel
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Führt falsch auf multiplier = 1
, als
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
Wertung
Das ist Code-Golf. Kürzeste Antwort in Bytes gewinnt.
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputs
Vorsicht, das hat in der Vergangenheit zu Problemen geführt. meta.codegolf.stackexchange.com/a/8245/31716Antworten:
Gelee , 4 Bytes
Hierbei wird der Ansatz aus der cleveren APL-Antwort von @ APLDude verwendet .
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
MATL , 6 Bytes
Probieren Sie es online!
quelle
APL, 10 Bytes
⎕
wird verwendet, um Benutzereingaben zweimal zu lesen. Wenn wir die Seitenlänge in s und den Multiplikator in m speichern , erhalten wir den folgenden Code.Und so analysiert APL diesen Code:
quelle
⊣⊥1⍴⍨⊢×⊢
(8 Bytes) Als interaktiver REPL-Befehl⎕⊥×⍳⎕*2
funktioniert auch (7 Bytes).Python, 40 Bytes
Erzeugt und wertet einen String wie
das kodiert die Summe als Hornerisiertes Polynom mit
n*n
Termen.Viele verschiedene Methoden ergaben sehr ähnliche Bytezahlen:
quelle
Pyth, 6 Bytes
1 Byte gespart dank @FryAmTheEggman .
Probieren Sie es online!
Testsuite.
quelle
Haskell, 25 Bytes
Summiert die Liste
[m^0, m^1, ..., m^(n*n-1)]
.quelle
JavaScript (ES2016 / ES7),
312928 ByteNur @Bassdrop Cumberwubwubwub und @ Kaizos ES6-Version, aber mit Potenzierungsoperator. :) (Ich hatte nicht genug Ruf, um stattdessen zu kommentieren.)
Bearbeiten:
/+(b-1)
geändert in/--b
(danke @Neil).Bearbeiten: Verwendet jetzt Curry (danke @MamaFunRoll).
quelle
+
Operator war ein Test, den ich vergessen habe, zu bearbeiten, so dass Sie 1 Byte weglassen können :)/--b
Sie ein oder zwei Bytes sparen?Gelee, 6 Bytes
Probieren Sie es online!
quelle
MATLAB, 23 Bytes
Teste es hier !
quelle
Javascript ES6,
59373534 BytesDanke an @Kaizo für die unglaublichen 19 Bytes, @Neil für weitere 2 und @gcampbell für 1 mehr!
Probieren Sie es hier aus
Code-Snippet anzeigen
Alternative kaputte Versionen
32 Bytes
Ursachen
NaN
fürb==1
.30 Bytes
Ursachen
Infinity
fürb==1.5
.28 Bytes
Ausgaben
1
für einige gültige Testfälle.Alte Version für 59 Bytes
(a,b)=>Array(a*a).fill``.reduce((c,d,i)=>c+Math.pow(b,i),0)
quelle
/~-b
ist offensichtlich nicht gut für gebrocheneb
, aber/--b
sollte funktionieren, nein?(a,b)=>[...Array(a*a-1)].reduce(s=>s+=p*=b,p=1)
Java, 132 Bytes
Ungolfed
Anmerkungen
Ausgänge
quelle
R, 18 Bytes
Erläuterung:
quelle
05AB1E , 5 Bytes
Code:
Erläuterung:
Probieren Sie es online! .
quelle
Haskell, 30 Bytes
oder gleich lang
Die erste Version beginnt mit
1
mehrmals multipliziert mitm
. Dann summiert es die erstenn^2
Zahlen dieser Folge. Die zweite Version ist die explizite Formel, wie in anderen Antworten zu sehen.quelle
n#m=sum$(m^)<$>[0..n*n-1]
?J 10 Bytes
Verwendungszweck
Ich markiere einige Ganzzahlen mit dem
x
Suffix, um erweiterte Ganzzahlen zu verwenden, um genaue Ergebnisse zu erhalten.Erläuterung
quelle
#.*:$*
gemäß APL Dude.Mathcad, [tbd] Bytes (~ 11)
Verwendet den in Mathcad eingebauten Summationsoperator. Demonstriert auch die Vereinfachung des symbolischen Prozessors, um eine exakte Formel zu generieren.
Mathcad führt effektiv zwei Prozessor-Engines parallel aus - eine Standard-IEEE-64/80-Bit-Gleitkomma-Engine und ein symbolischer Prozess mit beliebiger Zahlenlänge (MuPad). Die numerische Standardbewertung wird durch das Gleichheitszeichen (=) angezeigt, während ein Pfeil nach rechts die symbolische Bewertung anzeigt.
Mathcad-Zählschema muss noch ermittelt werden, damit keine Byteanzahl angegeben wird.
ctl- $ gibt den Summationsoperator (Sigma) ein, einschließlich leerer Platzhalter, um die Summationsvariable, den Anfangswert, den Endwert und den Ausdruck zu setzen. Ungefähre Anzahl von Byte-Äquivalenten = 11.
quelle
PostgreSQL,
6766 BytesSqlFiddleDemo
Eingang:
VALUES(side, multiplier)
BEARBEITEN:
Eingabe in Tabelle verschoben, alle Fälle gleichzeitig:
SqlFiddleDemo
Ausgabe:
quelle
TI-Basic, 19 Bytes
S
ist Seitenlänge undM
ist der Multiplikator.quelle
Python, 40 Bytes
quelle
lambda l,m:(m**(l*l)-1)/(m-1)
Ruby: 39 Bytes
Prüfung:
quelle
sum
Funktion bekommen ??? Dies ist SpielwechselPython, 41 Bytes
Völlig neu in dieser Golfsache, Kritik erwünscht!
quelle
l**l
was ich getan habe?l*l
eigentlich ist das kürzer alsl**2
.Jolf,
181510 BytesVielen Dank an Cᴏɴᴏʀ O'Bʀɪᴇɴ für das Speichern von 3 Bytes und den Hinweis auf das Mapping
Probieren Sie es hier aus!
quelle
CJam , 9 Bytes
Die Eingaben sind in umgekehrter Reihenfolge durch ein Zeilenumbruch oder ein Leerzeichen getrennt.
Probieren Sie es online!
quelle
PHP,
5854 BytesHierbei wird nur die Summenformel verwendet, um den Wert anzuzeigen, nachdem überprüft wurde, ob der Multiplikator 1 ist (was in der Formel NAN zurückgibt).
quelle
Mathematica, 22 Bytes
Erstellt einen Bereich von
{1, 2, ... s^2}
, subtrahiert 1 darüber, um ihn zu erstellen{0, 1, ..., s^2-1}
. Dann erhebe jedes zur Macht desm
Bildens{m^0, m^1, ..., m^(s^2-1)}
und gib die Summe davon zurück.Alternativ kann Mathematica die explizite Formel verwenden, indem es das Limit verwendet. Dies erfordert 29 Bytes.
quelle
Tr[#^Range[#2^2]/#]&
PARI / GP , 25 Bytes
Länger aber schneller (35 Bytes):
Süß (30 Bytes):
quelle
C #, 56 Bytes
quelle
256, 1
?(Math.Pow(1, 256 * 256) - 1) / --1
= 0/0.Lua,
5447 BytesFühren Sie aus der Befehlszeile mit der Board-Seitenlänge als erstem Argument und dem Multiplikator als zweitem aus.
Vielen Dank an user6245072 für das Speichern von 6 Bytes und Katenkyo für das Speichern einer zusätzlichen 1.
Ursprüngliche 54-Byte-Version:
quelle
l,m=...r=0 for i=0,l^2 do r=r+m^i end print(r)
c=1 d=1
=> übersprungen werden kanna,b=...c=1g=1 for i=2,a^2 do c=c*b g=g+c end print(g)
. Wenn der Vorschlag von @ user6245072 funktioniert, können Sie ein Byte nach demselben Prinzip speichern =>r=0l,m=...for i=0,l^2 do r=r+m^i end print(r)
r=0
undl,m=...
ist ohnehin obligatorisch, es ändert sich also nicht. Auch die Schleife sollte sein,for i=0,l^2-1
aber das ist meine Schuld lol.𝔼𝕊𝕄𝕚𝕟 11 Zeichen / 14 Bytes
Try it here (Firefox/WebKit Nightly only).
Ja, funktioniert jetzt in WebKit Nightly! Chrome-Support ist der nächste.
Erläuterung
quelle
RETURN , 32 Bytes
Try it here.
Anonymes Lambda, das das Ergebnis auf Stack2 verlässt. Verwendungszweck:
Erläuterung
quelle