Définition
Il y a une rangée infinie de nombres naturels concaténés (entiers positifs, commençant par 1):
1234567891011121314151617181920212223...
Défi
- Programme d'écriture dans n'importe quelle langue, qui accepte le numéro de position comme entrée et génère un chiffre à partir de cette position dans la ligne définie ci-dessus.
- Le numéro de position est un entier positif de taille arbitraire. C'est la première position est 1, ce qui donne le chiffre de sortie «1»
- L'entrée est soit décimale (par exemple 13498573249827349823740000191), soit en notation électronique (par exemple 1.2e789) correspondant à un entier positif.
- Le programme doit se terminer dans un délai raisonnable (10 secondes sur PC / Mac moderne), étant donné un très grand index en entrée (par exemple 1e123456 - c'est-à-dire 1 avec 123456 zéros). Ainsi, une simple boucle d'itération n'est pas acceptable.
- Le programme doit se terminer avec une erreur en 1 s, s'il reçoit une entrée non valide. Par exemple. 1.23e (invalide) ou 1.23e1 (égal à 12,3 - pas un entier)
- Il est correct d'utiliser la bibliothèque publique BigNum pour analyser / stocker des nombres et effectuer des opérations mathématiques simples sur eux (+ - * / exp). Aucune pénalité d'octet appliquée.
- Le code le plus court gagne.
TL; DR
- Entrée: entier bignum
- Sortie: chiffre à cette position sur une ligne infinie
123456789101112131415...
Quelques cas de test d'acceptation
en notation "Input: Output". Tous devraient passer.
- 1: 1
- 999: 9
- 10000000: 7
- 1e7: 7 (identique à la ligne ci-dessus)
- 13498573249827349823740000191: 6
- 1.1e10001: 5
- 1e23456: 5
- 1.23456e123456: 4
- 1e1000000: 0
- 1.23e: erreur (syntaxe non valide)
- 0: erreur (hors limites)
- 1.23e1: erreur (pas un entier)
Prime!
Numéro de position du chiffre de sortie à l'intérieur du numéro et numéro de sortie lui-même. Par exemple:
13498573249827349823740000191: 6 24 504062383738461516105596714
- Ce chiffre de « 6 » à la position 24 du nombre « 50406238373846151610559 6 714 »
1e1000000: 0 61111 1000006111141666819445...933335777790000
- Chiffre «0» à la position 61111 du numéro long à 999995 chiffres que je ne vais pas inclure ici.
Si vous remplissez la tâche bonus, multipliez la taille de votre code par 0,75
Crédit
Cette tâche a été donnée lors d'un des rassemblements devclub.eu en 2012, sans grande exigence de nombre. Par conséquent, la plupart des réponses soumises étaient des boucles triviales.
S'amuser!
code-golf
number
sequence
number-theory
metalim
la source
la source
1.23456e123456
punissent arbitrairement les langues qui ne peuvent pas traiter ces valeurs de manière native et les obligent à effectuer un traitement de chaîne tangentiel au défi.Réponses:
CJam , 78 octets
Le programme est de 104 octets de long et se qualifie pour le bonus.
La nouvelle ligne est purement cosmétique. La première ligne analyse l'entrée, la seconde génère la sortie.
Essayez-le en ligne!
Idée
Pour tout entier positif k , il existe 9 × 10 k-1 entiers positifs d'exactement k chiffres (sans compter les zéros de tête). Ainsi, si nous les concaténons tous, nous obtenons un entier de 9 × n × 10 k-1 .
Maintenant, concaténer tous les entiers de n chiffres ou moins donne un entier de
chiffres.
Pour une entrée q donnée , nous essayons de déterminer le n le plus élevé de sorte que l'expression ci-dessus soit plus petite que q . Nous fixons n: = ⌈log 10 q⌉-1 , puis n: = ⌈log 10 q⌉-2 , etc. jusqu'à ce que l'expression souhaitée devienne inférieure à q , soustrayons l'expression résultante de q (donnant r ) et sauvegardons la dernière valeur de n dans l .
r spécifie maintenant l'indice dans la concaténation de tous les entiers positifs de l + 1 chiffres, ce qui signifie que la sortie souhaitée est le r% (l + 1) ème chiffre du r / (l + 1) ème entier de l + 1 chiffres.
Code (analyse d'entrée)
Code (génération de sortie)
la source
CJam, 75 * 0,75 = 56,25
C'est assez rapide, une itération par chiffre du nombre qui contient la position souhaitée. Je suis sûr qu'il peut être joué beaucoup plus au golf, c'est assez brut comme ça.
Donnez la position en entrée, la sortie est:
Essayez-le en ligne .
la source
1.23e1
. Il comporte cependant des erreurs,1.23456e123456
car l'entrée ne peut pas être représentée par un double. De plus, le dernier cas de test prend 3 minutes.