Wyzwanie polega na zidentyfikowaniu brakującej liczby w ciągu nieokreślonych liczb całkowitych.
Otrzymujesz ciąg cyfr (prawidłowe dane wejściowe będą pasować do wyrażenia regularnego ^[1-9][0-9]+$
). Ciąg reprezentuje ciąg liczb całkowitych. Na przykład 1234567891011
. Wszystkie liczby w sekwencji są w zakresie od 1
i 2147483647
włącznie.
Sekwencja jest ciągiem liczb, w których każda liczba jest o jeden większa od swojego poprzednika. Jednak ta sekwencja może zawierać jedną i tylko jedną brakującą liczbę z sekwencji. Możliwe, że dany ciąg nie zawiera również brakujących liczb w sekwencji. Ciąg zawsze będzie zawierał co najmniej dwie liczby z sekwencji.
Kod musi wygenerować lub zwrócić brakującą wartość lub 0
(to 0
nie jest wartość fałsz) w przypadku, gdy nie znaleziono brakujących wartości.
Poniżej przedstawiono prawidłowe dane wejściowe i ich wynik / zwrot:
input output actual sequence (for refrence)
123467 5 1 2 3 4 _ 6 7
911 10 9 __ 11
123125126 124 123 ___ 125 126
8632456863245786324598632460 8632458 8632456 8632457 _______ 8632459 8632460
123 0 1 2 3
8632456863245786324588632459 0 8632456 8632457 8632458 8632459
Chociaż wszystko to jest opisane jako „ciąg” jako dane wejściowe, jeśli język jest w stanie obsłużyć dowolnie duże liczby ( dc
i mathematica
, patrzę na was dwoje), wejściem może być dowolnie duża liczba zamiast łańcucha, jeśli to powoduje kod łatwiejszy.
Dla porównania, zostało to zainspirowane pytaniem Programmers.SE: Znajdź brakującą liczbę w sekwencji w ciągu
Odpowiedzi:
Haskell,
115112 bajtówPierwsza linia to definicja funkcji pomocniczej, druga to główna funkcja anonimowa. Sprawdź przypadki testowe (musiałem przeprowadzić krótsze testy z powodu ograniczeń czasowych).
Wyjaśnienie
Jest to rozwiązanie z użyciem siły brute: podziel łańcuch na słowa na wszystkie możliwe sposoby, parsuj słowa do liczb całkowitych, sprawdź, czy jest to zakres z brakującym jednym elementem (zwracając ten element itp.
0
), I weź maksimum dla wszystkich podziałów. Sprawdzanie zakresu z brakującym elementem jest wykonywane w funkcji pomocnikag
, która pobiera listęb
i zwraca jedyny element z zakresu,[head of b..last of b]
który nie jest w zasięgub
lub0
jeśli nie istnieje.źródło
JavaScript (ES6), 117 bajtów
Wyjaśnienie
Dość wydajne podejście. Kończy się natychmiast dla wszystkich przypadków testowych.
Pobiera każdy podciąg od początku ciągu wejściowego jako liczbę
n
i inicjuje brakującą liczbęm
na0
. Następnie kilkakrotnie usuwan
początek łańcucha, inkrementujen
i wyszukuje go. Jeśliindex of n != 0
to sprawdzim
. Jeślim == 0
ustawm = n
i kontynuuj, jeśli nie, istnieje wiele brakujących liczb, więc przestań sprawdzać z tego podłańcucha. Proces ten trwa do momentu usunięcia całego łańcucha.źródło
JavaScript (ES6) 114
Mniej golfa i wyjaśnienia
Test
źródło
C
183168166163 bajtówNie golfił
źródło
891112
Gdzie liczby mają różne długości?sprintf
Wywołanie zwraca długość brakującej liczby, niezależnie czy jest to dłużej niż poprzedni, czy nie.