Schreiben Sie den kürzesten Code, mit dem Sie das folgende Problem lösen können:
Eingang:
Eine ganze Zahl X mit 2 <= X
undX <= 100
Ausgabe:
Gesamtkombinationen von 2, 3 und 5 (Wiederholung ist erlaubt, Reihenfolge ist wichtig), deren Summe gleich X ist.
Beispiele:
Eingang: 8
Ausgabe : 6
, weil die gültigen Kombinationen sind:
3+5
5+3
2+2+2+2
2+3+3
3+2+3
3+3+2
Eingang: 11
Ausgabe : 16
, weil die gültigen Kombinationen sind
5+3+3
5+2+2+2
3+5+3
3+3+5
3+3+3+2
3+3+2+3
3+2+3+3
3+2+2+2+2
2+5+2+2
2+3+3+3
2+3+2+2+2
2+2+5+2
2+2+3+2+2
2+2+2+5
2+2+2+3+2
2+2+2+2+3
Eingang: 100
Ausgabe : 1127972743581281
, weil die gültigen Kombinationen ... viele sind
Eingabe und Ausgabe können jede vernünftige Form haben. Die niedrigste Byteanzahl in jeder Sprache gewinnt. Es gelten die Standardregeln für Code-Golf .
sum
in ihnen war keine gute Idee, um diese Anfrage zu lösen ...11
von12
nach geändert16
. Natürlich können Sie dies beheben, wenn ich Ihre Absicht missverstanden habeAntworten:
Python 2 ,
4645 Bytesdanke an xnor für -1 byte
Probieren Sie es online aus!
quelle
and/or
funktioniert und speichert ein Byte :f=lambda n:n>0and f(n-2)+f(n-3)+f(n-5)or n==0
.Oase , 9 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
Pyth , 9 Bytes
Probieren Sie es hier aus!
Pyth , 16 Bytes
Probieren Sie es hier aus
Wie?
Erzeugt die Primfaktoren von 30 , nämlich [2, 3, 5] , lässt das Potenzset N- mal wiederholen , entfernt doppelte Elemente, summiert jede Liste und zählt die Vorkommen von N. darin.
Für jede ganzzahlige Parition p wird geprüft, ob p gleich p ∩ primefac (30) ist . Es werden nur diejenigen beibehalten, die diese Bedingung erfüllen, und für jede verbleibende Partition k wird die Liste der Permutationen von k abgerufen, die resultierende Liste um 1 Ebene abgeflacht, dedupliziert und die Länge abgerufen.
quelle
Gelee , 11 Bytes
Probieren Sie es online aus!
Wie es funktioniert
quelle
³
durchH
(dann läuft es um 12 statt 6 ab)Perl, 38 Bytes
Beinhaltet
+1
fürp
Interessant genug
\1
, um das Backtracking zu erzwingen. Normalerweise benutze ich,^
aber der Regex-Optimierer scheint dafür zu intelligent und liefert zu niedrige Ergebnisse. Ich werde wahrscheinlich anfangen müssen, Perl-Versionsnummern anzugeben, wenn ich diesen Trick verwende, da sich das Optimierungsprogramm bei jeder Version ändern kann. Dies wurde am getestetperl 5.26.1
Dies
49
ist effizient und kann tatsächlich verarbeitenX=100
( läuft aber weiterX=1991
)quelle
C 41 Bytes
Probieren Sie es online aus!
quelle
JavaScript (ES6), 32 Byte
Gleicher Algorithmus wie in der Python-Antwort von ovs .
Testfälle
Code-Snippet anzeigen
quelle
R ,
564947 BytesRekursiver Ansatz aus der Antwort von ovs . Giuseppe rasierte die letzten beiden Bytes ab, um 47 zu erreichen.
Probieren Sie es online aus!
quelle
0
(das habe ich vorher nicht bedacht), da unary+
es auch zwingen wirdnumeric
.MATL , 15 Bytes
Sehr ineffizient: Der erforderliche Speicher ist exponentiell.
Probieren Sie es online aus!
Wie es funktioniert
quelle
05AB1E , 10 Bytes
Probieren Sie es online aus!
quelle
Ruby , 41 Bytes
Probieren Sie es online aus!
Dies ist eine rekursive Lösung. Der rekursive Aufruf lautet :
[n-5,n-2,n-3].sum(&f)
.quelle
Pari / GP , 36 Bytes
Probieren Sie es online aus!
Länger, aber effizienter:
Pari / GP , 37 Bytes
Probieren Sie es online aus!
quelle
Gelee , 21 Bytes
Probieren Sie es online aus!
Sicher kann Golf gespielt werden
quelle
Pyth, 12 Bytes
Dies ist fürchterlich ineffizient und erreicht das Speicherlimit für Eingaben über 5.
Probieren Sie es online aus
Erläuterung
quelle
Proton , 32 Bytes
Probieren Sie es online aus!
Gleicher Ansatz wie die Antwort von ovs .
quelle
Wolfram Language (Mathematica) , 43 Bytes
Probieren Sie es online aus!
Erläuterung:
FrobeniusSolve
Berechnet alle Lösungen der ungeordneten Summe2a + 3b + 5c = n
und ermittelt dannMultinomial
, auf wie viele Arten wir diese Summen bestellen können.Oder wir kopieren einfach die Lösung aller anderen für dieselbe Byteanzahl:
quelle
Haskell , 40 Bytes
Probieren Sie es online aus!
quelle