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!
code-golf
number
sequence
number-theory
metalim
źródło
źródło
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.Odpowiedzi:
CJam , 78 bajtów
Program ma długość 104 bajtów i kwalifikuje się do otrzymania premii.
Nowa linia jest czysto kosmetyczna. Pierwszy wiersz analizuje dane wejściowe, drugi generuje dane wyjściowe.
Wypróbuj online!
Pomysł
Dla każdej dodatniej liczby całkowitej k istnieje 9 × 10 k-1 dodatnich liczb całkowitych dokładnie k cyfr (nie licząc zer wiodących). Zatem łącząc je wszystkie, otrzymujemy liczbę całkowitą 9 × n × 10 k-1 .
Teraz łączenie wszystkich liczb całkowitych n lub mniej daje liczbę całkowitą
cyfry
Dla danego wejścia q próbujemy ustalić najwyższą wartość n, tak aby powyższe wyrażenie było mniejsze niż q . Ustawiamy n: = ⌈log 10 q⌉-1 , a następnie n: = ⌈log 10 q⌉-2 itd., Aż żądane wyrażenie stanie się mniejsze niż q , odejmij wynikowe wyrażenie od q (dając r ) i zapisz ostatnie wartość n w l .
R obecnie określa indeks złączonych dodatnich liczb całkowitych L + 1 cyframi, co oznacza, że sygnał wyjściowy IS r% (L + 1) p cyfra R / (L + 1) p całkowitą L + 1 cyfry
Kod (parsowanie danych wejściowych)
Kod (generowanie danych wyjściowych)
źródło
CJam, 75 * 0,75 = 56,25
Jest to dość szybkie, jedna iteracja na cyfrę liczby zawierającej żądaną pozycję. Jestem pewien, że można grać w golfa o wiele więcej, jest dość prymitywny.
Podaj pozycję jako dane wejściowe, dane wyjściowe to:
Wypróbuj online .
źródło
1.23e1
. Błąd jednak,1.23456e123456
ponieważ wejście nie może być reprezentowane przez Double. Ponadto ostatnie przypadki testowe trwają 3 minuty.