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!
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.