Intro
Das Umkehren und Hinzufügen ist so einfach wie es sich anhört. Nehmen Sie es n
und fügen Sie es in umgekehrter Reihenfolge zu den Ziffern hinzu. (zB 234 + 432 = 666).
Wenn Sie diesen Vorgang wiederholt anwenden, treffen einige Zahlen irgendwann auf eine Primzahl und andere erreichen nie eine Primzahl.
Beispiel
Ich habe derzeit
11431 rep.
11431 is not prime
11431 + 13411 = 24842 which is not prime
24842 + 24842 = 49684 which is not prime
49684 + 48694 = 98378 which is not prime
98378 + 87389 = 185767 which is prime!
Diese Zahl trifft eine Primzahl
Im Gegensatz dazu wird ein Vielfaches von 3 niemals eine Primzahl treffen, da alle Vielfachen von 3 eine Ziffernsumme haben, die ein Vielfaches von 3 ist und umgekehrt. Wenn Sie also umkehren und ein Vielfaches von 3 addieren, erhalten Sie immer ein neues Vielfaches von 3 und somit niemals eine Primzahl.
Aufgabe
Nehmen Sie eine positive ganze Zahl n
und bestimmen Sie, ob das wiederholte Umkehren und Addieren jemals zu einer Primzahl führen wird. Gib einen wahrheitsgemäßen oder falschen Wert aus. Entweder erreicht Truthy for einen Primwert, und Truthy is not oder umgekehrt sind beide akzeptabel.
Es wird davon ausgegangen, dass Primzahlen in Iterationen von Null eine Primzahl erreichen.
Dies ist Code-Golf, also versuchen Sie, Ihren Code so kurz wie möglich zu halten.
Testfälle
Wahr für erreicht eine Primzahl Falsch für erreicht nie eine Primzahl
11 -> True
11431 -> True
13201 -> True
13360 -> True
13450 -> True
1019410 -> True
1019510 -> True
22 -> False
1431 -> False
15621 -> False
14641 -> False
Hinweis
Während ich diese Herausforderung schrieb, entdeckte ich einen coolen Trick, der dieses Problem viel einfacher macht. Es ist nicht unmöglich ohne diesen Trick und es ist auch nicht trivial damit, aber es hilft. Es hat mir sehr viel Spaß gemacht, dies zu entdecken und ich werde es unten in einem Spoiler belassen.
Durch wiederholtes Umkehren und Hinzufügen wird immer ein Vielfaches von 11 in 6 Iterationen oder weniger erreicht. Wenn es keine Primzahl erreicht, bevor es ein Vielfaches von 11 erreicht, wird es niemals eine Primzahl erreichen.
quelle
Antworten:
Ruby ,
84 79 7774 BytesProbieren Sie es online!
quelle
Haskell , 65 Bytes
f
nimmt einInteger
und gibt ein zurückBool
.True
bedeutet, es erreicht eine Blütezeit.Probieren Sie es online!
Leider bedeutet der kurze, aber ineffiziente Primetest, dass die Testfälle des OP
True
nicht11
zu groß werden, um abgeschlossen zu werden. Aber zum Beispiel ist 11432 einTrue
Fall, der zu Ende geht.Sie können auch dieses 3 Bytes längere versuchen, für das TIO alle
True
Testfälle beenden kann :Probieren Sie es online!
Die Primetests beider Versionen brechen mit 1 ab, aber es kommt trotzdem vor, dass es zu einer Primzahl (2) kommt.
Ansonsten ist mir etwa dasselbe aufgefallen wie GB im Spoiler der Ruby-Einreichung:
quelle
Python 2,
123110 Bytes13 Bytes gespart dank Ørjan Johansen und Wheat Wizard !
Gibt 1 zurück, wenn eine Primzahl erreicht wird, und 0, wenn dies nicht der Fall ist. Probieren Sie es online!
quelle
Python 2 ,
787069 BytesProbieren Sie es online!
Erläuterung
Dieses Programm beruht auf der Tatsache, dass
Dieses Programm ist ein rekursives Lambda mit logischen Vergleichsschaltungen. Zuerst wird geprüft, ob n eine Primzahl ist.
Wenn dies wahr ist, geben wir wahr zurück.
Wenn es falsch ist, prüfen wir, ob es ein Vielfaches von 11 ist.
Wenn false, geben wir false zurück, andernfalls geben wir das Ergebnis
f
der nächsten Iteration zurückquelle
Jelly , 11 Bytes
Probieren Sie es online!
quelle
S
auch eine seinT
.RD$+$
kann auch sein+RD$$
oderRD+<newline>Ç
(alle trivialen Änderungen)S
weil es weniger Chancen hat, etwas> 1 zu zeigen. Es gibt keinRD
gerechtesṚḌ
und ich entschiedṚḌ$+$
mich dafür, es besser zu organisieren.S
; Ich hätte das überdenken sollenT
, aber das ist hauptsächlich für das Interesse aller anderen.05AB1E ,
1413 BytesBEARBEITEN : 1 Byte gespeichert, da die Eingabe wiederverwendet wird, wenn nicht genügend Elemente auf dem Stapel vorhanden sind
Probieren Sie es online!
Verwendet den Hinweis in der Frage
Wie es funktioniert
quelle
MATLAB,
8881 Bytesquelle
JavaScript (ES6), 73 Byte
Rückgabe
0
odertrue
.Kommentiert
Dies basiert auf der von Wheat Wizard beschriebenen Magic-Spoiler-Formel.
Testfälle
Ich habe die beiden größten Eingaben aus dem Snippet entfernt, da sie einige Sekunden dauern. (Aber sie funktionieren auch.)
Code-Snippet anzeigen
quelle
Mathematica, 45 Bytes
quelle
Microsoft SQL Server,
826786 * Bytes* Ich habe über die IIF-Funktion erinnert, die in Microsoft SQL Server 2012 eingeführt wurde
Überprüfen Sie es online
Je übersichtlicher die Formatierung
quelle
/*true*/
und/*false*/
Kommentare?Gelee , 9 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
PHP 114 Bytes
Mehr lesbare Version:
Probieren Sie es online!
Ich habe dieses Ding zum Zählen von Bytes benutzt.
quelle