Vous devrez générer le plus petit nombre premier avec des n
chiffres, et il ne contiendra que les chiffres spécifiés dans la liste k
.
Exemples:
Contribution:
4
1 2
Pour cela, vous devez générer le plus petit nombre premier avec des 4
chiffres, et ce nombre premier doit contenir uniquement les chiffres 1
et 2
.
Sortie:
2111
Contribution:
10
0 4 7
Sortie:
4000000007
Contribution:
6
5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5
Sortie:
115151
Vous pouvez garantir que l'entrée sera toujours dans le format que vous spécifiez, et vous pouvez faire n'importe quoi si vous obtenez une entrée non valide (telle que l'entrée étant un seul chiffre n
, sans k
.)
Si une telle solution à une entrée n'existe pas, votre programme est autorisé à effectuer l'une des opérations suivantes:
- Impression
banana
- Lancer une erreur
- Courez pour toujours
- Rien d'autre
Puisqu'il s'agit de code-golf , essayez de viser le code le plus court.
L'entrée peut être dans n'importe quel format que vous spécifiez. Par exemple, si vous souhaitez que votre entrée soit semblable à l'une des suivantes, c'est très bien.
4
[1, 2]
[1,2]4
1,2
4
4 12
Vous pouvez soit écrire un programme ou une fonction, et il doit soit retourner la valeur correcte, soit l'imprimer.
Les espaces sont autorisés partout.
Ce défi inspiré par A036229 .
Réponses:
Brachylog (2), 8 octets
Essayez-le en ligne!
Très lent sur les problèmes qui ont beaucoup de chiffres possibles, ou qui contiennent un 0 dans l'ensemble des chiffres possibles (cela fonctionne dans ce cas; c'est juste que c'est tellement plus lent que TIO expire à moins que le problème ne soit très simple). Comme d'habitude pour Brachylog, c'est une fonction, pas un programme complet.
L'entrée est prise dans le format
[ndigits,[list of digits]]
, par exemple[10,[[0,4,7]]]
.Explication
Vu du point de vue purement déclaratif, cela dit "trouver un nombre premier, avec le nombre de chiffres donné, où tous les chiffres sont l'un des chiffres donnés". Afin de trouver le plus petit nombre, nous utilisons des conseils d'ordre d'évaluation afin de garantir que l'ordre dans lequel nous testons les nombres est du plus petit au plus grand; dans ce cas,
ᵐ
rend les décisions près du début de la liste moins sujettes à changement que les décisions près de la fin (c'est son ordre naturel, qui se trouve être le même que lexicographique et donc l'ordre numérique sur les entiers), et a donc{o∋}ᵐ
deux ordres d'évaluation ", faites d'abord varier les derniers chiffres" (dans l'ᵐ
ordre naturel de l ') comme indice le plus important, et "vérifiez les petits chiffres avant les plus gros" (d'o
avant le∋
, qui agit comme un indice dans ce contexte) comme bris d'égalité.{o∋}ᵐ
peut être écrit comme équivalentoᵐ∋ᵐ
pour enregistrer un octet.la source
Paquet Bash + BSD-Games, 28 octets
Entrée donnée sur la ligne de commande sous la forme n suivie de k sous la forme d'une liste non délimitée de chiffres.
Essayez-le en ligne.
la source
Python 2 , 66 octets
Essayez-le en ligne!
Prend l'entrée comme
f(3,{'9','3','8'})
.Python n'a pas intégré de nombres premiers, donc la fonction les génère en utilisant le théorème de Wilson pour vérifier chaque valeur potentielle
k
à son tour comme étant premier.L'inégalité chaînée
10**~-n<p%k*k<s>=set(`k`)
combine trois conditions surk
:10**~-n<k
:k
contient au moins desn
chiffres. Nous n'avons pas besoin de vérifier exactement car si nous atteignons plus de chiffres, il ne doit pas y avoir de solutionp%k>0
:k
est premier, via la condition du théorème de Wilson avecp=(n-1)!^2
. Puisquep%k
est 0 ou 1, cela peut être combiné avec la condition précédente comme10**~-n<p%k*k
s>=set(`k`)
: Tous les chiffresk
sont dans l'ensembles
. Cela peut être épissé car Python 2 considère les ensembles comme plus grands que les nombres.Si le courant
k
ne satisfait pas à tous ces critères, la fonction revient surk+1
, en ajoutant 1 à la sortie résultante. Puisque la sortie se termine avecTrue
ce qui est égal à1
etk
commence à1
, la sortie estk
. Ce suivi parallèle desk
temps sortk
directement du succès.la source
JavaScript (ES7), 100 octets
Prend l'entrée comme nombre de chiffres
n
et chaîne de chiffres autoriséss
dans la syntaxe de curry(n)(s)
. Renvoieundefined
si aucune solution n'est trouvée.Fonctionne assez rapidement jusqu'à 6 chiffres, peut fonctionner pour 7 et certainement trop lent - et gourmand en mémoire - au-delà.
Tester
Afficher l'extrait de code
la source
n=>s=>[...Array(10**n).keys()].find(i=>eval(`/[${s}]{${n}}/`).test(i)&(p=j=>i%--j?p(j):j==1)(i))
Gelée , 12 octets
Prend un ensemble et un entier comme arguments de ligne de commande. Imprime 0 si aucune solution n'existe.
Essayez-le en ligne!
Comment ça marche
la source
Pyke,
1816 octetsEssayez-le ici!
S'exécute pour toujours si aucune valeur n'a été trouvée
la source
Mathematica, 64 octets
Fonction pure où le premier argument est la liste (triée) des chiffres autorisés et le deuxième argument est la longueur autorisée.
Tuples@##
calcule toutes les listes des chiffres autorisés de la longueur autorisée, puis nous trouvons celuiFirstCase
qui correspond dex:{f_,___}
telle sorte que le premier chiffref
ne l'est pas0
et que l'entiery=FromDigits@x
est premier et le remplace pary
.la source
/;
test pour sélectionner un tuple mais aussi:>
pour le convertir au format de sortie souhaité. (Je vois dans la documentation que cela est autorisé, mais seulement après avoir lu cette réponse!) Vous devez spécifier que votre fonction nécessite le tri des chiffres autorisés: elle donne la mauvaise réponse3331
au lieu d'3313
être appelée avec[{3,1},4]
.Select[FromDigits/@Tuples[Sort@#,#2],PrimeQ][[1]]&@@#&
?0
et cela@@#&
semble redondant.Brachylog , 15 octets
Essayez-le en ligne!
C'est assez lent.
Explication
la source
JavaScript (ES6), 86 octets
Prend des entrées via la syntaxe de curry, par exemple,
(4)('12')
À exécuter en mode strict (pour l' optimisation des appels de queue [TCO] ). Si votre environnement ne prend pas en charge le TCO, il en résultera une erreur de dépassement de pile pour les nombres premiers supérieurs à la pile des environnements.
Pour les entrées non valides, il s'exécutera pour toujours.
Remarque:
chrome://flags/#enable-javascript-harmony
et activer cet indicateur pour exécuter l'extrait ci-dessus avec le support TCO.la source
F=i=>(P=j=>i%--j?P(j):1==j)(i)&&...
MATL, 17 octets
Cette fonction accepte deux entrées, un entier spécifiant le nombre de chiffres et un tableau de caractères indiquant les valeurs possibles. Dans le cas d'aucun nombre premier, une erreur est affichée.
Essayez-le en ligne!
Explication
la source
Pyth -
1312 octetsSuite de tests .
la source
Sauge, 62 octets
Prend la saisie du formulaire:
f( 4 , {'1','2'} )
la source
Perl 6 , 43 octets
Fonctionne indéfiniment si aucune solution n'existe.
la source
05AB1E , 17 octets
Essayez-le en ligne!
la source
05AB1E ,
221918 octets (-1 @Riley)Essayez-le en ligne!
la source
,
à la fin.Perl5, 77 octets
Courez comme ceci:
la source
Rubis,
7776 octetsFormat d'entrée: un nombre et une chaîne.
Exemple:
la source
Perl 6 , 68 octets
Essayez-le
Résultats
Nil
si aucun tel nombre premier ne peut être trouvé.Étendu:
la source
Python 2 + primefac ,
9185 octetsEssayez-le en ligne
L'entrée est comme
4,{'1','2'}
.la source
1,{'1'}
n'est pas une entrée valide (car 1 n'est pas premier), vous pouvez donc y faire ce que vous voulez.PHP, 82 octets
Prend un nombre et une chaîne de chiffres à partir des arguments de la ligne de commande. Courez avec
-nr
.panne
la source
Java 7,
139141 octets+2 octets en prenant en charge les nombres supérieurs à 32 bits (changé
int
enlong
)Format d'entrée: un entier (ie
4
) et une chaîne (ie"12"
)Explication:
Code de test:
Essayez-le ici.
REMARQUE: le deuxième scénario de test est désactivé car il est en boucle pendant très longtemps.
Sortie:
la source