Comme nous le savons tous, ce sont des tortues tout le long . Mais est-ce aussi l'amorçage vers le bas?
Un nombre est considéré comme un "premier tortue" s'il remplit les conditions suivantes:
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.
Par exemple, 239
est un "tortue-prime", car il peut être réduit à 23
alors l'un 2
ou l' autre 3
, les deux étant premiers. Il peut également être réduit jusque- 29
là 2
. 151
n'est pas un nombre premier de tortue, car il se réduit à 15
(pas premier), 51
(pas premier), ou11
. 11
est premier, mais ne peut que se réduire à 1
, ce qui n'est pas le cas.
Etant donné un entier positif, déterminez s'il s'agit d'un "premier tortue". Votre sortie peut être sous n'importe quelle forme tant qu'elle donne la même sortie pour toute valeur véridique ou falsey.
Cas de test:
input -> output
1 -> false
2 -> true
17 -> true
19 -> false
239 -> true
389 -> false
Notation
C'est le code-golf , donc la réponse la plus courte dans chaque langue gagne!
Réponses:
Gelée , 16 octets
Essayez-le en ligne!
Comment ça marche
la source
Haskell ,
1041029998979591 octetsEssayez-le en ligne!
Explication
Nous avons d'abord mis en place un test de primalité
Cela utilise le théorème de Wilson pour déterminer la primauté d'une entrée.
Nous déclarons ensuite un cas de base, qui affirmera que la chaîne vide est véridique.
Maintenant, nous définissons la fonction réelle
Nous utilisons un agent de modèle pour se lier
zip[0..]x
ày
, parce que nous devons l' utiliser deux fois plus tard. Nous affirmons ensuite que la réponse est[[snd b|b<-y,b/=a]|a<-y]
est tous les nombres qui sont un chiffre supprimé de notre entrée. Nous affirmons donc qu'au moins un de ces chiffres est vraif
. Afin de garantir que les nombres composites sont faux, nous ajoutonsprime$read x
. Si le nombre n'est pas premier, la liste devient vide et laany
liste vide est fausse.la source
any f[[
↦or[f[
[b|(i,b)<-y,i/=a]|(a,_)<-y
↦[snd b|b<-y,b/=a]|a<-y
R,
1241221201139593106105 octetsQui évalue à la fonction:
Solution récursive. Prend la saisie sous forme de liste de chiffres.
Dispose de 2 déclarations logiques:
Le
x
premier est -il concaténé?L'un des éléments suivants
TRUE
:La longueur est-elle
x
différente de zéro? Il s'agit de notre dernière condition de résiliation.Est-ce
f
TRUE
pour un sous-ensemble dex
?La première déclaration garantit que nous continuons à travailler avec des nombres premiers uniquement. Le second fait la récursivité réelle.
Enregistré deux octets grâce à @Giuseppe.
J'ai dû annuler certains de mes golfs à cause d'un bug, où je testais par accident une définition de fonction précédente.
R, 98 octets, non concurrent
Comme je l'ai mentionné dans les commentaires, j'ai fait un package . Étant donné que le défi est antérieur à cela, ce n'est pas une compétition, mais je voulais le présenter un peu. Ce n'est pas grand-chose pour l'instant, mais nous y arriverons.
C()
est la première fonction du package et prend en charge la concaténation des chiffres en numérique.la source
sum(x*10^(((l<-sum(x|1))-1):0))
) sont tellement verbeuses. J'envisage vraiment de créer un forfait golf pourR
.sapply
... Je pense aussi que vous voudrez peut-être le fairef=pryr::f(...)
ou bien vous devrez l'utiliserf
dans lesapply
.g
ou quelque chose?el(strsplit(x,''))
économiserait une tonne d'octets.Gelée , 19 octets
Essayez-le en ligne!
Comment ça marche
Récursion sans ftw de cas de base.
la source
Gelée ,
2726 octetsUn lien monadique prenant et retournant des entiers (
1
pour tortue0
sinon).Essayez-le en ligne!
Comment?
la source
Rubis ,
7257 + 8 =8065 octetsUtilise le
-rprime
drapeau. -15 octets d'histocrate!Essayez-le en ligne!
la source
&&!!
par juste&
, il convertira le résultat en booléen. Votre appel récursif peut également être un peu plus court en utilisant des perlismes:!n.scan(/./){f[$`+$']&&break}}
n.scan
astuce fonctionne comme elle le fait?.scan.find
, mais nous pouvons sortir manuellement de la boucle en cas de succès. Si nous cassons,scan
renvoienil
, sinon il retourne la chaîne qui est toujours véridique.Java, 220 octets
Essayez-le en ligne!
Golfé:
Non golfé:
la source
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;}
f
vient-il?>0
pour convertir l'int entier en booléen) qui devrait économiser 2 * 2 + 1 * 4 = 8 octets dans la version de Kevin Cruijssen.05AB1E ,
2827 octetsSolution itérative.
Essayez-le en ligne!
Explication
la source
Python 2 ,
132124119 119 octets-8 Merci à @WheatWizard
-5 Merci à @LeakyNun
Essayez-le en ligne!
Je ne peux penser à rien pour l'affiner sans un vérificateur principal intégré. Prend le nombre sous forme de chaîne (j'ai supposé cela étant donné que l'OP autorisait une liste de chiffres, mais sinon 14 octets pour un autre lambda), et calcule récursivement la tortuosité de chaque numéro "torturé".
la source
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))
sauve un octet. Quelqu'un avec de meilleures compétences de golf en Python pourrait probablement raccourcir cela.C #, 355 octets
Essayez-le en ligne!
Mon premier golf de code, donc j'espère que je l'ai bien fait. Je ne pouvais pas penser à un moyen de le rendre encore plus petit (à part utiliser int au lieu de BigInteger, mais je l'ai fait pour que cela fonctionne pour tous les cas de test fournis). Quoi qu'il en soit, voici le même format correctement:
la source
Perl 6 , 65 octets
Essayez-le en ligne!
la source
PHP , 164 octets
Essayez-le en ligne!
Commence par tester la primauté du nombre, puis passe en revue les chiffres sous forme de tableau, en ressortant chacun et en réunissant les autres et en les alimentant de manière récursive à travers la fonction. Chaque lien vers le bas effectue un OU logique avec les chemins inférieurs, ne retournant que
true
s'il existe au moins un chemin de tous les nombres premiers.la source
Javascript 167 octets
Explication
Afficher l'extrait de code
la source