Рассмотрим положительные целые числа пяти в десятичной дроби. Вот первые 25, выровненные по правому краю:
X 5^X
1 5
2 25
3 125
4 625
5 3125
6 15625
7 78125
8 390625
9 1953125
10 9765625
11 48828125
12 244140625
13 1220703125
14 6103515625
15 30517578125
16 152587890625
17 762939453125
18 3814697265625
19 19073486328125
20 95367431640625
21 476837158203125
22 2384185791015625
23 11920928955078125
24 59604644775390625
25 298023223876953125
Обратите внимание, что самый правый столбец полномочий - это все 5
. Во втором столбце справа все 2
. Третий столбец справа, считываться сверху вниз, чередуется 1
, 6
, 1
, 6
и т.д. начинается следующий столбец 3
, 5
, 8
, 0
а затем циклы.
Фактически, каждый столбец (если мы зайдем достаточно далеко) имеет циклическую последовательность цифр, длина которой в два раза больше, чем в предыдущем цикле, за исключением начальных циклов 5
s и 2
s.
При вызове N номера столбца, начиная с N = 1 справа, первые несколько циклов:
N cycle at column N
1 5
2 2
3 16
4 3580
5 17956240
6 3978175584236200
7 19840377976181556439582242163600
8 4420183983595778219796176036355599756384380402237642416215818000
Вызов
Учитывая положительное целое число N, выведите десятичные цифры цикла в столбце N, как описано выше. Например, вывод для N = 4 будет 3580
.
Цифры могут быть выведены в виде списка, такого как [3, 5, 8, 0]
или в другом приемлемом формате, если:
- Цифры расположены по порядку, как показано сверху вниз в столбцах питания. например
0853
, неверно. - Цикл начинается с верхнего числа в столбце мощности. Например
5803
, недействительно, поскольку 4-й столбец начинается с3
not5
. - Ровно один цикл выводится. например
358
или35803
или35803580
все будут недействительными.
Ваш код должен работать как минимум от N = 1 до 30.
При желании вы можете предположить, что столбцы имеют индекс 0 вместо 1. Таким образом, N = 0 дает 5
, N = 1 дает 2
, N = 2 дает 16
, N = 3 дает 3580
и т.д.
Самый короткий код в байтах побеждает .
2^(N-2)
кромеN = 1
Ответы:
Python 2,
626158 байтНулевой основе. Я предполагаю, что суффиксы L приемлемы.
Выход:
Предыдущее решение:
Объяснение:
range(2**n/2)
Использует наблюдение , что каждый цикл имеет длину г = 2 п-1 , за исключением , когда п = 0, так что мы просто вычислить п-й цифру в течение 5 м до 5 м + т - 1 .Начало цикла 5 м - это первое число больше 10 н . Решение 5 m ≥ 10 n дает m ≥ n / log 10 5. Здесь мы приближаемся к log 10 5 ≈ 0,7, который сломается при n = 72. Мы могли бы добавить больше цифр для повышения точности:
В
/ 10**n % 10
цикле просто извлечь нужную цифру. Другое альтернативное решение использует манипуляции со строками. Я использовал этот трюк,~n == -n-1
чтобы удалить 1 байт.Упомянутое в комментарии, выражение
5**(m+i) / 10**n
может быть дополнительно упрощено таким образом, что дает текущий 58-байтовый ответ.(Деление
x/2**n
может быть выполнено с использованием побитового сдвига вправоx>>n
. К сожалению, из-за приоритета оператора Python это не сохраняет никаких байтов.) Дробь 3/7 также может быть улучшена в аналогичном маннаре:источник
(5**(n*3/7-~i)>>n)%10
, Поскольку вы берете степень 5, деленную на (меньшую) степень 10, вы можете уменьшить мощность 5 и вместо этого перейти вправо.n/.7 - n
→n*10/7 - n
→n*3/7
. В принципе, он извлекает цифры из наименьшей степени 5, превышающей 2ⁿ (с 3/7 приближением для 1 / log₂ (5) ). Кроме того, использованиеrange(2**n/2or 1)
вместо этого даст вам последовательный вывод.(x>>n)%10
не дает улучшения по сравнению с этим,x/2**n%10
поэтому я пока не использую битовый сдвиг, так как, возможно, есть способ выделить общее2**n
.2**n
, кажется, немного дольше, хотя:int(5**(-~i-n*log(2,5)%1))%10
(я упростилаint(n*log(2,5))-n*log(2,5)
как-(n*log(2,5)%1)
).2**n
аргумент здесь и диапазон.постоянный ток , 72 байта
Индексирование на основе 0.
При этом используется точная целочисленная арифметика - без логарифмических приближений. Это будет работать до объема памяти компьютера.
Попробуйте программу DC онлайн!
Код постоянного тока можно превратить в решение Bash:
Утилиты Bash + GNU,
967775 байтПопробуйте версию Bash онлайн!
источник
Mathematica,
666052 байтаАнонимная функция, 0-индексированная. Использует приближение log5 (10) (≈ 0,7)
Как это устроено?
Возьмите больше 2 ^ (вход) / 2 и 1. Сгенерируйте {1..that}
Добавить вход / .7
Поднимите 5 до степени результата (генерируя степени 5), разделите на 10 ^ вход (избавляясь от цифр справа от нужного столбца)
Применить по модулю 10, взяв одну цифру (нужный столбец).
Точная версия, 58 байт
источник
JavaScript (ES7),
7876 байт0-индексируется, т.е.
f(0)
дает2
.Тестовый фрагмент
Показать фрагмент кода
Фрагмент использует
Math.pow
вместо**
кросс-браузерной совместимости.источник
CJam, 35
Попробуйте онлайн
Он занимает мало места и не очень медленный, на ввод 30 на моем компьютере потребовалось несколько минут (с использованием интерпретатора Java).
источник
Желе ,
2621 байт-2 байта, используя идею приближения Кеннимма 0,7
Попробуйте онлайн! (время ожидания для n> 15 )
Возвращает список целых чисел, цифр.
Нулевой Теоретически работает при n <= 72 (замените
.7
на5l⁵¤
, чтобы получить точность с плавающей запятой).Как?
Локально: память рабочего набора для n = 17 возросла до 750 МБ, а затем выросла до 1 ГБ ; для n = 18 он медленно достигал 2,5 ГБ, а затем достигал 5 ГБ .
источник
Perl 6 , 52 байта
Работает для произвольно высоких входов, учитывая достаточную память (то есть без приближения логарифма) .
Возвращает список цифр.
Попробуйте онлайн!
Как это устроено
Часть "пропуск элемента" работает так:
//
является «определенным или» оператором.|()
возвращает пустой Slip , который растворяется во внешнем списке в виде 0 элементов, по существу, гарантируя, что текущий элемент пропущен.Крайний регистр
n=1
работает нормально, потому что2**n/4
становится0.5
и^(0.5)
означает0 ..^ 0.5
«целые числа от 0 (включительно) до 0,5 (не включительно)», то есть список с единственным элементом 0.источник
J, 50 байт
Примечание: должен пройти в расширенном номере
Использование:
источник
Haskell , 73 байта
Попробуйте онлайн! Использует 0-индексацию.
Объяснение:
источник
Пакетный, 294 байта
Выводит каждую цифру в отдельной строке. Работает путем вычисления степеней 5 longhand, но работает только
N=33
из-за использования 32-разрядных целых чисел, чтобы вести подсчет количества цифр для печати.s
содержит (перевернутые) последниеN
цифры текущей мощности 5, в то время какt
содержитx
s, используемые в качестве дополнения, хотяx=0
они заставляют их оценивать как ноль при расчете следующей мощности. Пример дляN=4
:источник
JavaScript (ES6), 73 байта
1-индексироваться. Немного короче, чем ответ ES7 , но проваливается на 3 шага раньше (при N = 13).
демонстрация
Показать фрагмент кода
источник
PHP> = 7.1, 104 байта
PHP Sandbox Online
источник