introduction
En base 10, la constante de Champernowne est définie par la concaténation de représentations de nombres entiers successifs. En base 10: 0.1234567891011121314151617...
et ainsi de suite.
Vous pouvez voir que la première apparition de 15
commence à la 20th
décimale:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
15 = position 20
La première apparition de 45
commence à la 4th
décimale:
Position
0000000001111111111222222222233333333334444444444555555555566666666
1234567890123456789012345678901234567890123456789012345678901234567
^
0.1234567891011121314151617181920212223242526272829303132333435363738...
^^
45 = position 4
Donc, la tâche est facile. Pour un nombre entier non négatif, indiquez la position du nombre entier dans la constante de Champernowne.
Règles
- Vous pouvez fournir une fonction ou un programme
- C'est du code-golf , donc la soumission avec le moins d'octets gagne!
Cas de test
Input: 20
Output: 30
Input: 333
Output: 56
Input: 0
Output: 11 (note that the 0 before the decimal point is ignored)
Input: 2930
Output: 48
0 <= x <= 99
, mais cela devrait théoriquement fonctionner pour des entiers supérieurs à99
.Réponses:
Pyth, 10
Concatène les premiers
input + 10
nombres puis trouve l'index basé sur 0 plus un .. Les dix supplémentaires ne sont nécessaires que pour 0.Suite de tests
la source
2015-12-17 15:01:23Z
ou quelque chose?LabVIEW, 29 primitives LabVIEW
Cela utilise des chaînes pour le moment. Il correspond à l'entrée sous forme de motif et génère le décalage - (longueur de l'entrée -1).
la source
Javascript, 57 octets
Sauvé 1 octet grâce à Conor O'Brien.
la source
y=
partie vers ley=b=" "
; incrémenter un espace, c'est comme incrémenter zéro. (a=prompt(y=b=" ");...
)Haskell, 62 octets
Exemple d'utilisation:
(#(show=<<[1..])).show $ 2930
->48
.Comment ça marche:
a # b
trouve la position dea
dansb
: sia
est le préfixe deb
retour1
, sinon ajouter1
à un appel récursif aveca # tail b
. La fonction pointfree(#(show=<<[1..])).show
attend un argument (non nommé)n
et des appelsshow n # show=<<[1..]
.La fonction
subIndex
ferait également le travail de#
, mais le nécessaireimport Data.List.Utils
ne paye pas.la source
.show
Ruby, 28 ans
Inclut un 0 au début afin que les correspondances soient indexées sur 1, mais utilise
\B
pour exiger que la correspondance ne soit pas au début de la chaîne.la source
Japt, 11 octets
C'était à l'origine de battre Pyth, mais apparemment cela n'a pas fonctionné pour l'entrée
0
.Essayez-le en ligne!
Comment ça marche
la source
q
symbole dans le code et non le symbole de négation logique¬
?¬
est un raccourci pourq
(c'estq
avec un espace suivant). Cela semble être souvent un point de confusion et j'ai donc aligné la version la plus courte avec la version complète.Lua, 54 octets
Remarque:
Actuellement, ce programme imprime à la fois la première occurrence du premier caractère de la chaîne et le point où elle se termine. Si cela n'est pas autorisé, cela coûtera quelques octets supplémentaires.Je voudrais demander un bonus car mon programme imprime à la fois la première et la dernière position du numéro saisi.la source
MATL , 22 octets
Prenez input (
i
), transformez le vecteur 1 en entrée + 10 (10+:
), convertit le vecteur en chaîne (Ys
) et supprimez les espaces, ce qui est douloureux, (t' '=~)
). Ensuite, convertissez l’entrée en chaîne (Ys
), recherchez où se trouve la chaîne d’entrée dans la chaîne de nombres (Xf
) et prenez le premier emplacement (1)
). Lest
'etw
' manipulent la pile (dupliquer et échanger, respectivement).la source
PowerShell,
3944 octets[Edit: mon hypothèse ne tient pas, la construction d'un tableau de 1-0 ne trouve pas 0 à la place 11. Au lieu de cela, construisez à partir de 1-x + 10 pour gérer 0 aussi, maintenant 44 octets]
Vous trouverez toujours x lors de la création d'une chaîne de la constante de Champernowne au dernier point lorsque vous ajoutez x à la fin. Ainsi, un tableau de 1-x aura toujours la réponse. La question devient "cela se produit-il plus tôt que cela?" . Ce code
génère une plage de nombres, la convertit en chaîne et recherche le paramètre à l'intérieur de celle-ci. Etant donné que PowerShell est un shell orienté objet, le paramètre est en fait un
[int]
type. Par conséquent, si vous souhaitez enregistrer deux caractères avec.IndexOf($i)
, rechercher dans la chaîne un entier et ne rien trouver. C'est pourquoi j'utilise l'interpolation de chaîne"$i"
.la source
.IndexOf()
apparemment une préférence opérationnelle plus élevée qu'un unaire-join
forçant les parens et les citations. : - /MATL (version 1.0.1), 22 octets
Exemple
Explication
MATL (version 20.8.0), 16 octets (défi du langage postdate)
Merci à @ Giuseppe pour cette version du programme (légèrement modifiée)
Essayez-le en ligne!
Explication
la source
G
contient l’entrée (et l’entrée implicite), j’imagine que cette réponse peut être raccourcie considérablement etYs
qu’il est nécessaire de changer deV
toute façon; Je suis venu avec10+:"@Vv]!GVXf1)
16 octets.Ys
nécessaire de passer àV
la version la plus récente de l'interprète. Je suis toujours impressionné par l'amélioration de la langue!PowerShell,
54 à50 octetsMerci à TessellatingHeckler pour l’idée d’échanger la
while
boucle contre unefor
boucle.S'exécute via une
for
boucle. Comme avec les autres langages, la première instruction de la boucle peut construire des variables et des assignations. Elle commence donc par$c
égale à la chaîne vide, de''
sorte que nous ayons une indexation zéro de la chaîne alignée avec l'indexation décimale du défi. Nous sommes alors dans une boucle qui vérifie si$c
a l'entier d'entrée ($args
) quelque part dans (ie, étant donné que le.IndexOf()
rendement-1
si la chaîne ne se trouve pas, nous ajoutons un à qui (0
) et pas ($TRUE
) de continuer la boucle). Si ce n'est pas trouvé, nous ajoutons notre$i
variable de compteur pré-incrémentée , puis revérifions la chaîne. Une fois la chaîne trouvée,.IndexOf()
retournera une valeur positive, dont le non sera$FALSE
, sortir de la boucle. Enfin, nous produisons l'index avec$x
.la source
for
boucle classique ...for($c='.';($x=$c.IndexOf("$args"))-lt0;$c+=++$i){}$x
et enregistrez 1 caractère. Comme la plupart des appels IndexOf renverront -1, ajoutez-en un et booléen! lancez-le, pour un test plus court. Mais vous avez besoin de parens pour le faire. Vide $ c et +1 dans les parens existants, bonus c'est plus court.for($c='';!($x=$c.IndexOf("$args")+1);$c+=++$i){}$x
51 octets. (mais j'ai posté mon 39 octets comme réponse car c'est une approche complètement différente: P).$c
concaténation dans la boucle pour jouer au golfe un point-virgule. Maintenant à 50 ans.JavaScript (ES6), 40 octets
Utilise la fonction récursive
f
pour éviter les boucles. La méthode de recherche fonctionne de la même manière,indexOf
sauf qu’elle prend RegExp en tant que paramètre, ce qui n’est pas pertinent pour ce défi.L'ajout d'un
" "
pour len=0
cas (zéro est faux dans JS) oblige le+
à effectuer une concaténation de chaîne au lieu d'un ajout et à corriger l'indexation à zéro.la source
Python 3, 54.
la source
CJam, 11 octets
Testez-le ici.
Je trouve la position de
N
dans la chaîne01234...N
pour prendre en compte l'indexation basée sur 1. Enfin, je répare0
en appliquant un OU logique avec 11.la source
Sérieusement, 13 octets
Prend l'entrée sous forme d'entier. Contient des éléments non imprimables, donc hexdump:
Essayez-le en ligne
Explication:
la source
, 13 caractères / 22 octets
Try it here (Firefox only).
la source
k4, 21 octets
Même chose que tout le monde: concaténer
[1..10+x]
tant que chaînes, rechercher x en tant que chaîne, convertir en index sur une base, renvoyer le premier résultat.Vérification des cas de test:
la source
Mathematica, 101 octets
la source
Haskell ,
827355 octetsMigré du duplicata
Essayez-le en ligne!
Explication
Nous définissons d'abord
!
.x!b
tronqueb
à la première apparition dex
. Pour ce faire, il vérifie sib
commence avecx
(or$zipWith(==)x b
) en retournantx
si c'est le cas et en déplaçant un autre dans la chaîne. Ensuite, nous définissons notre fonction principale. Notre fonction principale est une fonction sans point qui prend la constante (show=<<[1..]
) et la tronque à la première apparition dex
. Cela prendx
comme une chaîne.la source
05AB1E , 6 octets (non concurrents)
Essayez-le en ligne!
la source
JavaScript (ES6),
503938 bytesTry it
la source
Jelly, 5 bytes
Try it online!
la source
Stax, 6 bytes
Run and debug it
la source
Perl 6, 26 bytes
Try it online!
Finds the index of the element in the concatenated range from 0 to that element, or
11
if the number is a zerola source
Perl 5, 42 + 1 (-p) = 43 bytes
Try it online!
Explanation
la source
Perl 6/Rakudo 29 bytes
Defines a function with one input ($^a). Call thus:
Appending
$
, an anonymous variable, incrementing$++
until the input$^a
is found, and then counting the number of chars before it. Requiring at least 1 char before it.+
in the regex usefully excludes the 0->0 casela source
J, 30 Bytes
Could probably be golfed down a bit more, specifically in concatenating the first n+10 integers.
Explanation:
Note that this is 0-indexed. Examples:
la source
Husk, 6 bytes
Try it online!
la source