Défi
Pour un nombre entier en entrée n > 0
, indiquez le nombre de nombres premiers ( autres que n
, si n
lui-même est premier) pouvant être générés en modifiant un chiffre dans le développement décimal de n (sans modifier le nombre de chiffres).
Exemples
Par exemple, n = 2
. En modifiant un chiffre dans le développement décimal de 2
, nous pouvons obtenir trois nombres premiers supplémentaires 3, 5, 7
, donc a(n) = 3
.
Pour un autre exemple, n = 13
. En modifiant un chiffre, vous pouvez obtenir des nombres premiers 11, 17, 19, 23, 43, 53, 73, 83
, donc a(13) = 8
.
Pour un dernier exemple, n = 20
. En modifiant un chiffre, vous pouvez obtenir des nombres premiers 23, 29
, donc a(20) = 2
.
Séquence
Voici les 20 premiers termes pour vous aider à démarrer. C'est OEIS A048853 .
4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 7, 4, 8, 4, 4, 4, 7, 4, 7, 2
Règles
- On peut supposer que l’entrée et la sortie s’intègrent dans le type entier natif de votre langue.
- L'entrée et la sortie peuvent être données dans n'importe quel format pratique .
- Ignorer les zéros non significatifs (par exemple, ce
03
n'est pas un nombre premier dans cette formulation). - Un programme complet ou une fonction sont acceptables. Si une fonction est utilisée, vous pouvez renvoyer la sortie plutôt que de l’imprimer.
- Si possible, veuillez inclure un lien vers un environnement de test en ligne afin que d'autres personnes puissent tester votre code!
- Les échappatoires standard sont interdites.
- Il s’agit du code-golf, donc toutes les règles de golf habituelles s’appliquent et le code le plus court (en octets) gagne.
la source
n
pour lequel la sortie est0
. Je pense que c'estn = 200
. Je pense aussi qu'ils viennent en grappes:200,202,204,206,208
,320,322,...,328
,510,...,518
,620,...628
,840,...,848
, etc.Réponses:
05AB1E ,
17161411 octetsExplication:
Essayez-le en ligne! ou jusqu'à 100 .
la source
.L
? Sérieusement?.L
?!?!L
.<
pour sauvegarder un octet. Même si le filtre ne supprime pas le fichier100
/1000
/10000
/ etc.Python 2 ,
146, 136, 127, 121, 121,118, octetsMerci à @ Mr.Xcoder pour ses suggestions
Explication:
Générer des nombres de longueur égale à la longueur de saisie, en sautant d’abord (1,10,100,1000, ...)
Vérifiez que le nombre généré diffère de l'entrée par un seul chiffre
Vérifier pour prime
Compter
Essayez-le en ligne!
la source
r=range
-le puisque vous l'utilisez plusieurs fois ...?143
? Parce que je voisrange(1,10)
, cela exclut0
et103
est primordial0
der(0,10)
por(10)
suffit.lambda I,r=range:
Javascript (ES6) 148 octets
Prend l'entrée sous forme de chaîne et retourne sous forme de nombre
Exemple d'extrait de code:
la source
Jelly ,
211815 octets3 octets grâce à Dennis.
Essayez-le en ligne! ou Vérifiez tous les cas de test .
la source
æḟ⁵æR×⁵$DnDS€ċ1
enregistre quelques octets.Mathematica, 105 octets
Essayez-le en ligne!
Function
qui attend un entier positif#
. Définitf
égal à la fonctionIntegerDigits
qui renvoie la liste des chiffres de son entrée. Nous prenons leRange
deg
à10g
(inclus), oùg=10^Length@f@#/10
est la plus grande puissance10
inférieure ou égale à l'entrée#
, puisCount
len
tel quePrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#
.PrimeQ@n
vérifie sin
est premier,MatchQ[f@n-f@#,{x=0...,_,x}]
vérifie si la différence entre la liste des chiffres den
et#
est du formulaire{0..., _, 0...}
etn!=#
s'assure quen
et#
sontUnequal
.la source
JavaScript (ES6),
153142139 octetsAccepte les entrées en tant que chaîne. Comportement non défini pour une entrée non valide, même s'il doit se terminer sans erreur sur toutes les chaînes auxquelles je peux penser. Pas nécessairement avant la chaleur-mort de l'univers, surtout pour les longues ficelles.
Démo
Améliorations
Vous avez enregistré 11 octets en reformulant les
reduce()
appels enmap()
appels et en copiant implicitement le tableaua
dans le paramètre de fonction, au lieu de dans le contexte de l'splice()
appel.Sauvegardé de 3 octets grâce à la suggestion de @Neil de convertir
[...Array(10)]
en[...''+1e9]
.Code non miné
Explication
La fonction utilise un niveau
map()
à deux niveaux pour additionner le nombre de permutations satisfaisant au test de primalité, emprunté et modifié à partir de cette réponse .(Réponse originale)
Ainsi, par exemple, pour calculer la somme d'un tableau, vous devez passer un
initialValue
of0
et renvoyer unaggregate
égal àaccumulator + currentValue
. En modifiant légèrement cette approche, nous calculons plutôt le nombre de permutations satisfaisant le test de primalité:C’est essentiellement l’intérieur
reduce()
, qui répète toutes les permutations dudigitArray
en changeant chacunedecimal
en un spécifiquepermutatedDigit
. Nous avons ensuite besoin d’un extérieurreduce()
pour itérer tous les possiblespermutatedDigit
avec lesquels remplacer chacundecimal
, ce qui est juste0-9
.Anomalies dans la mise en œuvre
[...''+1e9].map((u,j)=>...
était le chemin le plus court @Neil pourrait penser à itérer un argument0
par9
. Dans ce cas, il serait préférable de le faire avecu
, mais celau
n’est pas utile pour chaque élément du tableau.i+j
dans la condition ternaire vérifie qu'il0
n'y a pas de permutation possible du premier chiffre, conformément à la spécification de défi.j!=c
garantit que l'originaln
n'est pas candidat pour passer le test de primalité.(a.splice(i,1,j),a.join``)
C'est un peu le bordel.splice()
remplace le chiffre atdecimal == i
par lepermutatedDigit == j
, mais puisquesplice()
renvoie les éléments supprimés (dans ce cas, serait égal à[a[i]]
) au lieu du tableau modifié, nous devons utiliser l'opérateur virgule pour transmettre le tableau modifiéa
au test de primalité, mais pas avantjoin()
. dans une chaîne numérique.Enfin, le
eval()
s'agit de sauvegarder un octet puisque, comparé à l'approche plus canonique, il est plus court:La référence au premier test
p
est initialisée dans un argument inutilisé de l'map()
appel.la source
[...''+1e9]
est plus courte.Python 2 , 134 octets
Essayez-le en ligne!
Plus élégante, version plus longue:
L'entrée est prise comme une chaîne.
Explication (ancienne version)
lambda x,r=range,l=len:
- Définit un lambda avec un paramètre Stringx
et deux paramètres constantsr=range
etl=len
.sum(1...)
- Obtenez la longueur, ce qui économise 1 octetlen([...])
.for f in r(10**~-l(x),10**l(x))
- Génère absolument tous les nombres avec le même ordre de grandeur que l'entrée (attendre pour0
). Par exemple, une entrée de3
, aboutirait à[1, 2, 3, 4, 5, 6, 7, 8, 9]
.sum(1for t in r(l(x))if`f`[t]==x[t])==~-l(x)and f>1
- Vérifie si le nombre actuel est exactement à 1 chiffre de l'entrée et s'il est supérieur à 1.all(f%v for v in r(2,f))
- Vérifie si le nombre actuel est premier.la source
sum(1for..ifBOOL)
poursum(BOOLfor)
économiser quelques octets</joke>
)JavaScript (ES6), 137 octets
Adapte mon autre réponse à une soumission de programme complet à l'aide des méthodes de l'API Web
prompt()
etalert()
.la source
Bean , 126 octets
Essayez-le en ligne!
Une adaptation de ma soumission JavaScript du programme complet .
Équivalent JavaScript
Explication
a
est implicitement initialisé en tant que première ligne d'entrée sous forme de chaîne et la dernière instructions
est implicitement générée, ce qui contient la somme des permutations principales.la source
Husk , 32 octets
Essayez-le en ligne!
Ungolfed / Explication
la source
Japt ,
2823 octets-5 octets grâce à @ETHproductions.
Prend une chaîne en entrée.
Essayez-le en ligne!
la source
¬x@AÇ|Y©+UhYZsÃâ kUn)èj
?PHP ,
151147141140136134129128 128 octets-6 octets grâce à @Einacio; -1 octet grâce à @Titus
Essayez-le en ligne!
Formaté, avec commentaires:
Pour être aussi bref que possible, j'ai:
$f = $t = 1
;++
incrément dans le cadre d'une autre expression$f += $i % $t++ == 0
(l'incrément est exécuté après l'opération de module et n'affecte donc pas le résultat);if
instruction pour un incrément conditionnel, ils ont utilisé le fait que boolean true lorsqu'il est converti en entier devient 1, en utilisant$c += $f == 2;
plutôt queif ($f == 2) $c++;
.la source
levenshtein
. Bonne idée!$i%$t++<1
est plus court que$i%$t++==0
.Perl 6 , 83 octets
Essayez-le en ligne!
la source
X~
au lieu demap
? 81 octetsPHP, 100 + 1 octets
Exécuter en pipe
-nR
ou essayer en ligne .panne
la source
Java 8,
201194 octetsExplication:
Essayez ici.
new Integer(s.substring(0,i)+j+(i<l?s.substring(i+1):"")
aboutira à ces entiers:Pour
0-9
:1, 2, 3, 4, 5, 6, 7, 8, 9
.Pour
10
:10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.Pour
11
:11, 21, 31, 41, 51, 61, 71, 81, 91, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.etc.
la source
JavaScript (ES7), 118 octets
Prend l'entrée sous forme de chaîne.
Essayez-le en ligne!
Commenté
la source
Ruby avec
-rprime
, 101 octets-rprime
importe le module Prime dans Ruby. Obtenez tous les nombres premiers jusqu'àEssayez-le en ligne!
la source