To nieco inne zadanie. Oblicz 1024 cyfry szesnastkowe π, zaczynając od 1024 miejsca szesnastkowego.
Formalnie: Twój program powinien zakończyć się w mniej niż 1 minutę i wygenerować następujący wynik:
25d479d8f6e8def7e3fe501ab6794c3b976ce0bd04c006bac1a94fb6409f60c45e5c9ec2196a246368fb6faf3e6c53b51339b2eb3b52ec6f6dfc511f9b30952ccc814544af5ebd09bee3d004de334afd660f2807192e4bb3c0cba85745c8740fd20b5f39b9d3fbdb5579c0bd1a60320ad6a100c6402c7279679f25fefb1fa3cc8ea5e9f8db3222f83c7516dffd616b152f501ec8ad0552ab323db5fafd23876053317b483e00df829e5c57bbca6f8ca01a87562edf1769dbd542a8f6287effc3ac6732c68c4f5573695b27b0bbca58c8e1ffa35db8f011a010fa3d98fd2183b84afcb56c2dd1d35b9a53e479b6f84565d28e49bc4bfb9790e1ddf2daa4cb7e3362fb1341cee4c6e8ef20cada36774c01d07e9efe2bf11fb495dbda4dae909198eaad8e716b93d5a0d08ed1d0afc725e08e3c5b2f8e7594b78ff6e2fbf2122b648888b812900df01c4fad5ea0688fc31cd1cff191b3a8c1ad2f2f2218be0e1777ea752dfe8b021fa1e5a0cc0fb56f74e818acf3d6ce89e299b4a84fe0fd13e0b77cc43b81d2ada8d9165fa2668095770593cc7314211a1477e6ad206577b5fa86c75442f5fb9d35cfebcdaf0c7b3e89a0d6411bd3ae1e7e4900250e2d2071b35e226800bb57b8e0af2464369bf009b91e5563911d59dfa6aa78c14389d95a537f207d5ba202d5ba202e5b9c5832603766295cfaeaaaaaa
Wygrywa program o najkrótszej długości. Musisz obliczyć wszystkie cyfry w czasie wykonywania. Nie musisz implementować algorytmu obliczającego π; jeśli Twój język już udostępnia tę funkcję, możesz jej użyć.
źródło
Odpowiedzi:
Sage, 29 char
Nie jest to technicznie oszustwo, ponieważ cyfry są obliczane w czasie wykonywania. To powiedziawszy, wciąż jest tanie jak diabli.
źródło
Narzędzia powłoki: 48
curl -sL ow.ly/5u3hc|grep -Eom 1 '[a-f0-9]{1024}'
źródło
curl -sL ow.ly/shKGY|grep -Po \\w{99,}
(37). Działa w Dash. Bash potrzebuje dodatkowego bajtu.J,
156, 140, 137127Korzystanie z formuły BBP.
Czy nie uruchomić w niecałą minutę (ale mamy odpowiedź j: P)
Przykład pierwszych 104 cyfr π (działa to szybko):
źródło
#:
nie będzie wypisywać cyfr szesnastkowych.(... 16 #:) Pi
? Myślę, że nie mamy wystarczającej liczby cyfr, więc i tak musimy je wygenerować.hfd
do konwersji liczb na szesnastkowy.JavaScript, 536
(Podziały linii i wcięcia tylko dla czytelności)
Zajmuje około 25 sekund w Google Chrome 14 na moim laptopie za pomocą rdzenia Intel i5. Czy ktoś inny może zagrać w ten kod? Nie umiem dobrze grać w golfa .. :(
Poniżej nie gra w golfa. Po prostu usunąłem wszystkie komentarze i zmieniłem się w golfa.
Nie wspominaj o
for(;s>=b;s-=b);s*=16;
. Zmieniłem to nas=(s%b)*16
. : PEDYCJA: Usunięto całkowicie nieużywaną funkcję. (Dlaczego to zatrzymałem?: /)
PS. Pierwsze 100 cyfr PI
243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c89452821e638d01377be5466cf34e90c6cc0ab
źródło
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))
_
korzyść,
operatora. Najtrudniejsza jeden jest scalenie$
ig
do jednej funkcji, z opcjonalnym argumentem, aby wybrać między nimi.function
ireturn
oba są dość drogie, więcif(f)...else
kilka z nich,1
jest rozsądnym kompromisem.PHP
116114 bajtówTo rozwiązanie oblicza wszystkie liczby pi do 2048 cyfr szesnastkowych, cztery cyfry szesnastkowe na raz i wyświetla ostatnią połowę z nich. Czas wykonania wynosi mniej niż 5 sekund. Wzór zastosowany do obliczeń jest następujący:
Precyzja jest uzyskiwana poprzez przechowywanie pozostałych w tablicy i kontynuowanie każdego z 2 ^ 14 podziałów stopniowo.
Python 64 bajty
Ta sama metoda jak powyżej. Działa za około 0,2 s.
Lub jako jednowierszowy w 73 bajtach :
źródło
PARI / GP-2.4, 141
Używając formuły Bailey – Borwein – Plouffe (oczywiście).
Uruchamia się w niecałą minutę.
źródło
Kod C:
czas pracy = 8,06 sekund na rdzeniu Intel Quad
źródło
printf("%X",(int)gA)
zamiast długiej listy.PARI / GP - 40 bajtów
Ta wersja „oszukuje”, wykorzystując
\x
do wyświetlania szesnastkowych cyfr wyniku.Ta wersja wymaga 87 bajtów na konwersję do formatu szesnastkowego w zwykły sposób.
Obie wersje działają w ułamku sekundy.
źródło
Perl - 59
Mniej niż 0,1 s.
źródło
Shell 68
narzędzia: bc -l, tr, cut
Shell 64, narzędzia: bc -l, tr, tail, różni się zaokrągleniem ostatniego miejsca
Można to uznać za oszustwo, ponieważ wiedza na temat obliczania PI znajduje się w 4 * a (1), a ta 1 musi używać skali = 2466 została zbadana iteracyjnie.
Dzięki breadbox za pomysł na cięcie.
źródło
dd
polecenie,tail -c1024
aby zapisać kilka znaków.dd
zcut -c1027-2051
. (Powłoka ma wiele narzędzi do manipulowania strumieniami tekstu.)