Dies ist eine etwas andere Aufgabe. Berechnen Sie 1024 hexadezimale Stellen von π, beginnend mit der 1024. hexadezimalen Stelle.
Formal: Ihr Programm sollte in weniger als 1 Minute fertig sein und die folgende Ausgabe erzeugen:
25d479d8f6e8def7e3fe501ab6794c3b976ce0bd04c006bac1a94fb6409f60c45e5c9ec2196a246368fb6faf3e6c53b51339b2eb3b52ec6f6dfc511f9b30952ccc814544af5ebd09bee3d004de334afd660f2807192e4bb3c0cba85745c8740fd20b5f39b9d3fbdb5579c0bd1a60320ad6a100c6402c7279679f25fefb1fa3cc8ea5e9f8db3222f83c7516dffd616b152f501ec8ad0552ab323db5fafd23876053317b483e00df829e5c57bbca6f8ca01a87562edf1769dbd542a8f6287effc3ac6732c68c4f5573695b27b0bbca58c8e1ffa35db8f011a010fa3d98fd2183b84afcb56c2dd1d35b9a53e479b6f84565d28e49bc4bfb9790e1ddf2daa4cb7e3362fb1341cee4c6e8ef20cada36774c01d07e9efe2bf11fb495dbda4dae909198eaad8e716b93d5a0d08ed1d0afc725e08e3c5b2f8e7594b78ff6e2fbf2122b648888b812900df01c4fad5ea0688fc31cd1cff191b3a8c1ad2f2f2218be0e1777ea752dfe8b021fa1e5a0cc0fb56f74e818acf3d6ce89e299b4a84fe0fd13e0b77cc43b81d2ada8d9165fa2668095770593cc7314211a1477e6ad206577b5fa86c75442f5fb9d35cfebcdaf0c7b3e8
Das Programm mit der kürzesten Länge gewinnt. Sie müssen alle Ziffern zur Laufzeit berechnen. Sie müssen den Algorithmus, der π berechnet, nicht implementieren. Wenn Ihre Sprache diese Funktionalität bereits bietet, können Sie sie verwenden.
quelle
Antworten:
Salbei, 29 char
Dies ist technisch gesehen kein Betrug, da die Ziffern zur Laufzeit berechnet werden. Das heißt, es ist immer noch billig wie die Hölle.
quelle
Shell-Dienstprogramme: 48
curl -sL ow.ly/5u3hc|grep -Eom 1 '[a-f0-9]{1024}'
quelle
curl -sL ow.ly/shKGY|grep -Po \\w{99,}
(37). Funktioniert in Dash. Bash würde ein zusätzliches Byte benötigen.J,
156, 140, 137,127Verwendung der BBP-Formel.
Läuft NICHT in weniger als einer Minute (aber wir haben eine J-Antwort: p)
Beispiel für die ersten 104 Stellen von π (das läuft schnell):
quelle
#:
gibt keine hexadezimalen Ziffern aus.(... 16 #:) Pi
? Ich denke, wir haben nicht genug Ziffern, also müssen wir sie trotzdem generieren.hfd
, um Zahlen in Hexadezimalzahlen umzuwandeln.JavaScript, 536
(Zeilenumbrüche und Einrückungen nur zur besseren Lesbarkeit)
Auf meinem Laptop mit Intel i5 Core dauert es bei Google Chrome 14 ungefähr 25 Sekunden. Kann jemand anderen diesen Code Golf spielen? Ich kann nicht gut golfen .. :(
Unten ist nicht golfen. Ich entferne einfach alle Kommentare und wechsle für die Schleife zum Golfen.
Erwähne nichts über
for(;s>=b;s-=b);s*=16;
. Ich habe es in geänderts=(s%b)*16
. : PBEARBEITEN: Völlig unbenutzte Funktion entfernt. (Warum habe ich das behalten?: /)
PS. Erste 100 Stellen von PI
243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c89452821e638d01377be5466cf34e90c6cc0ab
quelle
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))
_
zugunsten des,
Betreibers. Das schwierigste ist das Zusammenführen von$
undg
zu einer Funktion mit einem optionalen Argument zur Auswahl.function
undreturn
sind beide ziemlich teuer, so ist einif(f)...else
und ein paar,1
ein vernünftiger Kompromiss.PHP
116114 BytesDiese Lösung berechnet alle pi bis zu 2048 Hexadezimalstellen, jeweils vier Hexadezimalstellen, und gibt die letzte Hälfte davon aus. Die Ausführungszeit beträgt weniger als 5 Sekunden. Die für die Berechnung verwendete Formel lautet wie folgt:
Die Genauigkeit wird erhalten, indem die Reste in einem Array gespeichert und jede der 2 ^ 14 Unterteilungen inkrementell fortgesetzt werden.
Python 64 Bytes
Gleiche Methode wie oben. Läuft in ca. 0,2s.
Oder als Einzeiler in 73 Bytes :
quelle
PARI / GP-2.4, 141
Natürlich mit der Bailey-Borwein-Plouffe-Formel.
Läuft in weniger als einer Minute.
quelle
C-Code:
Laufzeit = 8,06 Sekunden auf einem Intel Quad Core
quelle
printf("%X",(int)gA)
anstelle dieser langen Liste verwenden.PARI / GP - 40 Bytes
Diese Version 'betrügt', indem sie verwendet wird
\x
, um die hexadezimalen Ziffern des Ergebnisses anzuzeigen.Diese Version benötigt 87 Bytes, um auf die übliche Weise in Hexadezimal umzuwandeln.
Beide Versionen laufen im Bruchteil einer Sekunde.
quelle
Perl - 59
Weniger als 0,1 s.
quelle
Schale 68
Werkzeuge: bc -l, tr, cut
Shell 64, tools: bc -l, tr, tail, unterscheidet sich in der Rundung der letzten Stelle
Könnte als Betrug betrachtet werden, da das Wissen, wie man PI berechnet, in 4 * a (1) ist und dass 1 scale = 2466 verwendet werden muss, iterativ untersucht wurde.
Danke an breadbox für die Idee, cut zu verwenden.
quelle
dd
Befehl durch ersetzentail -c1024
, um ein paar Zeichen zu sparen.dd
mitcut -c1027-2051
. (Die Shell verfügt über zahlreiche Tools zum Bearbeiten von Textströmen.)