Oświadczenie: chociaż od jakiegoś czasu jestem na tej stronie w celach rozrywkowych, to jest moje pierwsze pytanie, więc proszę wybaczyć wszelkie drobne błędy.
tło
Przydzielając nam pracę domową, mój nauczyciel jest naprawdę denerwujący i zapisuje wszystkie problemy, które musimy zrobić indywidualnie. W związku z tym na zawsze zajmuje mi zapisywanie , które problemy muszę zrobić. Pomyślałem, że moje życie będzie łatwiejsze, wyślę mu program, który sprawi, że lista problemów zajmie mniej miejsca.
Zapisując listę numerów stron lub problemów, używamy myślnika do oznaczenia zakresu. Na przykład 19-21
staje się 19, 20, 21
. Jeśli pomiędzy nimi jest przerwa, używane są dwa przedziały oddzielone przecinkami: 19-21, 27-31
staje się 19, 20, 21, 27, 28, 29, 30, 31
.
W tej chwili prawdopodobnie myślisz: „wydaje się to dość trywialne”. W rzeczywistości na to pytanie zostało już udzielone tu i tutaj .
Istnieje jednak pewien haczyk. Jeśli mamy zakres z jednakowymi kolejnymi cyframi, powtarzające się cyfry można pominąć. Na przykład: 15, 16, 17
staje się 15-7
i 107, 108, 109
staje 107-9
. W przypadku premii, jeśli ostatnia z kolei równa cyfra jest o 1 większa, a ostatnia cyfra górnego limitu jest mniejsza lub równa cyfrze dolnej, można pominąć następujące (przepraszam, jeśli zabrzmiało to myląco; być może niektóre przykłady to wyjaśnią) . 109-113
staje się 109-3
, ponieważ ostatnia ostatnia cyfra oznacza zwiększenie miejsca 10.
Wyzwanie
Twój program powinien pobierać listę liczb całkowitych poprzez dane wejściowe (cokolwiek jest standardowe dla twojego języka lub funkcji). Możesz zdecydować, czy ta lista jest rozdzielana przecinkami, spacjami, czy jako rzeczywista lista / tablica.
Wyprowadzaj najkrótszą drogę (najpierw posortowaną według liczby zakresów, a następnie sumy znaków zawartych w zakresach), aby przedstawić tę listę za pomocą tej notacji. Każdy zakres przerywany musi znajdować się w tym samym wierszu, ale zakresy można oddzielić przecinkami lub znakami nowej linii (dozwolone są znaki końca linii lub przecinków). Te zakresy muszą być w porządku.
Ponieważ nasza szkolna sieć Wi-Fi jest okropna , muszę zminimalizować plik, aby go wysłać. Najkrótszy kod (w bajtach) wygrywa.
Bonusy
Mój nauczyciel jest niechlujny, więc jest kilka rzeczy, które mogłyby mu pomóc. Wiele premii kumuluje się poprzez pomnożenie, np. Premia -10% (x 90%) i premia -25% (x 75%) = 90% * 75% = x 67,5% (premia -32,5%).
- Czasami układa je w niewłaściwej kolejności (nie jest nauczycielem matematyki). Zdobądź premię -20%, jeśli twój program może przyjmować liczby całkowite, które nie są sortowane od najmniej do największej.
- Nasza książka jest dziwna i każda sekcja zaczyna liczyć problemy od -10. Jeśli twój program akceptuje liczby ujemne, weź -25%.
- Jeśli zaakceptuje bonus niższej ostatniej cyfry, zwiększając miejsce 10, np.
25-32
Zmniejszając do25-2
, weź bonus -50%.
Przypadki testowe
In: 1, 2, 3, 4, 5
Out: 1-5
In: 3, 4, 5, 9, 10, 11, 12
Out: 3-5, 9-12
In: 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
Out: 149-60
In: 1 2 3 4
Out: 1-4
For bonuses:
In: 109, 110, 111, 112, 113
Out: 109-3
In: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
Out: 19-9
In: -3, -2, -1, 0, 1, 2
Out: -3-2
In: -3, -2, -1
Out: -3--1
Odpowiedź zostanie zaakceptowana w sobotę, 19 grudnia 2015 r.
GLHF!
149 150 151 152 153 154 155 156 157 178 159 160
?
19-9
za, 19,20,...,29
a nie 19-29
jak sugeruje tekst. Więc co jest poprawne?
1-4 9-2
?