Definición
Hay una fila infinita de números naturales concatenados (enteros positivos, que comienzan con 1):
1234567891011121314151617181920212223...
Reto
- Escriba el programa en cualquier idioma, que acepte el número de posición como entrada, y genere dígitos desde esa posición en la fila definida anteriormente.
- El número de posición es un entero positivo de tamaño arbitrario. Esa es la primera posición es 1, produciendo el dígito de salida '1'
- La entrada está en decimal (por ejemplo, 13498573249827349823740000191) o en notación electrónica (por ejemplo, 1.2e789) correspondiente a un entero positivo.
- El programa debe finalizar en un tiempo razonable (10 segundos en una PC / Mac moderna), dado un índice muy grande como entrada (por ejemplo, 1e123456, es decir, 1 con 123456 ceros). Por lo tanto, el bucle de iteración simple no es aceptable.
- El programa tiene que terminar con un error en 1 s, si se le da alguna entrada no válida. P.ej. 1.23e (inválido), o 1.23e1 (igual a 12.3 - no es un número entero)
- Está bien usar la biblioteca pública BigNum para analizar / almacenar números y realizar operaciones matemáticas simples en ellos (+ - * / exp). No se aplica penalización por byte.
- El código más corto gana.
TL; DR
- Entrada: entero bignum
- Salida: dígito en esa posición en fila infinita
123456789101112131415...
Algunos casos de prueba de aceptación
en notación "Entrada: Salida". Todos deberían pasar.
- 1: 1
- 999: 9
- 10000000: 7
- 1e7: 7 (igual que la fila de arriba)
- 13498573249827349823740000191: 6
- 1.1e10001: 5
- 1e23456: 5
- 1.23456e123456: 4
- 1e1000000: 0
- 1.23e: error (sintaxis no válida)
- 0: error (fuera de límites)
- 1.23e1: error (no es un número entero)
¡Prima!
Número de posición del dígito de salida dentro del número, y el número de salida en sí. Por ejemplo:
13498573249827349823740000191: 6 24 504062383738461516105596714
- Eso de dígitos '6' en la posición 24 de la serie '50406238373846151610559 6 714'
1e1000000: 0 61111 1000006111141666819445...933335777790000
- Dígito '0' en la posición 61111 del número largo de 999995 dígitos que no voy a incluir aquí.
Si cumple la tarea de bonificación, multiplique el tamaño de su código por 0.75
Crédito
Esta tarea se dio en una de las reuniones de devclub.eu en el año 2012, sin un gran número de requisitos. Por lo tanto, la mayoría de las respuestas enviadas fueron bucles triviales.
¡Que te diviertas!
1.23456e123456
castigan arbitrariamente los lenguajes que no pueden procesar dichos valores de forma nativa y requieren que realicen un procesamiento de cadena que sea tangencial al desafío.