Wie wir alle wissen, ist es Schildkröten den ganzen Weg nach unten . Aber ist es auch ganz unten?
Eine Zahl wird als "Turtle-Prime" betrachtet, wenn sie die folgenden Bedingungen erfüllt:
1) It is prime.
2) It is possible to remove a single digit leaving a prime number.
3) Step 2 can be repeated until left with a single digit prime.
Zum Beispiel 239
ist es eine "Schildkröten-Primzahl", da sie auf 23
eine 2
oder 3
beide Primzahlen reduziert werden kann. Es kann auch auf 29
dann reduziert werden 2
. 151
ist keine Schildkröten-Primzahl, da sie auf 15
(keine Primzahl), 51
(keine Primzahl) oder reduziert wird 11
. 11
ist prim, kann aber nur reduzieren 1
, was nicht ist.
Bestimmen Sie bei einer positiven Ganzzahl, ob es sich um eine "Turtle-Prime" handelt. Ihre Ausgabe kann in beliebiger Form erfolgen, sofern sie für alle wahrheitsgemäßen oder falschen Werte dieselbe Ausgabe liefert.
Testfälle:
input -> output
1 -> false
2 -> true
17 -> true
19 -> false
239 -> true
389 -> false
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in jeder Sprache!
Antworten:
Gelee , 16 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Haskell ,
1041029998979591 BytesProbieren Sie es online!
Erläuterung
Zuerst haben wir einen Primalitätstest eingerichtet
Hierbei wird der Satz von Wilson verwendet , um die Primalität einer Eingabe zu bestimmen.
Wir deklarieren dann einen Basisfall, der besagt, dass die leere Zeichenkette wahr ist.
Nun definieren wir die eigentliche Funktion
Wir verwenden ein Muster Wache zu binden
zip[0..]x
any
, weil wir es später zweimal verwenden müssen. Wir behaupten dann, die Antwort sei[[snd b|b<-y,b/=a]|a<-y]
sind alle Zahlen, die eine Ziffer sind, die aus unserer Eingabe entfernt wurden. Wir behaupten also, dass mindestens eine dieser Zahlen der Wahrheit entsprichtf
. Um sicherzustellen, dass zusammengesetzte Zahlen falsch sind, fügen wir sie hinzuprime$read x
. Wenn die Zahl keine Primzahl ist, wird die Liste leer und dieany
einer leeren Liste ist falsch.quelle
any f[[
↦or[f[
[b|(i,b)<-y,i/=a]|(a,_)<-y
↦[snd b|b<-y,b/=a]|a<-y
R,
1241221201139593106105 BytesWas zur Funktion auswertet:
Rekursive Lösung. Übernimmt die Eingabe als Ziffernliste.
Hat 2 logische Aussagen:
Ist
x
Prime verkettet?Ist eine der folgenden
TRUE
:Ist die Länge
x
ungleich Null? Dies ist unsere endgültige Kündigungsbedingung.Gilt
f
TRUE
für irgendeine Teilmenge vonx
?Die erste Anweisung stellt sicher, dass wir weiterhin nur mit Primzahlen arbeiten. Der zweite führt die eigentliche Rekursion durch.
Zwei Bytes dank @ Giuseppe gespeichert.
Ich musste einige meiner Golfplätze wegen eines Fehlers zurücksetzen, bei dem ich versehentlich mit einer früheren Funktionsdefinition getestet habe.
R, 98 Bytes, nicht konkurrierend
Wie ich in den Kommentaren erwähnt habe, habe ich ein Paket gemacht . Da die Herausforderung älter ist als diese, ist dies nicht konkurrierend, aber ich wollte es ein bisschen zur Schau stellen. Es ist noch nicht viel, aber wir werden es schaffen.
C()
ist die erste Funktion im Paket und kümmert sich um die Verknüpfung von Ziffern zu einer Zahl.quelle
sum(x*10^(((l<-sum(x|1))-1):0))
) sind verdammt wortreich. Ich denke wirklich darüber nach, ein Golfpaket für zu erstellenR
.sapply
... legen. Außerdem denke ich, dass Sie dies tun möchtenf=pryr::f(...)
oder dass Sie esf
in der ... verwenden müssensapply
.g
oder so?el(strsplit(x,''))
würde eine Menge Bytes sparen.Jelly , 19 Bytes
Probieren Sie es online!
Wie es funktioniert
Rekursion ohne Basisfall ftw.
quelle
Jelly ,
2726 BytesEine monadische Verknüpfung, die ganze Zahlen aufnimmt und zurückgibt ( ansonsten
1
für Turtle0
).Probieren Sie es online!
Wie?
quelle
Ruby ,
7257 + 8 =8065 BytesVerwendet die
-rprime
Flagge. -15 Bytes vom Histokraten!Probieren Sie es online!
quelle
&&!!
just ersetzen&
. Es wird das Ergebnis in einen Booleschen Wert umgewandelt. Ihr rekursiver Aufruf kann mit Perlismen auch etwas kürzer werden:!n.scan(/./){f[$`+$']&&break}}
n.scan
Trick so funktioniert, wie er funktioniert?.scan.find
, aber wir können die Schleife bei Erfolg manuell verlassen. Wenn wir brechen, wirdscan
zurückgegebennil
, andernfalls wird die Zeichenfolge zurückgegeben, die immer wahr ist.Java, 220 Bytes
Probieren Sie es online!
Golf gespielt:
Ungolfed:
quelle
boolean t(String n){int l=n.length(),x=new Integer(n),i;for(i=2;i<x;x=x%i++<1?0:x);if(x>1)if(l<2)return 1>0;else for(i=0;i<l;)if(t(n.substring(0,i)+n.substring(++i,l)))return 1>0;return 1<0;}
( 191 Bytes )f
das?>0
, um das int in ein boolesches zu konvertieren), die in Kevin Cruijssens Version 2 * 2 + 1 * 4 = 8 Bytes speichern sollte.05AB1E ,
2827 BytesIterative Lösung.
Probieren Sie es online!
Erläuterung
quelle
Python 2 ,
132124119 Bytes-8 Danke an @WheatWizard
-5 Danke an @LeakyNun
Probieren Sie es online!
Ich kann mir nichts vorstellen, um es zu verbessern, ohne einen eingebauten Prime Checker. Nimmt die Zahl als Zeichenkette (ich nahm an, dass das OP eine Liste von Ziffern zulässt, aber wenn nicht, dann +14 Bytes für ein anderes Lambda) und berechnet rekursiv die Turtleness jeder "geschilderten" Zahl.
quelle
f=lambda n,i=0:n==''or p(int(n))and i<len(n)and(f(n[:i]+n[i+1:])or f(n,i+1))
spart ein Byte. Jemand mit besseren Python-Golffähigkeiten könnte dies wahrscheinlich weiter verkürzen.C #, 355 Bytes
Probieren Sie es online!
Mein erster Code Golf, also hoffe ich, dass ich es gut gemacht habe. Ich konnte mir keine Möglichkeit vorstellen, es noch kleiner zu machen (außer int anstelle von BigInteger zu verwenden, aber ich habe es getan, damit es für alle bereitgestellten Testfälle funktioniert). Wie auch immer, hier ist das gleiche richtig formatiert:
quelle
Perl 6 , 65 Bytes
Probieren Sie es online!
quelle
PHP , 164 Bytes
Probieren Sie es online!
Beginnt damit, die Zahl auf Primalität zu testen, durchläuft dann die Ziffern als Array, springt aus jeder heraus und fügt den Rest wieder zusammen und führt sie rekursiv durch die Funktion. Jede Verknüpfung nach unten führt ein logisches ODER mit den unteren Pfaden durch und kehrt nur zurück,
true
wenn mindestens ein Pfad aller Primzahlen vorhanden ist.quelle
Javascript 167 Bytes
Erläuterung
Code-Snippet anzeigen
quelle