Вызов :
Пи должен быть бесконечным. Это означает, что каждое число содержится внутри десятичной части числа pi. Ваша задача будет взять положительное целое число на входе и вернуть позицию этого числа в пи цифрах на выходе.
Например, если ввод 59
, мы вернемся4
И вот почему: мы будем искать число 59
в цифрах числа пи
3.14159265...
^^
Значение начинается с 4-й цифры, поэтому вывод будет 4
.
Некоторые другие примеры:
input : 1 output : 1
input : 65 output : 7
input : 93993 output : 42
input : 3 output : 9
Правила:
- Вам не нужно обрабатывать цифры, которых не существует в первых 200 цифрах
- Стандартные лазейки, как всегда, запрещены.
- Это Codegolf , поэтому побеждает меньше байтов.
n
индекс с индексом 0? Таким образом, текстовые случаи будут возвращаться0, 6, 41, 8
вместо1, 7, 42, 9
.Ответы:
Python 2,
69757167 байтСохранено 4 байта из-за caird .
Не найдя
3
на нулевой позиции стоимость62 байта. Ввод дан в виде строки.Попробуйте онлайн!
Неограниченная версия
Python 2, 224 байта
Использование неограниченного патрубка по той же формуле, что и выше.
Попробуйте онлайн!
Быстрая версия
Гораздо более быстрый неограниченный патрубок, основанный на Рамануджане № 39 .
Попробуйте онлайн!
источник
Шелуха , 5 байт
Попробуйте онлайн!
объяснение
источник
€
) с первым удаленным элементом (первые 3) (t
) из цифр PI (İπ
), преобразуйте его в base-10 (d
) и выведите в STDOUT (неявно).İπ
- это бесконечный список цифр, созданный с неограниченным источникомExcel, 212 байт
Excel обрабатывает только 15 знаков после запятой, поэтому пи просто жестко запрограммирован. Это должно быть довольно слабой верхней границей для этой задачи.
источник
CONCAT
и формулу ББПА для вычисления первых 200 цифр пи-base16 и поиска в шестнадцатеричном вместо этого? (У меня нет 365, поэтому не могу проверить)CONCAT
,CODE
иMID
я сократил строку PI с 202 символов (включая кавычки) до 143:CONCAT(CODE(MID(".ÜÁ£ÙÏ ¦®š«¦ ϲœÔ“ÇŧÝËŠº”ᱬ»—‡ÑÀ†œ¾ˆãÖœƒ°™¢•‘†ÏÒŽÐÖ³ Ҟ¯‰¦¬¼ß²º–ŸÈµ»¨Ñœ°‹‘‚ÔŠ›ÝÕ•Š·»À®–Þٶ݃Ñà",2*ROW(A1:A100)-1,2))-32)
Java 8,
615217202184182166165 байтов (вычислено999200 цифр)1-индексированных
Попробуйте онлайн.
Встроенная в Java
Math.PI
точность 15 десятичных значений, как и во многих других языках. Чтобы иметь больше цифр, вам придется вычислять их самостоятельно с помощьюBigIntegers
илиBigDecimals
. Это выше, способ сделать это ..Может быть, кто-то можетсыграть вгольф ниже 211 байт, смеется.РЕДАКТИРОВАТЬ: Создал порт ответа @primo Python 2 (убедитесь, что его голосовать!), Так что расчет будет короче, чем трудно закодирован уже не так надуманно
Всего 7 байтов в гольфе, чтобы он был короче.-15 байтов благодаря @Neil , что делает его короче, чем жестко закодированный ответ ниже!
-36 байт благодаря @primo .
-1 байт меняется
java.math.BigInteger t=null,T=t.TEN.pow(200),r=T;
наvar T=java.math.BigInteger.TEN.pow(200);var r=T;
, потому чтоvar
на 1 байт корочеnull
(должен любить новую Java 10).Объяснение:
Java 8, 211 байт (жестко запрограммированные 200 цифр)
0 индексированные
Попробуйте онлайн.
источник
!p.equals(t.ONE)
возможно? ТакжеindexOf(n,1)-1
работает, я думаю. Или сохраните 2 байта и сделайте его 1-проиндексированным.indexOf
метод, который пропускает первыеm
символы. ТИЛ, спасибо!p
на единицу каждый раз (for(int p=667;p-->1;)
), а затем умножить наp
и разделить наp-~p
.r
может буквально быть чем угодно, хотя крайние значения потребуют большего количества итераций. Лучшее семя (наименьшее количество итераций) на самом деле4e200
.05AB1E , 6 байтов
Попробуйте онлайн!
Как?
источник
3
все равно не сработаетMATL ,
1615 байтПопробуйте онлайн!
объяснение
источник
R + пакет номеров, 52 байта
Попробуйте онлайн!
dropletPi
вычисляет первые 200 десятичных цифр,pi
но включает3.
в начале символ a , поэтому мы удаляем его с помощью,substring
а затем сопоставляемregexec
, что возвращает индекс совпадения вместе с некоторыми метаданными о совпадении.источник
regexpr(scan(),numbers::dropletPi(200))-2
?"if"
?3.
(я предполагаю, что мы имеем дело с целыми числами, а не с реальными числами на входе). Тестовые примеры работают с этим.regexpr(3,numbers::dropletPi(200))-2
возвращается,-1
когда он должен вернуться9
, попробуйтеЖеле , 23 байта
Монадическая ссылка, принимающая список символов (целое число для поиска) и возвращающая индекс. Работает для входных данных, содержащихся в первых 252 цифрах десятичной части числа π.
Попробуйте онлайн!
Как?
При этом используется формула Лейбница для π для вычисления первых 253 цифр, включая начальную
3
(плюс четыре завершающих неверных цифры). Затем ведущий3
отбрасывается, и указывается входной индекс:Если вы предпочитаете список цифр в качестве входных данных
⁵*⁹Ḥ;ȷḊ+J$¤×⁹:2¤:ɗ\SDḊw
(также 23), тогда как если вы действительно хотите дать ему целочисленное использование⁵*⁹Ḥ;ȷḊ+J$¤×⁹:2¤:ɗ\SDḊwD
(для 24).источник
BASH (GNU / Linux),
756766 байтБлагодаря Софии Лечнер сэкономил 1 байт, а благодаря шарлатанству Коровы - 7 байт.
Это сценарий оболочки, который принимает один аргумент, который является числом. Тест с
Этот скрипт сначала выполняет конвейер из трех команд:
Результат этого конвейера присваивается переменной оболочки
a
, которая затем выводится с чем угодно, кроме первого удаленного числа:К сожалению,
bc
имеет тенденцию разрывать выходные строки, когда они становятся слишком длинными. Это может привести к неверным результатам, если найденное число находится не в первой строке. Вы можете избежать этого, установив переменную окруженияBC_LINE_LENGTH
:Это полностью отключает функцию разрыва строки.
Очевидно, что последние две команды могут быть опущены, если допускается другой вывод.
Это дает счет 48 байтов :
С полученным результатом:
источник
-l
и<<<
хотя.sed
указывать (см. Вторую часть моего ответа). Тем не менее, преобразование в программу дало мне 7 байтов, так что спасибо за это! Я также заменилtr
/head
combo на магическую переменную оболочки, чтобы сохранить еще один байт.JavaScript,
197187-10: Спасибо, Нил !
Принимает последовательность из девятизначных целых чисел с основанием 36, преобразует их в основание 10 и объединяет их для создания первых 200 цифр числа Пи.
источник
x=>'50...'.replace(/.{9}/g,a=>parseInt(a,36)).search(x)+1
для сохранения 10 байтов.Первый раз занимаюсь гольфом. Используйте делегаты и лямбда-выражения, чтобы уменьшить количество вызовов функций. V2 сокращает имя класса до одного байта.
[C #],
361355 байтОтформатированная версия:
Ideone!
NB.Я пропустил первую версию. Это было 361 байт, а не 363 байт.
[C #], tio версия 218 байт
Попробуйте онлайн!
источник
using System;f=>"14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196".IndexOf(f)+1;
в качестве правки.Haskell ,
208120 байтовПопробуйте онлайн!
Большое спасибо Джонатану Аллану за его предложения!
Старая версия (208 байт)
Я на самом деле не знаю, как работает код выше; Я взял это из этой статьи, и все, что я реализовал, это часть поиска.
g(1,0,1,1,3,3)
возвращает цифры числа pi и удивительно эффективен (он вычисляет 10 000 цифр на tio.run менее чем за 4 секунды).Входные данные представляют собой список, состоящий из цифр числа, которое будет найдено.
Попробуйте онлайн!
источник
l=4*sum[((-1)**x/(2*x+1))|x<-[0..1e6]]
, но для запуска требуется 5 с, а 7-я цифра уже неверна. Таким образом, может оказаться невозможным вычислить 200 цифр. В любом случае, это было интересное упражнение, так что спасибо!g1_ref
в разделе « Быстрые неограниченные генераторы» . Код является питоном.Haskell, 230 байт
Использование лени, чтобы найти номер где-нибудь в бесконечных цифрах числа Пи, а не только в первых 200 цифрах. Ах да, и он возвращает вам каждый (бесконечно много?) Экземпляров номера, а не только первый.
Примеры из задачи
кредиты
'p' - это бесконечный поток цифр пи, взятый из https://rosettacode.org/wiki/Pi#Haskell
источник
SmileBASIC,
179164 байтаЦифры пи жестко закодированы и упакованы в значения символов ascii. 14 ->
CHR$(14)
, 15 ->CHR$(15)
, 92 ->\
, 65 ->A
, 35 ->#
.Строка содержит непечатаемые символы, поэтому здесь представлены байты, записанные в шестнадцатеричном формате:
0E 0F 5C 41 23 59 4F 20 26 2E 1A 2B 26 20 4F 32 1C 54 13 47 45 27 5D 4B 69 52 00 61 31 2C 3B 17 00 4E 10 28 3E 56 14 59 62 3E 50 03 30 19 03 2A 75 00 43 62 15 30 00 56 33 20 52 1E 42 2F 00 5D 54 2E 00 5F 32 3A 16 1F 48 35 3B 28 51 1C 30 6F 4A 32 1C 29 00 1B 00 13 26 34 6E 37 3B 40 2E 16 5E 59 36 5D 00 26 13 06
В десятичном виде вы можете увидеть цифры числа пи:
14 15 92 65 35 89 79 32 38 46 26 43 38 32 79 50 28 84 19 71 69 39 93 75 105 82 0 97 49 44 59 23 0 78 16 40 62 86 20 89 98 62 80 3 48 25 3 42 117 0 67 98 21 48 0 86 51 32 82 30 66 47 0 93 84 46 0 95 50 58 22 31 72 53 59 40 81 28 48 111 74 50 28 41 0 27 0 19 38 52 110 55 59 64 46 22 94 89 54 93 0 38 19 6
источник
Рубин ,
3735 байтПопробуйте онлайн!
Ничего особенного, просто демонстрация встроенной библиотеки. Вывод 0 проиндексирован. Строка Pi отформатирована как
0.31415...e1
, поэтому нам нужно убрать первые 3 символа.e1
Часть в конце концов , на самом деле не причинит никакого вреда, но он снял тоже, как нам нужно в любом случае , чтобы обеспечить конечный диапазон (или длину среза) значение.источник
Древесный уголь ,
2715 байтПопробуйте онлайн! Ссылка на подробную версию кода. Работает почти до 1000 цифр. Объяснение:
источник
Japt ,
186177 байтПоскольку Japt разделяет 15-значное ограничение Pi в Javascript и shoco , кодировка, используемая Japt, не кодирует числа, некоторые махинации требуются для сжатия.
Кратко объясним, начало - строка ниже в закодированной форме:
Который является строкой, где каждая буква
'm' + corresponding digit of pi
. Я проверил весь алфавит, и эта буква дает лучшее сжатие на несколько байтов.Обратные метки говорят Japt, чтобы расшифровать строку. Все остальное довольно просто:
Выводит индекс на основе 0 соответствующего фрагмента.
Побрил еще два байта благодаря Оливеру .
Попробуйте онлайн!
источник
£X
на®
и}
сÃ
AWK -M,
131 119117 байтИспользует
-M
флаг для вычислений произвольной точности. Добавленоp=k=0
(5 байт) к ссылке TIO, чтобы разрешить многострочный вводПопробуйте онлайн!
Объяснение:
источник
sprintf
получить десятичные дроби. ИспользованиеCONVFMT
определенно чище.-M
flag»Желе , 24 байта
Попробуйте онлайн!
Используйте мачиноподобную формулу , а именно 1/4 pi == tan -1 (1/2) + tan -1 (1/3).Используйте формулу pi / 2 == 1 + 1/3 × (1 + 2/5 × (1 + 3/7 × (1 + 4/9 × (...))))
источник
ØP
M?floor
. Имейте в виду, если я использую это, чтобы отправить как ответ в М?Python 2
239238229214 байт-9 байт из-за @primo
ИСПОЛЬЗУЕТ Чудновский-Ramanujan алгоритма для нахождения первой
1 миллиона цифрыот 50000 цифр n (изменения10**10**5
в10**10**6
течение более, но он принимает возрасты , чтобы бежать) , а затем ищут в них нужной строке.источник
n=10**10**5
занимает около 10 секунд).10**10**6
занимает около 7 минут на моей машине .. Чтобы быть честным,10**10**5
дает первые 50000 цифр, так что я думаю, что это не так уж и плохо :)gmpy2
, ноbigfloat
экономит дюжину или около того байтов. Назначениеk
можно объединить,k=b=0
если вы перейдетеk+=1
к началу итерации.-(6*k-5)*(2*k-1)*(6*k-1)
может быть написано более кратко, какk*(k*(108-72*k)-46)+5
. Если вы объявляете Python 2,//
целочисленные деления можно заменить на/
, а также скобки не нужныprint
. Пространство также может быть удалено вimport*
. Подтверждает только до 50000 цифр, кстати.n
В ,sqrt(10005*n)
кажется, проблема; он перемещает десятичную точку на 50000-е место. Если вам интересно, вот моя собственная реализация Чудновского: попробуйте онлайн!Visual Basic - 114 байт
Хорошо, первая подача. Полегче со мной!
Обратная связь приветствуется!
Я не ограничился первыми 256 частями PI, так как в вопросе написано «Вы не должны», а не «Вы не должны». Надеюсь, я делаю это правильно :)
источник
Javascript 217 байт (200 в жестком коде)
источник
PHP, 27 байт
Не очень серьезный ответ, он требует изменения настроек php.ini, так как по умолчанию pi () - 14 цифр, а не 200, но на этот раз решение PHP довольно элегантно:
источник
precision
тег в php.ini только изменяет точность отображения, и фактически не увеличивает точность определенных констант. свидетельЮлия 0.6 , 53 байта
Установите точность для BigFloats достаточно высокой, затем конвертируйте
pi
в строку и выполните поиск. Точность9^6
ручек 159980 цифр.Попробуйте онлайн!
источник
J, 25 байт
Попробуйте онлайн!
0-индексированные
Принимает ввод в виде строки, +2 Bytes (
":
), если это не разрешено.Объяснение в конце концов.
источник
Perl 5 с
-MMath::BigFloat+bpi
а-n
, 20 байтовПопробуйте онлайн!
Я не уверен, где используется
$>
стенды, так как он неEFFECTIVE_USER_ID
является переносимым, но на TIO это 1000 и соответствует нашему требованию, для -1 байт против200
.источник
Шелуха , 5 байт
Попробуйте онлайн!
источник