Wyzwanie Podjęte za zgodą mojego konkursu na University Code Challenge
Zależność od telefonów komórkowych sprawia, że co noc ładujemy je do maksymalnego poziomu baterii, więc nie ryzykujemy wyczerpania energii do połowy następnego dnia. Są nawet ludzie, którzy widząc bezpłatny punkt w ciągu dnia, naliczają go za to, co może się zdarzyć.
Jestem jednym z nich.
Przez lata doskonaliłem swoją technikę, aby nie ładować baterii do maksimum każdej nocy. Dzięki moim doskonale znanym powtarzalnym procedurom mam jasność, o jakich porach dnia będę w stanie wykonać te częściowe doładowania (i o ile jednostek poziom się zwiększy) i co obniża poziom baterii między poszczególnymi ładowaniami. Na podstawie tych danych co noc obliczam minimalny poziom naładowania baterii, z którym muszę wyjść z domu następnego dnia, aby nigdy nie spadł poniżej mojego narzuconego progu dwóch jednostek.
To, czego jeszcze nie udało mi się opanować, to takie same obliczenia, kiedy odchodzę od ustalonej rutyny i mam kilka alternatywnych rzeczy do zrobienia. Zdarza się to na przykład w dniach, gdy jestem w drodze do innego miasta, do którego mogę dotrzeć na różne sposoby.
W moim pierwszym podejściu do problemu zakładam, że chcę poruszać się po „szachownicy”, od lewego górnego rogu do prawego dolnego rogu. W każdej „komórce” mogę albo naładować komórkę określoną kwotą, albo nie mogę i jej poziom obciążenia spada.
Wyzwanie
Biorąc pod uwagę macierz FxC liczb całkowitych, wypisz minimalną ilość poziomu baterii, którą muszę przejść od lewego górnego rogu do prawego dolnego rogu, bez obciążenia nigdy poniżej 2 jednostek.
W matrycy liczba dodatnia wskazuje, ile mogę naładować mój telefon komórkowy, zanim muszę wznowić podążanie moją ścieżką, a liczba ujemna oznacza, że nie ma gniazdek i że bateria telefonu komórkowego obniża poziom naładowania o tę kwotę. Gwarantuje się, że ilości w komórkach źródłowej i docelowej (lewy górny i prawy dolny róg) zawsze wynoszą 0, a reszta wartości (wartość bezwzględna) nie przekracza 100.
Ścieżka, której potrzebuję mniej baterii to:
A potrzebna mi minimalna ilość baterii to 4
Notatki
- Start zawsze będzie lewym górnym rogiem
- Koniec zawsze będzie prawym dolnym rogiem
- Nie możesz przejść do komórki, którą już przekazałeś. Przykład: w pozycji (0,1) nie można przejść do punktu początkowego (0,0)
- Poziom naładowania baterii nie może (z jakiegokolwiek powodu) przekroczyć 2
- Możesz założyć, że zawsze będzie początek i koniec
- W razie potrzeby można traktować tablice jednowymiarowe jako wielowymiarowe
[1,2,3] == [[1,2,3]]
- Może istnieć wiele prawidłowych (minimalnych potrzebnych opłat) ścieżek
- Twoim celem jest uzyskanie najniższego wymaganego początkowego poziomu naładowania akumulatora, a nie trasy
- Możesz poruszać się tylko w pionie i poziomie (nie po przekątnej)
Przypadki testowe
[0, 0] => 2
[0, 1, 0] => 2
[0, -1, 0] => 3
[0, 15, -20, 5, 0] => 7
[[0, -3],[-5, 0]] => 5
[[0, -5, -9, 5], [-3, 5, 2, -2], [2, -4, -4, 0]] => 5
[[0, -1, 1, -1], [-1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, 0]] => 4
źródło
[[0,1,-1],[-9,-9,1],[-9,1,-1],[-9,-1,-9],[-9,1,0]]
0s
umieszczone jeden w lewym górnym rogu, a drugi w prawym dolnym roguOdpowiedzi:
JavaScript (ES7),
162 156154 bajtówWypróbuj online!
Skomentował
źródło
Python 2 ,
208202 bajtówWypróbuj online!
Python 2 ,
217211 bajtówWypróbuj online!
źródło
R ,
224220217213210 bajtówWypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 242 bajty
Wypróbuj online!
źródło