Entnommen aus: OEIS- A071816
Ihre Aufgabe bei einer Obergrenze von n
ist es, die Anzahl der Lösungen zu finden, die die Gleichung erfüllen:
a+b+c = x+y+z, where 0 <= a,b,c,x,y,z < n
Die Sequenz beginnt wie auf der OEIS-Seite beschrieben und wie folgt (1-indiziert):
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
Denn n = 1
es gibt nur eine Lösung:(0,0,0,0,0,0)
Für n = 2
gibt es 20 bestellte Lösungen (a,b,c,x,y,z)
für 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).
Ich & O.
- Die Eingabe ist eine einzelne Ganzzahl
n
. - Die Ausgabe ist eine einzelne Ganzzahl / Zeichenfolge
f(n)
, wobeif(...)
die Funktion ist oben. - Die Indizierung ist genau wie beschrieben, keine andere Indizierung ist akzeptabel.
Dies ist Code-Golf , niedrigste Byte-Anzahl gewinnt.
Antworten:
Gelee ,
96 BytesO (n 6 ) -Lösung.
Probieren Sie es online aus!
Wie es funktioniert
quelle
O(n^6)
obwohl zu sehen : P.Mathematica 17 oder 76 Bytes
Mit der Formel:
(3 Bytes pro @GregMartin und @ngenisis gespeichert)
Anstatt die Formel zu verwenden, berechne ich hier buchstäblich alle Lösungen und zähle sie.
quelle
11/20
durch.55
eine Einsparung von zwei Byte ersetzen .Haskell , 48 Bytes
Ich habe die Formel vor dem Schreiben nicht bemerkt, daher ist sie definitiv nicht die kürzeste (oder schnellste) allgemeine Methode, aber ich fand sie hübsch.
Probieren Sie es online aus!
f n
generiert alle Listen mit 6 Elementen aus[1..n]
und zählt dann diejenigen, deren alternierende Summe 0 ist. Verwendet die Tatsache, dassa+b+c==d+e+f
die gleiche ist wiea-(d-(b-(e-(c-f))))==0
und dass es auch keine Rolle spielt, ob wir allen Zahlen eine 1 hinzufügen.quelle
MATL , 12 Bytes
Probieren Sie es online aus!
Erläuterung
Ich konnte die Chance nicht verpassen, die Faltung wieder zu nutzen!
Dies nutzt die folgende Charakterisierung von OEIS:
und natürlich ist Polynommultiplikation Faltung.
quelle
Gelee , 9 Bytes
Nicht so kurz wie bei @ Dennis, aber die Eingabe dauert weniger als 20 Sekunden
100
.Probieren Sie es online aus!
Wie es funktioniert
quelle
Pyth,
1312 BytesEin Byte dank Leaky Nun gespeichert.
Erläuterung
quelle
/LJJ
anstelle von verwendenm/JdJ
.Python 3 , 28 Bytes
Probieren Sie es online aus!
quelle
TI-BASIC, 19 Bytes
Wertet die OEIS-Formel aus.
quelle
Prompt x
= 2 Bytes?Oase , 17 Bytes
Probieren Sie es online aus!
Oasis ist eine stapelbasierte Sprache, die für wiederkehrende Sequenzen optimiert ist. Die Rekursionsformel wäre jedoch für diesen Fall zu lang.
quelle
Brachylog , 17 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
ᶜ
sollte automatisch mit kommen≜
ᶜ
alleine laufen , es ist ein Metapredikat.JavaScript, 24 Bytes
Verwendet die Formel von der OEIS-Seite.
Probieren Sie es online aus!
quelle
x=>x**5*.55+x**3/4+x/5
Oktave ,
252321 BytesProbieren Sie es online aus!
Verwendet die Formel aus dem OEIS-Eintrag. Dank fəˈnɛtɪk wurden
zweivier Bytes gespeichert, indem die Formel neu angeordnet und.55
stattdessen11/20
verwendet wurde.quelle
Python 2.7,
1091059996 BytesVielen Dank an ETHproductions und Dennis für das Speichern einiger Bytes:
quelle
sum(sum(x[:3])==sum(x[3:])for x ...)
wäre noch kürzer. Außerdemfrom itertools import*
speichert ein Byte.for
. Außerdem müssen Funktionen nicht standardmäßig benannt werden, damit Sie sie entfernen könnenh=
.Mathematica, 52 Bytes
Kelly Lowders Implementierung der OEIS-Formel ist viel kürzer, aber dies berechnet die Zahlen direkt:
Nun, es zählt tatsächlich die Anzahl der Lösungen mit
1 <= a,b,c,x,y,z <= n
. Dies ist dieselbe Zahl, da das Hinzufügen von 1 zu allen Variablen die Gleichheit nicht ändert.Erläuterung:
Range@#~Tuples~6
Erstellt alle Listen mit sechs Ganzzahlen zwischen 1 und n,#~Partition~3&/@
teilt jede Liste in zwei Listen mit der Länge 3 auf,Tr/@
summiert diese Unterlisten undCount[...,{n_,n_}]
zählt, wie viele Paare dieselbe Summe haben. Ich habe sehr viel Glück mit der Rangordnung zwischenf @
,f /@
und~f~
!quelle
Oktave , 41 Bytes
Probieren Sie es online aus!
Ähnlich wie meine MATL-Antwort , berechnet jedoch die Faltung über eine diskrete Fourier-Transformation (
fft
) mit einer ausreichenden Anzahl von Punkten (n^2
).~~(1:n)
wird als kürzere Version von verwendetones(1,n)
.round
ist wegen Gleitkommafehlern notwendig.quelle
CJam , 17 Bytes
Die Eingabe von
11
Timeouts auf TIO12
und höher hat nicht genügend Speicher.Probieren Sie es online aus!
Erläuterung
quelle
Clojure, 79 Bytes
Tonnenweise Wiederholungen im Code, bei einer größeren Anzahl von Variablen kann ein Makro kürzer sein.
quelle