Considérons les puissances entières positives de cinq en décimal. Voici les 25 premiers, alignés à droite:
X 5^X
1 5
2 25
3 125
4 625
5 3125
6 15625
7 78125
8 390625
9 1953125
10 9765625
11 48828125
12 244140625
13 1220703125
14 6103515625
15 30517578125
16 152587890625
17 762939453125
18 3814697265625
19 19073486328125
20 95367431640625
21 476837158203125
22 2384185791015625
23 11920928955078125
24 59604644775390625
25 298023223876953125
Notez que la colonne la plus à droite des puissances est tout 5
. La deuxième colonne à droite est tout 2
. La troisième colonne de droite, lecture de haut en bas, en alternance 1
, 6
, 1
, 6
, etc. La colonne suivante commence 3
, 5
, 8
, 0
et puis cycles.
En fait, chaque colonne (si nous descendons assez loin) a une séquence cyclique de chiffres dont la longueur est le double de celle du cycle précédent, à l’exception des cycles initial 5
et initial 2
.
En appelant N le numéro de colonne, en commençant par N = 1 à droite, les premiers cycles sont les suivants:
N cycle at column N
1 5
2 2
3 16
4 3580
5 17956240
6 3978175584236200
7 19840377976181556439582242163600
8 4420183983595778219796176036355599756384380402237642416215818000
Défi
Avec un entier positif N, indiquez les chiffres décimaux du cycle dans la colonne N, comme décrit ci-dessus. Par exemple, la sortie pour N = 4 serait 3580
.
Les chiffres peuvent être générés sous forme de liste [3, 5, 8, 0]
ou dans un autre format raisonnable, à condition que:
- Les chiffres sont dans l'ordre, tels qu'ils sont lus de haut en bas dans les colonnes de puissance. par exemple
0853
est invalide. - Le cycle commence par le chiffre du haut dans sa colonne de puissance. Par exemple,
5803
est invalide car la 4ème colonne commence par3
not5
. - Exactement un cycle est sorti. par exemple
358
ou35803
ou35803580
seraient tous invalides.
Votre code doit fonctionner pour au moins N = 1 à 30.
Si vous le souhaitez, vous pouvez supposer que les colonnes sont indexées par 0 au lieu d'être indexées par 1. Donc N = 0 donne 5
, N = 1 donne 2
, N = 2 donne 16
, N = 3 donne 3580
, etc.
Le code le plus court en octets gagne .
2^(N-2)
saufN = 1
Réponses:
Python 2,
626158 octetsBase zéro. Je suppose que les suffixes L sont acceptables.
Sortie:
Solution précédente:
Explication:
Le
range(2**n/2)
utilise l'observation que chaque cycle a une longueur r = 2 n-1 sauf lorsque n = 0, nous calculons donc les nièmes chiffres de 5 m à 5 m + r - 1 .Le début du cycle 5 m est le premier nombre supérieur à 10 n . La résolution de 5 m ≥ 10 n donne m ≥ n / log 10 5. Ici, nous approchons le log 10 5 0,7 qui sera décomposé lorsque n = 72. Nous pourrions ajouter plus de chiffres pour augmenter la précision:
Dans
/ 10**n % 10
la boucle, extrayez simplement le chiffre souhaité. Une autre solution alternative utilise la manipulation de chaîne. J'ai utilisé le truc~n == -n-1
ici pour supprimer 1 octet.Une mention dans le commentaire, l'expression
5**(m+i) / 10**n
peut être encore simplifiée de cette façon, ce qui donne la réponse actuelle de 58 octets.(La division
x/2**n
peut être effectuée en utilisant un décalage à droite au niveau du bitx>>n
. Malheureusement, en raison de la priorité des opérateurs Python, cela ne sauvegarde aucun octet.) La fraction 3/7 peut également être améliorée de manière similaire:la source
(5**(n*3/7-~i)>>n)%10
. Étant donné que vous prenez une puissance de 5 divisée par une puissance (plus petite) de 10, vous pouvez réduire la puissance de 5 et passer à la place.n/.7 - n
→n*10/7 - n
→n*3/7
. En premier lieu, il extrait les chiffres de la plus petite puissance de 5 supérieure à 2ⁿ (avec 3/7 approximativement pour 1 / log₂ (5) ). En outre, utiliser à larange(2**n/2or 1)
place vous donnera une sortie cohérente.(x>>n)%10
n'apporte aucune améliorationx/2**n%10
, je n'utilise donc pas de décalage pour le moment, car il existe peut-être un moyen d'éliminer le commun2**n
.2**n
, semble un peu plus si:int(5**(-~i-n*log(2,5)%1))%10
(je l' ai simplifiéint(n*log(2,5))-n*log(2,5)
comme-(n*log(2,5)%1)
).2**n
argument here and the range.dc , 72 octets
Indexation basée sur 0.
Ceci utilise l'arithmétique entière exacte - pas d'approximations logarithmiques. Cela fonctionnera jusqu'à la capacité de mémoire de l'ordinateur.
Essayez le programme en ligne!
Le code continu peut être transformé en une solution Bash:
Utilitaires Bash + GNU,
967775 octetsEssayez la version Bash en ligne!
la source
Mathematica,
666052 octetsFonction anonyme, indexé 0. Utilise l'approximation de log5 (10) (0,7)
Comment ça fonctionne?
Prenez le plus grand de 2 ^ (entrée) / 2 et 1. Générez {1.that number}
Ajouter entrée / .7
Augmenter 5 à la puissance du résultat (générer des puissances de 5), diviser par 10 ^ entrée (supprimer les chiffres à droite de la colonne désirée)
Appliquez le modulo 10 en prenant le chiffre correspondant (la colonne souhaitée).
Version exacte, 58 octets
la source
JavaScript (ES7),
7876 octets0 indexé, c'est à dire
f(0)
donne2
.Extrait de test
Afficher l'extrait de code
Le fragment utilise à la
Math.pow
place de la**
compatibilité entre navigateurs.la source
CJam, 35
Essayez-le en ligne
C'est peu encombrant et pas très lent, cela a pris plusieurs minutes pour entrer 30 sur mon ordinateur (avec l'interpréteur java).
la source
Gelée ,
2621 octets-2 octets en utilisant 0,7 kennytm idée d'approximation
Essayez-le en ligne!(temps mort pour n> 15 )
Retourne une liste d'entiers, les chiffres.
Base zéro. Fonctionne théoriquement pour n <= 72 (remplacez
.7
par5l⁵¤
, pour obtenir une précision en virgule flottante).Comment?
Localement: la mémoire du groupe de travail pour n = 17 a grimpé à environ 750 Mo, puis à environ 1 Go ; pour n = 18, il a lentement atteint 2,5 Go, puis a atteint environ 5 Go .
la source
Perl 6 , 52 octets
Fonctionne pour des entrées arbitrairement élevées, avec suffisamment de mémoire (c'est-à-dire sans approximation logarithmique) .
Retourne une liste de chiffres.
Essayez-le en ligne!
Comment ça fonctionne
La partie "sauts d'élément" fonctionne comme ceci:
//
est l'opérateur "défini ou".|()
renvoie un bordereau vide , qui se dissout dans la liste externe en tant qu'éléments 0, essentiellement en s'assurant que l'élément actuel est ignoré.Le cas d'extrémité
n=1
fonctionne très bien, car2**n/4
devient0.5
et^(0.5)
signifie0 ..^ 0.5
aussi "entiers compris entre 0 (inclus) et 0.5 (non inclus)", c'est-à-dire une liste avec l'élément unique 0.la source
J, 50 octets
Remarque: doit passer en numéro étendu
Usage:
la source
Haskell , 73 octets
Essayez-le en ligne! Utilise l'indexation 0.
Explication:
la source
Lot, 294 octets
Affiche chaque chiffre sur sa propre ligne. Fonctionne en calculant les puissances de 5 longueurs, mais ne fonctionne que jusqu’à
N=33
cause de l’utilisation d’entiers 32 bits pour conserver le nombre de chiffres à imprimer.s
contient les derniersN
chiffres (inversés) de la puissance actuelle de 5, alors que st
contient des caractèresx
de remplissage, bienx=0
qu'ils soient évalués à zéro lors du calcul de la puissance suivante. Exemple pourN=4
:la source
JavaScript (ES6), 73 octets
1 indexé. Légèrement plus court que la réponse ES7 , mais échoue 3 étapes plus tôt (à N = 13).
Démo
Afficher l'extrait de code
la source
PHP> = 7.1, 104 octets
PHP Sandbox en ligne
la source