Palindromische Hauptprobleme sind ziemlich häufig, aber darum geht es in dieser Frage nicht. Bei dieser Herausforderung muss die Zahl kein Palindrom sein, sondern ihre Primfaktoren.
Aufgabe
Ihr Code muss eine einzelne positive Ganzzahl als Eingabe verwenden. Überprüfen Sie dann, ob eine der Permutationen der Primfaktoren dieser Ganzzahl bei der Verkettung palindrom ist. Wenn ja, geben Sie einen von ihnen aus (die Liste der Faktoren, nicht die verkettete Zeichenfolge). Sonst muss man ausgeben -1
.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes !
Testfälle
11 -> [11]
4 -> [2, 2]
39 -> [3, 13]
6 -> -1
1207 -> [17, 71]
393 -> -1
2352 -> [2, 2, 7, 3, 7, 2, 2]
code-golf
palindrome
factoring
Maltysen
quelle
quelle
-1
zurückgegeben werden? In Perl 6 Ich denke darüber nachNil
,Fail
oder andere undefinierte Werte. Kann der Ausgang auch ein beliebiger Positionswert sein?1
, oder-1
?Antworten:
05AB1E , 7 Bytes
Probieren Sie es online!
Erläuterung:
(Die
.Δ
Standardeinstellung ist -1, daher ist keine zusätzliche Arbeit erforderlich.)quelle
Pyth, 14 Bytes
-2 Bytes von @FryAmTheEggman
Erläuterung:
Vielen Dank an @FryAmTheEggman, dass Sie mich daran erinnert haben
I
. Ich glaube nicht, dass ich es vorher benutzt habe.Testsuite
quelle
jk
ist das gleiche wies`M
CJam - 17 Bytes
Vielen Dank an Martin Büttner, der mir 10 Bytes gespart hat !
Ich schreibe zum ersten Mal in CJam! Erläuterung:
quelle
W%
. Sie können auch=
einen Block verwenden, um die erste palindromische Primfaktorisierung zu erhalten. Das ergibt 18 Bytes:Wrimfe!{s_W%=}=p];
... Sie können noch eins sparen, indem Sie mit einem Fehler abbrechen (da die Fehlerausgabe an STDERR geht):Wrimfe!{s_W%=}=p;
Ruby, 89 + 7 = 96,
102 + 7 = 109+7 für die
-rprime
Flagge.Seufz , einig Ruby - builtins hat eine so lange Namen ... zumindest , dass der Code ziemlich selbsterklärend macht.
Das
flat_map
Bit ist, weilprime_division
ex zurückgibt.[[2, 2], [3, 1]]
für die Eingabe12
(die darstellt ).2231
Vielen Dank an @histocrat für 13 Bytes!
quelle
Julia,
132122 BytesDies ist eine Lambda-Funktion, die eine Ganzzahl akzeptiert und entweder ein Array oder -1 zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Ungolfed:
10 Bytes gespart dank Glen O!
quelle
foldl
stattdessenreduce
(sie tun dasselbe, haben jedochfoldl
eine definierte Reihenfolge und sind ein Byte kürzer). Verwenden Sie stattdessen einen direkten Vergleich mit einer leeren Strukturisempty
(ich bin nicht zu 100% sicher, welcher Typ esx
ist, aber wenn es sich beispielsweise um eine Menge handelt, verwenden Siex==[]
). Und benutze(q=join(p))
und dann einfachq
im Filter, um zwei weitere Bytes zu sparen.x
es sich um ein Array handelt, verwenden Sie es lieber alsfirst(x)
nurx[]
.==[]
und es gab mir Fehler, aber ich habe es jetzt erneut versucht und es funktioniert. Ich muss vorher etwas durcheinander gebracht haben. ¯ \ _ (ツ) _ / ¯ Der einzige Vorschlag, den ich nicht verwenden konnte, ist, mich loszuwerdenfirst
. In diesem Fall muss ich verwenden,first
weilx
es sich um einen Iterator / eine Sammlung / etwas handelt, das nichtgetindex
definiert wurde.Brachylog , 10 Bytes
Probieren Sie es online!
Anfangs hatte ich damit gerechnet, dass das Ausgeben
-1
statt das Versagen zuzulassen mit einem relativ hohen Byte-Aufwand verbunden ist. Da die Ausgabe im Erfolgsfall jedoch nicht verkettet werden kann, kostet es nur die zwei zum Schreiben erforderlichen Bytes_1
(if wir entfernt diejenigen, verlassen würde es die Ausgabe auf ungezwungene säumige0
, und wenn wir die zusätzlich geändert∨
zu∧
, würde das Prädikat nicht statt), weil wir mit der impliziten Ausgabe entweder Weg brechen Vereinigung müssen. (Wäre die Verkettung die Ausgabe für den Erfolg, aber-1
immer noch die Ausgabe für den Fehler, hätten wirḋpc.↔|∧_1
oderḋpc.↔.∨_1
. Im kürzesten Fall, wenn die Ausgabe verkettet ist und das Prädikat fehlschlagen kann, besteht das Ganze nur aus fünf Bytes:ḋpc.↔
. Obwohl die tatsächlichen Faktoren nicht ausgegeben werden, ist dies eher ein Entscheidungsproblem ...)quelle
Haskell, 122 Bytes
Anwendungsbeispiel:
f 39
->[3,13]
.Der offensichtliche Brute-Force-Ansatz. Durchlaufen Sie alle Permutationen der Primfaktoren und suchen Sie nach Palindromen. Wähle den ersten aus. Wenn es keine gibt, ist die Liste leer und der Anhang
[-1]
springt ein.quelle
Perl 6 , 100 Bytes
Verwendung:
Etwa die Hälfte davon (53 Bytes) wird mit dem Primfaktor-Code belegt.
Wenn es eine
prime-factorize
Methode gäbe , könnte das Ganze deutlich kürzer sein.quelle
$!=$_;({+$!/($!/=1+(2...$!%%*))}...{2>$!})
Gelee , 16 Bytes
Länger als erwartet, sowohl in der Byteanzahl als auch in der Zeit, die zum Schreiben benötigt wurde.
Probieren Sie es online!
Erläuterung:
quelle
Japt
-F-1
, 9 BytesVersuch es
quelle
Japt, 18 Bytes
Fast so kurz wie CJam ...
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6),
256244208187 Bytes36 Bytes dank @Neil gespeichert
Definiert eine anonyme Funktion. voranstellen, zB
F=
um es zu benutzen. Bei der Eingabe von 2352 ist es eigentlich recht schnell, es dauert nur ~ 150 Millisekunden, um auf meinem Computer fertig zu werden.quelle
x=>eval("for(a=[],i=2;x>1;x%i?i++:(a.push(i),x/=i));p=[],f=(z,t=[])=>z.length?z.map((u,i)=>f([...z.slice(0,i),...z.slice(i+1)],[...t,u])):(y=t.join``)==[...y].reverse().join``&&p.push(t),f(a),p[0]||-1")
APL (NARS), 169 Zeichen, 338 Byte
G wäre die Funktion, die Permutationen zu finden, und f ist die Funktion dieser Übung; Prüfung:
quelle