Это несколько другая задача. Вычислите 1024 шестнадцатеричные цифры числа π, начиная с 1024-го шестнадцатеричного числа.
Формально: Ваша программа должна завершиться менее чем за 1 минуту и произвести следующий вывод:
25d479d8f6e8def7e3fe501ab6794c3b976ce0bd04c006bac1a94fb6409f60c45e5c9ec2196a246368fb6faf3e6c53b51339b2eb3b52ec6f6dfc511f9b30952ccc814544af5ebd09bee3d004de334afd660f2807192e4bb3c0cba85745c8740fd20b5f39b9d3fbdb5579c0bd1a60320ad6a100c6402c7279679f25fefb1fa3cc8ea5e9f8db3222f83c7516dffd616b152f501ec8ad0552ab323db5fafd23876053317b483e00df829e5c57bbca6f8ca01a87562edf1769dbd542a8f6287effc3ac6732c68c4f5573695b27b0bbca58c8e1ffa35db8f011a010fa3d98fd2183b84afcb56c2dd1d35b9a53e479b6f84565d28e49bc4bfb9790e1ddf2daa4cb7e3362fb1341cee4c6e8ef20cada36774c01d07e9efe2bf11fb495dbda4dae909198eaad8e716b93d5a0d08ed1d0afc725e08e3c5b2f8e7594b78ff6e2fbf2122b648888b812900df01c4fad5ea0688fc31cd1cff191b3a8c1ad2f2f2218be0e1777ea752dfe8b021fa1e5a0cc0fb56f74e818acf3d6ce89e299b4a84fe0fd13e0b77cc43b81d2ada8d9165fa2668095770593cc7314211a1477e6ad206577b5fa86c75442f5fb9d35cfebcdaf0c7b3e89a0d6411bd3ae1e7e4900250e2d2071b35e226800bb57b8e0af2464369bf009b91e5563911d59dfa6aa78c14389d95a537f207d5ba202e5b9c5832603766295cfa911c819684e734a41b3472dca7b14a94a
Программа с самой короткой длиной выигрывает. Вы должны рассчитать все цифры во время выполнения. Вам не нужно реализовывать алгоритм, который вычисляет π; если ваш язык уже обеспечивает эту функциональность, вы можете использовать его.
источник
Ответы:
Мудрец, 29 символов
Технически это не обман, так как цифры вычисляются во время выполнения. Тем не менее, это все еще дешево, как ад.
источник
Утилиты Shell: 48
curl -sL ow.ly/5u3hc|grep -Eom 1 '[a-f0-9]{1024}'
источник
curl -sL ow.ly/shKGY|grep -Po \\w{99,}
(37). Работает в Dash. Bash потребуется дополнительный байт.J
156, 140, 137127Используя формулу BBP.
Имеет ли НЕ работать в течение одной минуты (но мы имеем J ответ: р)
Пример для первых 104 цифр π (это быстро работает):
источник
#:
не будет выводить шестнадцатеричные цифры.(... 16 #:) Pi
? Я думаю, что у нас недостаточно цифр, поэтому мы все равно должны их генерировать.hfd
для преобразования чисел в шестнадцатеричное.JavaScript, 536
(Разрывы строк и отступы только для разборчивости)
На моем ноутбуке Google Chrome 14 с ядром Intel i5 это занимает около 25 секунд. Может ли кто-нибудь еще сыграть в этот код? Я не могу хорошо играть в гольф .. :(
Ниже не гольф. Я просто удалил все комментарии и сменил петлю на игру в гольф.
Не упоминать о
for(;s>=b;s-=b);s*=16;
. Я изменил это наs=(s%b)*16
. :ПРЕДАКТИРОВАТЬ: Удалена полностью неиспользуемая функция. (Почему я сохранил это?: /)
PS. Первые 100 цифр ПИ
243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c89452821e638d01377be5466cf34e90c6cc0ab
источник
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))
_
в пользу,
оператора. Самым хитрым является объединение$
иg
в одну функцию с необязательным аргументом для выбора между ними.function
иreturn
оба довольно дорогие, так чтоif(f)...else
и пара,1
это разумный компромисс.PHP
116114 байтЭто решение вычисляет все числа Пи до 2048 шестнадцатеричных цифр, по четыре шестнадцатеричные цифры за раз, и выводит последнюю половину из них. Время выполнения составляет менее 5 секунд. Формула, используемая для расчета, следующая:
Точность достигается путем сохранения остатков в массиве и постепенного продолжения каждого из 2 ^ 14 делений.
Python 64 байта
Тот же метод, что и выше. Работает около 0,2 с.
Или как однострочник в 73 байта :
источник
PARI / GP-2.4, 141
Используя формулу Бэйли-Борвейна-Плуффа (конечно).
Бежит меньше минуты.
источник
Код C:
время выполнения = 8,06 секунды на ядре Intel Quad
источник
printf("%X",(int)gA)
вместо этого длинного списка.PARI / GP - 40 байт
Эта версия «обманывает», используя
\x
для отображения шестнадцатеричных цифр результата.Эта версия занимает 87 байтов для преобразования в шестнадцатеричный в обычном порядке.
Обе версии запускаются за небольшую долю секунды.
источник
Perl - 59
Менее 0,1 с.
источник
Shell 68
инструменты: bc -l, tr, cut
Shell 64, инструменты: bc -l, tr, tail, отличается округлением последнего места
Может считаться мошенничеством, так как знания о том, как вычислять PI, находятся в 4 * a (1), и что я должен использовать scale = 2466, был итеративно исследован.
Спасибо хлебнице за идею использовать вырезать.
источник
dd
команду,tail -c1024
чтобы сохранить несколько символов.dd
сcut -c1027-2051
. (В оболочке есть много инструментов для управления текстовыми потоками.)