Definicja
Istnieje nieskończony rząd połączonych liczb naturalnych (dodatnie liczby całkowite, zaczynające się od 1):
1234567891011121314151617181920212223...
Wyzwanie
- Napisz program w dowolnym języku, który przyjmuje numer pozycji jako dane wejściowe i wypisuje cyfrę z tej pozycji w wierszu zdefiniowanym powyżej.
- Numer pozycji jest liczbą całkowitą dodatnią o dowolnym rozmiarze. To jest pierwsza pozycja to 1, co daje cyfrę wyjściową „1”
- Dane wejściowe są albo w systemie dziesiętnym (np. 13498573249827349823740000191), albo w e-notacji (np. 1,2e789) odpowiadającej dodatniej liczbie całkowitej.
- Program musi zakończyć się w rozsądnym czasie (10 sekund na nowoczesnym komputerze PC / Mac), biorąc pod uwagę bardzo duży indeks jako dane wejściowe (np. 1e123456 - czyli 1 z 123456 zerami). Zatem prosta pętla iteracji jest niedopuszczalna.
- Program musi zakończyć się z błędem w ciągu 1 s, jeśli otrzyma jakiekolwiek nieprawidłowe dane wejściowe. Na przykład. 1.23e (niepoprawny) lub 1.23e1 (odpowiada 12,3 - nie jest liczbą całkowitą)
- Można używać publicznej biblioteki BigNum do analizowania / przechowywania numerów i wykonywania prostych operacji matematycznych na nich (+ - * / exp). Nie zastosowano kary bajtowej.
- Najkrótszy kod wygrywa.
TL; DR
- Dane wejściowe: liczba całkowita bignum
- Wyjście: cyfra w tej pozycji w nieskończonym rzędzie
123456789101112131415...
Niektóre przypadki testów akceptacyjnych
w notacji „Wejście: Wyjście”. Wszyscy powinni przejść.
- 1: 1
- 999: 9
- 10000000: 7
- 1e7: 7 (taki sam jak wiersz powyżej)
- 13498573249827349823740000191: 6
- 1.1e10001: 5
- 1e23456: 5
- 1.23456e123456: 4
- 1e1000000: 0
- 1.23e: błąd (niepoprawna składnia)
- 0: błąd (poza zakresem)
- 1.23e1: błąd (nie liczba całkowita)
Premia!
Numer pozycji wyjściowej cyfry wewnątrz numeru i sam numer wyjściowy. Na przykład:
13498573249827349823740000191: 6 24 504062383738461516105596714
- To jest cyfra „6” w pozycji 24 numeru „50406238373846151610559 6 714”
1e1000000: 0 61111 1000006111141666819445...933335777790000
- Cyfra „0” na pozycji 61111 o długości 999995 cyfr, której nie będę tutaj uwzględniać.
Jeśli wykonasz zadanie premiowe, pomnóż rozmiar swojego kodu przez 0,75
Kredyt
To zadanie zostało powierzone na jednym ze spotkań devclub.eu w 2012 roku, bez dużej liczby wymagań. W związku z tym większość przesłanych odpowiedzi była trywialnymi pętlami.
Baw się dobrze!
1.23456e123456
arbitralnie, karzą języki, które nie mogą przetwarzać takich wartości w sposób natywny i wymagają przetwarzania ciągów, które są styczne do wyzwania.