Определение
Существует бесконечный ряд объединенных натуральных чисел (положительные целые числа, начиная с 1):
1234567891011121314151617181920212223...
Вызов
- Напишите программу на любом языке, который принимает номер позиции в качестве ввода и выводит цифры из этой позиции в строке, определенной выше.
- Номер позиции - произвольный размер положительного целого числа. То есть первая позиция равна 1, получая выходную цифру «1»
- Входные данные либо в десятичном виде (например, 13498573249827349823740000191), либо в электронной записи (например, 1.2e789), соответствующие положительному целому числу.
- Программа должна завершиться за разумное время (10 секунд на современном ПК / Mac), учитывая очень большой индекс в качестве входа (например, 1e123456 - то есть 1 с 123456 нулями). Таким образом, простой итерационный цикл не приемлем.
- Программа должна завершиться с ошибкой в 1 с, если дан неверный ввод. Например. 1,23e (недействительно) или 1,23e1 (равно 12,3 - не целое число)
- Можно использовать публичную библиотеку BigNum для анализа / хранения чисел и выполнения простых математических операций с ними (+ - * / exp). Байт-штраф не применяется.
- Самый короткий код выигрывает.
TL; DR
- Ввод: целое число
- Вывод: цифра в этой позиции в бесконечном ряду
123456789101112131415...
Некоторые приемочные тесты
в обозначении «Вход: выход». Все они должны пройти.
- 1: 1
- 999: 9
- 10000000: 7
- 1e7: 7 (аналогично строке выше)
- 13498573249827349823740000191: 6
- 1.1e10001: 5
- 1e23456: 5
- 1.23456e123456: 4
- 1e1000000: 0
- 1.23e: ошибка (неверный синтаксис)
- 0: ошибка (за пределами)
- 1.23e1: ошибка (не целое число)
Бонус!
Выведите номер позиции цифры внутри номера и сам номер выхода. Например:
13498573249827349823740000191: 6 24 504062383738461516105596714
- Это цифра '6' в позиции 24 номера '50406238373846151610559 6 714'
1e1000000: 0 61111 1000006111141666819445...933335777790000
- Цифра «0» в позиции 61111 длинного номера 999995, который я не собираюсь здесь включать.
Если вы выполнили бонусное задание, умножьте размер кода на 0,75
кредит
Это задание было дано на одном из собраний devclub.eu в 2012 году без требования большого количества. Следовательно, большинство представленных ответов были тривиальными петлями.
Повеселись!
1.23456e123456
произвольно наказывают языки, которые не могут обрабатывать такие значения естественным образом, и требуют, чтобы они выполняли обработку строк, которая является касательной к задаче.