Pi - иррациональное число , что означает, что его десятичное представление никогда не заканчивается и не повторяется.
Пи усекается до 41 десятичного знака (40 знаков) 3.1415926535897932384626433832795028841971.
Если мы игнорируем десятичную точку и перечисляем цифры как последовательность натуральных чисел, избегая дубликатов , мы получим 3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 950 28 841 971( OEIS A064809 ).
(Обратите внимание, что 15появляется в последовательности вместо того, 1 5потому 1что уже произошло.
Также обратите внимание, что 0не происходит, потому что это не является положительным; 950содержит первый ноль.)
Чтобы построить первое число pirrational, мы используем эту последовательность для индексации цифр числа Pi (первая цифра - 3, вторая - 1 и т. Д.).
Таким образом, первая цифра первого пиративного числа - это третья цифра числа Пи,
вторая цифра - первая цифра числа Пи,
третья цифра - это четвертая цифра числа Пи,
четвертая цифра - пятая цифра числа Пи
и т. Д.
Десятичная точка добавляется после первой цифры, чтобы имитировать Pi.
Таким образом, первое число до 41 цифры 4.3195195867462520687356193644029372991880.
(Обратите внимание, что для 30-й цифры мне пришлось пройти весь путь до 974-й цифры Пи.)
Чтобы построить второе число pirrational, процесс повторяют, используя первое число piral вместо Pi. (Сам пи можно назвать нулевым пиратральным числом.) Таким образом, новая последовательность - это 4 3 1 9 5 19 58 ...и первое индексное число индексируется для получения второго, который начинается 9.14858....
Дальнейшие пирральные числа создаются таким же образом, каждое генерируется из предыдущего.
Вызов
Ваша задача состоит в том, чтобы написать самую короткую возможную программу, которая принимает два целых числа Nи D, и выводит Nпиральное число, усеченное до Dдесятичных цифр.
Dвсегда положительно, но Nнеотрицательно, и Dцифры Pi должны выводиться, когда Nравно 0.
Когда Dравно 1, не имеет значения, присутствует ли десятичная точка или нет.
Входные данные должны поступать из stdin или командной строки, а выходные данные - из stdout (или ближайших альтернатив вашего языка).
Ваша программа должна работать для всех входных значений Nи Dниже 2 16 , но она не должна быть своевременной или эффективной.
Самый короткий код в байтах побеждает.
(Обратите внимание, что в других базах существуют пиральные числа, но все в этом задании сделано в базе 10.)
N=1, D=13393например, вам нужна 31 - миллионной цифры PI