J'ai besoin de préparer des chiffres en carton pour afficher un certain nombre ( exemple ). Je ne sais pas à l'avance quel numéro je dois afficher - la seule chose que je sais, c'est qu'il n'est pas supérieur à n
.
Combien de chiffres en carton dois-je préparer?
Exemple: n = 50
Pour afficher un nombre compris entre 0 et 50, j'ai besoin des chiffres suivants:
- Un zéro pour afficher le chiffre 0 ou tout autre chiffre rond
- Deux copies des chiffres 1, 2, 3 et 4 pour afficher les numéros correspondants
- Une copie des chiffres 5, 6, 7 et 8, dans le cas où ils apparaissent comme chiffre le moins significatif dans le nombre
- Le chiffre 9 n'est jamais nécessaire, car je peux utiliser le chiffre inversé 6 à la place
Total: 13 chiffres
Cas de test (chaque ligne est un cas de test au format "entrée; sortie")
0 1 1 2 9 9 11 10 50 13 99 17 100 18 135 19 531 22 1000 27 8192 34 32767 38
Réponses:
Gelée , 9 octets
Essayez-le en ligne!
Comment ça marche
la source
0rDŒr€ẎQṪÞẎḟ9ĠẎL
.Python 2 , 49 octets
Essayez-le en ligne!
Une formule arithmétique maladroite. Supposons que cela
n
rentre dans unint
afin queL
ne soit pas ajouté.Merci à Neil d'avoir économisé 5 octets en soulignant que les 9 inutilisés peuvent être gérés en faisant à la
n*9+8
place den*9+9
, de sorte que, par exemple,999*9+8=8999
ne passe pas à 9000.la source
33333
nécessite cinq 3 mais22222
n'en requiert que quatre.n*9
[0] est tentant, mais échoue pour les nombres commençant par1
et moins111..
.(n*9+8)/10**len(`n`)
pour éviter d'utilisermin
.Haskell ,
11711410895898887848263 octets6 octets économisés grâce à Laikoni
146 octets économisés grâce à nimiEssayez-le en ligne!
la source
maximum[a,b]
est identique àmax a b
. 2.) Les listes de compréhension sont souvent plus courtes quefilter
:max d$sum[1|x<-show a,x==b]
g
par une fonction Pointfree littérale:sum.(#[-9..])
.length[x|x<-...]
estsum[1|x<-...]
.g=
(mais peut-être que vous voulez l'inclure dans la version TIO).Mathematica, 49 octets
la source
JavaScript (ES6),
6053 octetsUne sorte de solution récursive hacky. Cela génère les nombres qui nécessitent l'ajout d'un chiffre:
puis compte combien sont inférieurs à l'entrée. Par un miracle heureux, la suppression du chiffre supprime en
9
fait plusieurs octets de la fonction, car la séquence peut alors être générée comme telle (en supposant une division entière):Nous devons prendre en compte le fait que les nombres inférieurs à 10 nécessitent toujours le zéro, mais c'est aussi simple que d'ajouter
n > 9 ? 0 : 1
au résultat.Cas de test
Afficher l'extrait de code
la source
n>9^1
peut probablement êtren<10
true
une entrée0
, donc j'hésite un peu à le faire.0>9
est faux,false^1
est 1 ...?true
à la place du nombre1
.Lot, 67 octets
Dans la formulation standard de ce problème, vous devez séparer
6
et9
chiffres, mais vous n'êtes pas obligé d'afficher0
. À mesure que la valeur maximalen
requise augmente, le nombre de chiffres requis augmente chaque fois que vous atteignez un chiffre (car vous n'en avez pas assez) et chaque fois que vous atteignez une puissance de10
(lorsque vous avez besoin d'un zéro supplémentaire). Au total, chaque puissance de10
nécessite10
plus de chiffres que la précédente, ce qui peut être calculé commefloor(log10(n))*10
. Pour des valeursn
comprises entre 10 puissances, le nombre de chiffres intermédiaires peut alors être calculé commefloor(n/((10**floor(log10(n))*10-1)/9))
ou alternativementfloor(n*9/(10**floor(log10(n))*10-1))
.Je calcule
floor(log10(n))
au moyen de la boucle sur la première ligne. Chaque fois,%2
gagne un extra0
et%3
gagne un extra-~
. Cela signifie que10%2
c'est10*10**floor(log10(n))
et%30
estfloor(log10(n))
.La duplication de
6
et9
a deux effets: d'une part, il n'y a que des9
chiffres requis pour chaque puissance de10
, et d'autre part la détection de repdigit doit ignorer les9
repdigits. Heureusement, comme ils sont inférieurs à une puissance de 10, cela peut être obtenu en ajustant la formule pour aboutirfloor((n*9+8)/(10**floor(log10(n))*10))
.Gérer le zéro est assez simple: cela nécessite juste un chiffre supplémentaire quand
n<10
, c.-à-dfloor(log10(n))==0
.la source
Mathematica, 83 octets
la source
Python 3 , 75 octets
Essayez-le en ligne!
la source
PHP , 60 octets
Essayez-le en ligne!
la source