C'est une tâche quelque peu différente. Calculez 1024 chiffres hexadécimaux de π, en commençant à la 1024e place hexadécimale.
Formellement: votre programme devrait se terminer en moins d'une minute et produire la sortie suivante:
25d479d8f6e8def7e3fe501ab6794c3b976ce0bd04c006bac1a94fb6409f60c45e5c9ec2196a246368fb6faf3e6c53b51339b2eb3b52ec6f6dfc511f9b30952ccc814544af5ebd09bee3d004de334afd660f2807192e4bb3c0cba85745c8740fd20b5f39b9d3fbdb5579c0bd1a60320ad6a100c6402c7279679f25fefb1fa3cc8ea5e9f8db3222f83c7516dffd616b152f501ec8ad0552ab323db5fafd23876053317b483e00df829e5c57bbca6f8ca01a87562edf1769dbd542a8f6287effc3ac6732c68c4f5573695b27b0bbca58c8e1ffa35db8f011a010fa3d98fd2183b84afcb56c2dd1d35b9a53e479b6f84565d28e49bc4bfb9790e1ddf2daa4cb7e3362fb1341cee4c6e8ef20cada36774c01d07e9efe2bf11fb495dbda4dae909198eaad8e716b93d5a0d08ed1d0afc725e08e3c5b2f8e7594b78ff6e2fbf2122b648888b812900df01c4fad5ea0688fc31cd1cff191b3a8c1ad2f2f2218be0e1777ea752dfe8b021fa1e5a0cc0fb56f74e818acf3d6ce89e299b4a84fe0fd13e0b77cc43b81d2ada8d9165fa2668095770593cc7314211a1477e6ad206577b5fa86c75442f5fb9d35cfebcdaf0c7b3e89a0d6411bd3ae1e7e4900250e2d2071b35e226800bb57b8e0af2464369bf009b91e5563911d59dfa6aa78c14389d95a537f207d5ba202e5b9c5832603766295cfa911c81968414a34a
Le programme avec la durée la plus courte gagne. Vous devez calculer tous les chiffres lors de l'exécution. Vous n'avez pas à implémenter l'algorithme qui calcule π; si votre langue fournit déjà cette fonctionnalité, vous pouvez l'utiliser.
Réponses:
Sauge, 29 car.
Ce n'est pas techniquement de la triche, car les chiffres sont calculés lors de l'exécution. Cela dit, c'est toujours aussi bon marché que l'enfer.
la source
Utilitaires Shell: 48
curl -sL ow.ly/5u3hc|grep -Eom 1 '[a-f0-9]{1024}'
la source
curl -sL ow.ly/shKGY|grep -Po \\w{99,}
(37). Fonctionne dans Dash. Bash aurait besoin d'un octet supplémentaire.J,
156, 140, 137127Utilisation de la formule BBP.
Ne court pas en moins d'une minute (mais nous avons une réponse J: p)
Exemple pour les 104 premiers chiffres de π (cela fonctionne rapidement):
la source
#:
ne produira pas de chiffres hexadécimaux.(... 16 #:) Pi
? Je pense que nous n'avons pas assez de chiffres, nous devons donc les générer de toute façon.hfd
pour convertir des nombres en hexadécimal.JavaScript, 536
(Sauts de ligne et indentation pour la lisibilité uniquement)
Cela prend environ 25 secondes, sur Google Chrome 14 sur mon ordinateur portable utilisant le noyau Intel i5. Quelqu'un d'autre peut-il jouer au golf avec ce code? Je ne peux pas bien jouer au golf .. :(
Ci-dessous est non-golfé. Je viens de supprimer tous les commentaires et de changer de boucle pour jouer au golf.
Ne parlez pas
for(;s>=b;s-=b);s*=16;
. Je l'ai changé ens=(s%b)*16
. : PEDIT: Suppression de la fonction totalement inutilisée. (Pourquoi ai-je gardé ça?: /)
PS. 100 premiers chiffres de PI
243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c89452821e638d01377be5466cf34e90c6cc0ab
la source
d='0123456789abcdef',l=3e3,p=Array(l+1).join(2),o='',c=0,e='length';d+=d;function _(a,b,s){for(i=(a[e]>b[e]?a[e]:b[e])-1,r='',c=0;i+1;r=d[Z=F(b,i,1)+c,k=F(a,i,1)+(s?Z:16-Z),c=s?k>15:k<16,k]+r,i--);return r}function F(a,b,f){if(f)f=a[e]>b?d.indexOf(a[b]):0;else{for(i=0,f='',s=16;i++<l;f+=d[~~(s/b)],s=(s%b)*16);while(a--)f=_(f,f,1)}return f}for(j=0;++j<l;p=_(p,(o+='0')+_(_(_(F(2,z=8*j+1),F(1,z+3)),F(0,z+4)),F(0,z+5)),1));console.log(p.slice(1024,2048))
_
au profit de l',
opérateur. La plus délicate est la fusion de$
etg
en une seule fonction, avec un argument facultatif pour choisir entre elles.function
etreturn
sont tous les deux assez chers, donc unif(f)...else
et deux,1
sont un compromis raisonnable.PHP
116114 octetsCette solution calcule tous les pi jusqu'à 2048 chiffres hexadécimaux, quatre chiffres hexadécimaux à la fois, et génère la dernière moitié d'entre eux. Le temps d'exécution est inférieur à 5 secondes. La formule utilisée pour le calcul est la suivante:
La précision est obtenue en stockant les restes dans un tableau et en continuant progressivement chacune des 2 ^ 14 divisions.
Python 64 octets
Même méthode que ci-dessus. Fonctionne en environ 0,2 s.
Ou en une ligne en 73 octets :
la source
PARI / GP-2.4, 141
En utilisant la formule Bailey – Borwein – Plouffe (bien sûr).
Fonctionne bien en moins d'une minute.
la source
Code C:
runtime = 8,06 secondes sur un Intel Quad Core
la source
printf("%X",(int)gA)
place de cette longue liste.PARI / GP - 40 octets
Cette version «triche» en utilisant
\x
pour afficher les chiffres hexadécimaux du résultat.Cette version prend 87 octets pour se convertir en hexadécimal de la manière habituelle.
Les deux versions fonctionnent en une petite fraction de seconde.
la source
Perl - 59
Moins de 0,1 s.
la source
Coquille 68
outils: bc -l, tr, cut
Shell 64, outils: bc -l, tr, tail, diffère par l'arrondi de la dernière place
Pourrait être considéré comme de la triche, car la connaissance de la façon de calculer PI est en 4 * a (1), et que 1 doit utiliser l'échelle = 2466 a été étudiée de manière itérative.
Merci à breadbox pour l'idée d'utiliser cut.
la source
dd
commande partail -c1024
pour enregistrer quelques caractères.dd
aveccut -c1027-2051
. (Le shell possède de nombreux outils pour manipuler les flux de texte.)