Inspiré par ce CMC
Étant donné un entier positif supérieur à 0, effectuez l'opération suivante:
- Si les dix chiffres simples (
1234567890
) sont dans le nombre au moins une fois, sortez le compte et quittez le programme - Sinon, doublez le nombre et répétez, en augmentant le nombre.
Le décompte commence à 0 et correspond au nombre de fois où l'entrée a été doublée. Par exemple, si l'entrée était 617283945, elle devrait être doublée une fois car 1234567890 contient les 10 chiffres.
C'est un code-golf donc le code le plus court l'emporte. L'entrée peut être considérée comme une chaîne, si vous le souhaitez.
Cas de test
input => output
617283945 => 1
2 => 67
66833 => 44
1234567890 => 0
100 => 51
42 => 55
n
il en existe dek
tels quink
sont pandigital? J'adorerais voir une preuve.Réponses:
Python 3 , 39 octets
Essayez-le en ligne!
Sorties
False
pour0
.la source
J ,
2423 octetsEssayez-le en ligne!
Explication
la source
05AB1E ,
1110 octets-1 octet grâce à scottinet
Essayez-le en ligne! ou comme suite de tests
la source
use x
mais c'est 10 aussi ... Belle réponse. La penséex
s'en débarrasseraitD
, mais c'est la même idée.Perl 6 ,
3128 octets (27 caractères)-3 octets grâce à @Joshua
Essayez-le en ligne!
Explication: Toujours la même construction pour générer de manière récursive des listes. Le premier élément est le nombre donné (
$_
), chaque élément suivant est 2 fois le précédent (2×*
- nous utilisons ×, car, bien que le caractère à 2 octets, c'est toujours 1 octet moins cher que2 * *
), et nous le faisons jusqu'à ce que la condition de fin de*.comb.unique>9
soit remplie , c'est-à-dire lorsqu'il y a plus de 9 caractères uniques dans le nombre. (Techniquement, nous décomposons la chaîne en une liste de caractères avec.comb
, la forçons à un ensemble avec.Set
(bien sûr, les ensembles ne contiennent chaque élément qu'une seule fois) et comparons avec 9, ce qui force l'ensemble dans un contexte numérique, ce qui donne à son tour son nombre d'éléments.)Enfin, nous soustrayons 1 de cette liste. Encore une fois, la liste est forcée dans un contexte numérique, donc ce que nous retournons est 1 de moins que la longueur de cette liste.
la source
.Set
au lieu de.unique
pour enregistrer 3 octets.JavaScript (ES6) + big.js ,
84747370 octetsMerci @ ConorO'Brien d' avoir économisé 10 octets en suggérant big.js au lieu de bignumber.js
Merci à @Rick Hitchcock pour -1 octet
Merci à @Shaggy pour -3 octets
Prend l'entrée comme chaîne; prend en charge jusqu'à environ 2 69 en raison de la conversion automatique de la notation scientifique se produisant au-delà de ce point.
Extrait de test
Plage infinie,
106888784 octetsEn utilisant l'option config pour désactiver efficacement la notation scientifique lors de la conversion de nombres en chaînes, nous pouvons avoir une plage presque infinie.
Afficher l'extrait de code
la source
BigNumber
bit en utilisant big.js ?new
est facultatif dans celui-ci. Mettra à jour, merci!f=n=>[..."0123456789"].every(d=>RegExp(d).test(c=Big(n)))?0:1+f(c.mul(2))
."4"+2**29
: tio.run/##BcGxDkAwEADQb2GQO41LNBZDbX7AKgbhKkSu0jZSX1/…Gelée ,
12, 11 octetsEssayez-le en ligne!
Explication:
la source
Haskell , 46 octets
Essayez-le en ligne!
la source
J , 43 octets
Essayez-le en ligne!
Définit une fonction anonyme. Collecte les résultats de manière tout à fait sous-optimale. Découvrez la réponse supérieure des miles ici!
la source
^:a:
:1#@}.+:^:(10>#@~.@":)^:a:
Haskell, 44 octets
la source
Clojure,
1158982 octets-26 octets en utilisant simplement une chaîne pour représenter la liste des caractères (duh, rétrospectivement), et en passant de l'utilisation de la récursivité à
loop
, ce qui m'a permis de faire quelques optimisations.-7 octets en supprimant l'appel à
bigint
. Apparemment, nous devons seulement gérer les entrées qui ne provoqueront pas de débordement.Prégolfé:
la source
every?
au lieu deempty? (remove …
:#(loop[n % c 0](if(every?(set(str n))"1234567890")c(recur(* 2 n)(inc c)))))
Rétine , 85 octets
Essayez-le en ligne!Le lien inclut des cas de test. Légèrement optimisé pour l'exécution. Explication:
Dupliquez le numéro saisi.
Dédupliquez les chiffres de la première copie.
S'il reste 10 chiffres, supprimez les deux numéros, sinon supprimez simplement la première copie. Notez que la suppression des deux nombres entraîne l'interruption du reste de la boucle.
Placer un
#
avant les gros chiffres.Doublez chaque chiffre.
Ajoutez les portages.
Traitez avec un transport de premier plan.
Ajouter un
@
boucle et jusqu'à ce que les 10 chiffres soient trouvés.Imprimez le nombre de
@
s ajoutés.la source
APL (Dyalog Unicode) , 19 + 2 = 21 octets
Essayez-le en ligne!
Ceci est un dyadique
Dfn
( d IRECT f unctio n ), en prenant 0 comme argument de gauche et le nombre entier en tant que droit. Étant donné que l'entrée est censée être uniquement l'entier, j'ai ajouté 2 octets pour l'argument0∘
au nombre d'octets.f←
n'est pas inclus dans le nombre d'octets, car ce n'est pas nécessaire . Cela facilite simplement la construction des cas de test.Comment ça fonctionne:
Les en-têtes: j'ai supprimé ceux du nombre d'octets après avoir discuté dans la salle APL, car la fonction fait ce qu'elle est censée faire et les résultats ne sont incorrects qu'en raison des paramètres par défaut du REPL d'APL.
⎕FR←1287
Définit la représentation F loat R sur une décimale de 128 bits (7 est le code pour la décimale dans le REPL d'APL).⎕PP←34
Définit le P Rint P recision à 34 chiffres. Les deux sont nécessaires, car la représentation par défaut d'APL pour les grands nombres les transforme en notation scientifique (par exemple, 3.14159265359E15), ce qui gâche énormément le code.la source
Java 8,
1321108774 octets-57 octets grâce à @ OlivierGrégoire .
Explication:
Essayez-le ici. (Remarque: le cas de test pour
2
est désactivé car il devrait s'arrêter à 2 68 , mais la taille delong
est limitée à 2 63 -1.)Les anciens 132 octets répondent en utilisant une
String
entrée et une expression régulière:Essayez-le ici. (Remarque: le cas de test pour
2
est désactivé car il provoque une StackOverflowException en raison d'un peu trop de récursivité.)Le regex total pour vérifier si la chaîne contient les 9 chiffres devient
^(?=.*0)(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)(?=.*6)(?=.*7)(?=.*8)(?=.*9).*$
, ce qui utilise une anticipation positive pour la chaîne entière.la source
2^68
comme premier numéro pandigital, mais les longs en Java sont limités à2^63-1
.reduce
\ o /(?:.*?(\d)(?!.*\1)){10}
Husk , 10 octets
Essayez-le en ligne!
Explication
la source
Mathematica,
5948474638 octets-9 octets grâce à Jenny_mathy.
Essayez-le en ligne en utilisant les mathématiques!
la source
a
fonctionnera mais «a» ne fonctionnera pas.Print/@f/@{617283945,2,66833,1234567890,100,42}
R , 74 octets
Essayez-le en ligne! Notez que R donnera la mauvaise réponse à
f(2)
raison des limitations de la façon dont le langage stocke les grands entiers.Explication: Pour le test de pandigitalité, l'entrée est contrainte à un vecteur de caractères en se joignant à une chaîne vide, puis divisée en chiffres individuels. Nous vérifions ensuite si tous les 0: 9 sont présents dans le vecteur résultant; sinon, nous incrémentons le compteur, doublons l'entrée et répétons.
Le compteur utilise F qui s'initialise comme FAUX. Pour vous assurer qu'il est contraint en numérique, nous multiplions par un avant de revenir.
la source
c(x,"")
est une astuceel(strsplit(...))
PowerShell ,
7069 octetsEssayez-le en ligne!
(Près de deux fois plus longtemps que la réponse Python: - \)
Prend des données
$args[0]
, les transforme en un[bigint]
, les enregistre$n
. Entre dans unefor
boucle. À chaque itération, nous vérifions si l'$n
ombre convertie en chaîne, puis enchar
tableau, lorsqu'elleGroup-Object
est ensemble, a un.count
-l
ess than oue
qual to9
. Autrement dit, la seule façon qu'il soit égal à 10 est si au moins un chiffre de chaque nombre1234567890
est présent. Si oui, nous sortons de la boucle. Sinon, nous$n*=2
continuons. À chaque itération à l'intérieur de la boucle, nous incrémentons simplement$i
. Lorsque nous quittons la boucle, nous sortons simplement$i
.Notez que pour l' entrée comme
1234567890
où chaque chiffre est déjà pris en compte, cela ne de sortie, ce qui est une valeur Falsey dans PowerShell, et équivalent à0
quand il est lancé comme[int]
. Si ce n'est pas OK, nous pouvons simplement mettre un+
devant la sortie$i
pour le convertir explicitement en entier.Un octet enregistré grâce à Roland Heath.
la source
Pyth , 11 octets
Suite de tests .
Premier nombre naturel
T
oùinput << T
répond à l'exigence.la source
Perl 5 , 52 + 1 (-p) = 53 octets
Essayez-le en ligne!
la source
Perl, 43 + 1 octets
Utilisation du
-p
drapeau. Cela s'appuie sur la solution fournie par Xcali ci-dessus.la source
Swift 4 , 111 octets
Remarque: ne fonctionnera pas pour x = 2, en raison d'un débordement.
Explication - L'entrée x est d'abord transtypée en chaîne. Ensuite, Set () supprime les caractères répétitifs. Ensuite, il est trié pour correspondre au résultat. S'il ne correspond pas, x est double et le compteur est incrémenté.
la source
Rubis,
46453938 octetsEssayez-le en ligne!
Mises à jour:
def f n;
au lieu dedef f(n);
.…[9]
au lieu de….size==10
la source
Japt , 15 octets
Essayez-le
Explication
Saisie implicite d'entier
U
.Créez un tableau d'entiers de
0
à99
et passez chacun par une fonction oùX
est l'élément courant.U
multiplié par 2 élevé à la puissance deX
.Récupère l'index du premier élément qui retourne vrai lorsqu'il est passé par la fonction suivante.
Divisez-vous en un tableau de chiffres et supprimez les doublons.
Obtenez la longueur du tableau et vérifiez l'égalité avec
10
.Alternative, 15 octets
Essayez-le
Explication
Saisie implicite d'entier
U
.En commençant par
0
, renvoyez le premier nombre qui retourne vrai lorsqu'il est passé par la fonction suivante, avecX
étant le nombre actuel.Comme ci-dessus, multipliez
U
par 2 la puissance deX
.Fractionner en un tableau de chiffres, supprimer les doublons et rejoindre à un entier.
Convertissez en chaîne, obtenez la longueur et reconvertissez en entier.
Vérifiez l'égalité avec
10
.la source
QBIC , 48 octets, nc
Cela devrait fonctionner, en théorie. Cependant, en pratique, cela échoue parce que QBasic convertit les nombres à dix chiffres (au moins nécessaires pour obtenir tous les chiffres) en notation scientifique ... Je l'ai marqué comme non concurrent à cause de cela.
Explication
la source
GNU dc, 61 octets
L'entrée est copiée du haut de la pile (qui doit être autrement vide); la sortie est poussée en haut de la pile.
Explication
Nous utilisons la variable tableau
a
, stockant un 1 dansa[d]
si le chiffred
est présent, sinon retombant à 0 là. Nous utilisons l'extension GNU~
pour obtenir le quotient et le reste dans une seule commande.En prime, cela fonctionnera dans des bases de nombres arbitraires (pas seulement décimales): définissez simplement le radix d'entrée comme requis (la constante
11
dans la définition def
sera lue en utilisant cette base de nombres, elle est donc automatiquement correcte).Tester
la source
REXX, 57 octets
la source
q / kdb + , 33 octets
Solution:
Exemples:
Explication:
Tous les octets sont dans l'égalité, pourraient être en mesure de jouer un peu plus loin. Utilise l'
scan
adverbe de q :Remarques:
Si nous passons à l'
k
invite, nous pouvons avoir une solution de 25 octets. Convertit le nombre en une liste de caractères:la source