Défi:
Vous obtenez une chaîne contenant uniquement des chiffres. Votre tâche consiste à afficher le nombre minimum de nombres premiers qui doivent être concaténés pour former la chaîne. Si cela est impossible, sortez 0
.
Cas de test:
Entrée -> Sortie:
252 -> 3
235 -> 2
92 -> 0
31149 -> 2
Réponses:
JavaScript (ES6),
123121120 octetsUn octet enregistré grâce à @Neil!
Explication
Prend une seule chaîne en entrée. En raison de la méthode de vérification principale (division d'essai récursive), le plus grand nombre pouvant être vérifié en toute sécurité est
13840
. Certains nombres au-dessus de cela échoueront en raison du dépassement de la taille maximale de la pile d'appels. Cependant, il se termine instantanément pour chaque cas qu'il peut gérer.la source
i?(a=...)&&(b=...)&&a+b:0
pouri&&(a=...)&&(b=...)&&a+b
?MATL ,
2624 octetsCela prend quelques secondes pour certains des cas de test.
Essayez-le en ligne!
Explication
la source
Pyth, 16 octets
Suite de tests
Explication à suivre.
la source
Pyth -
191716 octetsSuite de tests .
la source
Bash + coreutils,
169158149 octetsNous comptons en unaire, produisant une ligne avec un
b
pour chaque nombre premier et une terminaisona
à la fin de la ligne (ce quiprintf
a un jeton avec lequel travailler).Le test de primalité est
factor $n | grep -q ': \w*$'
, qui détermine si le nombre a exactement un facteur premier.Nous partitionnons récursivement l'entrée; si la moitié gauche est première, nous filtrons les résultats de la moitié droite en ajoutant un à chaque valeur. Le retour
a
d'une entrée de longueur nulle met fin à la récursivité.Enfin, nous prenons tous les résultats et trions pour trouver le plus court (en ignorant ceux qui n'ont pas le
a
pour indiquer le succès); il faut en supprimer deux (pour l'inséréa
et pour la nouvelle ligne), puis compter les caractères pour donner le résultat.Les tests
J'ai ajouté
111
aux tests pour montrer qu'il1
est correctement considéré comme non premier.la source
c
générer la finale0
. Pas si enthousiasmé par le copieux stderr, cependant. Vous pouvez utiliser (des versions de) ma réponse comme base pour la vôtre si vous le souhaitez.Mathematica,
142135 octetsComme vous pouvez le voir, Mathematica n'a pas été conçu pour cette tâche. Prend une liste de chiffres.
la source
And@@
place deAllTrue
? Devrait enregistrer 4-5 octets.Flatten[#,1]
=Join@@@#