Jede positive ganze Zahl kann als die Summe von höchstens drei positiven palindromen ganzen Zahlen in jeder Basis b ≥ 5 ausgedrückt werden. Cilleruelo et al., 2017
Eine positive ganze Zahl ist in einer gegebenen Basis palindromisch , wenn ihre Darstellung in dieser Basis ohne führende Nullen dasselbe rückwärts liest. Im Folgenden wird nur die Basis b = 10 berücksichtigt.
Die Zerlegung als Summe palindromischer Zahlen ist nicht eindeutig . Beispielsweise 5
kann direkt als 5
oder als die Summe von ausgedrückt werden 2, 3
. Ebenso 132
kann als 44, 44, 44
oder als zerlegt werden 121, 11
.
Die Herausforderung
Bei einer positiven Ganzzahl wird die Summe in drei oder weniger positive Ganzzahlen zerlegt, die in Basis 10 palindrom sind.
Zusätzliche Regeln
Der verwendete Algorithmus sollte für beliebig große Eingaben funktionieren. Es ist jedoch akzeptabel, wenn das Programm durch Speicher-, Zeit- oder Datentypbeschränkungen eingeschränkt ist.
Eingabe und Ausgabe können mit jedem vernünftigen Mittel erfolgen . Das Eingabe- und Ausgabeformat ist wie gewohnt flexibel.
Sie können für jede Eingabe eine oder mehrere gültige Dekompositionen erstellen, sofern das Ausgabeformat eindeutig ist.
Programme oder Funktionen sind in jeder Programmiersprache zulässig . Standardlücken sind verboten.
Kürzester Code in Bytes gewinnt.
Beispiele
Da eine Eingabe viele Zerlegungen aufweisen kann, handelt es sich hierbei eher um Beispiele als um Testfälle. Jede Zerlegung wird in einer anderen Zeile angezeigt.
Input -> Output
5 -> 5
2, 3
15 -> 1, 3, 11
9, 6
21 -> 11, 9, 1
7, 7, 7
42 -> 22, 11, 9
2, 7, 33
132 -> 44, 44, 44
121, 11
345 -> 202, 44, 99
2, 343
1022 -> 989, 33
999, 22, 1
9265 -> 9229, 33, 3
8338, 828, 99
quelle
k=1
undk=3
.)k=1
(wie bei der ursprünglichen Nummer bereits ein Palindrom), bedeutet dies, dass Sie davon ausgehen, dass die anderen 2 Zahlen beide 0 sind. Wenn also 0 als eine der Zahlen akzeptabel ist, muss eine beliebige Zahl eingegeben werden mitk=2
würde auch funktionieren,k=3
wenn eine der drei Zahlen 0 ist.Antworten:
Brachylog , 7 Bytes
Probieren Sie es online!
Überraschenderweise nicht so langsam.
Erläuterung
quelle
.
in der Erklärung und dem(.)
? Ich kenne Brachylog nicht wirklich..
ist die Ausgabevariable.~+
,ℕᵐ
Und↔ᵐ
sind Prädikate , die einen linken und rechte Variable haben. Die Verdoppelung dieser.
Werte zeigt lediglich an, dass die Ausgabe direkt an jedem dieser drei Prädikataufrufe beteiligt ist. Das(.)
Letzte ist hier, um anzuzeigen, dass die Ausgabevariable implizit die letzte Variable des Programms ist. Daher ist die zuletzt angegebene Beziehung tatsächlich so.↔ᵐ.
, dass "die umgekehrte Zuordnung der Ausgabe zur Ausgabe führt" .Python 2 ,
8279 BytesProbieren Sie es online!
quelle
Jelly ,
121098 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Python 2 , 117 Bytes
Probieren Sie es online!
Druckt eine Liste mit Listen, von denen jede eine Lösung darstellt. Rod sparte 9 Bytes.
quelle
c
durch Subtraktionen und Verwenden vonfilter
filter(None
traf mich auch, während ich das Abendessen machte, haha.c → n-a-b
is cool :)JavaScript (ES6),
115...8483 BytesGibt immer ein Array mit drei Elementen zurück, bei dem nicht verwendete Einträge mit Nullen aufgefüllt werden.
Testfälle
Code-Snippet anzeigen
quelle
R, 126 Bytes
145 BytesVielen Dank an Giuseppe für das Abschlagen von 19 Bytes
Probieren Sie es online!
Erläuterung
R bietet keine systemeigene Möglichkeit, Zeichenfolgen umzukehren, und viele Standardzeichenfolgenoperationen funktionieren nicht mit Zahlen. Also konvertieren wir zuerst die Reihe positiver Ganzzahlen (plus 0) in Zeichen.
Als nächstes erzeugen wir einen Vektor von 0 und allen Palindromen. Die Umkehrung der Zeichenfolge erfordert das Aufteilen jeder Zahl nach Zeichen, das Umkehren der Reihenfolge des Vektors und das lückenlose Einfügen derselben.
Als nächstes möchte ich alle Dreiergruppen überprüfen (hier sind die Nullen wichtig). Glücklicherweise hat R eine eingebaute Kombinationsfunktion, die eine Matrix zurückgibt, jede Spalte in einer Kombination.
Ich wende die
colSums
Funktion auf die Matrix an und behalte nur die Elemente, die dem angegebenen Ziel entsprechen.Da es schließlich zwei Nullen gibt, wird jeder Satz von zwei positiven Ganzzahlen dupliziert, sodass ich eine eindeutige Funktion für die Spalten verwende.
Die Ausgabe ist eine Matrix, in der jede Spalte eine Reihe positiver pallindromischer Ganzzahlen ist, die sich zum Zielwert addieren. Es ist faul und gibt Nullen zurück, wenn weniger als 3 Elemente verwendet werden.
quelle
Map
, um Palindrome zu erzeugen!Jelly , 14 Bytes
Probieren Sie es online!
Sehr, sehr ineffizient.
quelle
Gelee , 17 Bytes
Probieren Sie es online!
-6 Bytes dank HyperNeutrino.
Ausgänge in alle Richtungen. Die Ausgabe besteht jedoch aus einigen Duplikaten.
quelle
is palindrome
eingebautes lolRŒḂÐfṗ3R¤YS⁼¥Ðf
Ohm v2 ,
131210 BytesProbieren Sie es online!
quelle
Mathematica, 49 Bytes
Probieren Sie es online!
gibt alle Lösungen zurück
-2 ~ MartinEnder ~ Bytes
quelle
#~IntegerPartitions~3~Select~AllTrue@PalindromeQ&
, Ich denke?Haskell ,
908679 Bytes-7 Bytes dank Laikoni!
Probieren Sie es online!
Gibt eine Liste aller Lösungen mit einigen Duplikaten zurück.
quelle
mapM
und deklarierenf=filter
: Online ausprobieren!Java (OpenJDK 8) , 185 Byte
Probieren Sie es online!
Entfernen Sie 1 Byte aus TIO, um die richtige Menge zu erhalten, da die Übermittlung das
;
After-Lambda nicht enthält .quelle
i++<--j
stattdessen vor++i<=--j
Proton , 117 Bytes
Probieren Sie es online!
Gibt eine Lösung aus
quelle
Pyth ,
16 1210 BytesProbieren Sie es hier aus!
Wie es funktioniert
quelle
05AB1E , 17 Bytes
Probieren Sie es online!
Gibt das Ergebnis in drei Listen wie folgt aus:
Palindromic Listen der Länge 1 (die ursprüngliche Nummer IFF ist palindromic).
Palindrome Listen der Länge 2.
Palindrome Listen der Länge 3.
quelle
Axiom 900 Bytes
Testcode
Wenn dieser Code die Zahl X in 1, 2, 3 Palindrom zerlegen muss, was dieser Code tut, wird es in der Nähe von Palindrom N <X versucht und XN in 2 Palindrom zerlegt; Wenn diese Zersetzung von XN erfolgreich ist, werden 3 Palindrome gefunden. wenn es fehlschlägt, versuche es das vorhergehende Palindrom G <N <X und zerlege XG in 2 Palindrome usw. Ungolf Code (aber es ist ein Fehler möglich)
Ergebnisse:
quelle
Java (OpenJDK 8) , 605 Byte
Druckt Dupes, aber sie sind afaik nicht verboten
Probieren Sie es online!
quelle
APL (Dyalog) , 51 Bytes
Probieren Sie es online!
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Perl 6 , 51 Bytes
Probieren Sie es online!
grep { $_ eq .flip }, 1 .. $_
Erzeugt eine Liste aller palindromischen Zahlen von 1 bis zur eingegebenen Zahl.3 Rxx
repliziert diese Liste dreimal.[X]
Reduziert diese Liste der Listen mit dem produktübergreifenden OperatorX
, was zu einer Liste aller 3 Tupel von Palindrominc-Zahlen von 1 bis zur eingegebenen Nummer führt.first *.sum == $_
findet das erste solche 3-Tupel, das zur eingegebenen Zahl summiert.quelle
xx 3
.Python 3 , 106 Bytes
Probieren Sie es online!
In der TIO-Verknüpfung habe ich eine schnellere (aber 1 Byte längere) Version verwendet, die das erste gültige Ergebnis als Generator verwendet, anstatt die gesamte Liste der möglichen Kombinationen zu erstellen und die erste zu verwenden.
quelle
Ruby , 84 Bytes
Erstellt eine Liste aller möglichen Kombinationen von 3 Palindromen von 0 bis n, findet die erste, deren Summe übereinstimmt, und schneidet dann die Nullen ab.
Probieren Sie es online!
quelle
Add ++ , 62 Bytes
Probieren Sie es online!
~ 50 Bytes wurden beim Verfassen einer Erklärung abgelegt. Definiert eine Lambda-Funktion, die eine Liste von Listen mit den Lösungen zurückgibt.
Wie es funktioniert
g
RÞg
g
Der nächste Abschnitt kann in drei weitere Teile unterteilt werden:
[1 2 3 4 ...]
[[1] [2] [3] [4] ... ]
k
Diese Funktion macht im Grunde nichts. Es empfängt zwei Argumente und umschließt sie in einem Array. Der schnelle Tisch
‽
ist hier jedoch der Zaubertrick. Es nimmt zwei Listen und generiert jedes Elementpaar zwischen diesen beiden Listen. Also[1 2 3]
und[4 5 6]
erzeugt[[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4] [3 5] [3 6]]
. Es nimmt dann sein funktionales Argument (in diesem Fallk
) und führt diese Funktion über jedes Paar aus, das in diesem Fall die Paare einfach so zurückgibt, wie sie sind.€bF
l
quelle