La sfida è stata presa con il permesso del mio concorso per la sfida del codice universitario
La dipendenza che abbiamo sui telefoni cellulari ci fa caricare ogni notte fino al livello massimo della batteria, quindi non corriamo il rischio di rimanere senza energia entro la metà del giorno successivo. Ci sono anche persone che, quando vedono uno sbocco gratuito durante il giorno, lo fanno pagare per ciò che può accadere.
Sono uno di loro.
Nel corso degli anni, ho perfezionato la mia tecnica per non caricare la batteria al massimo ogni notte. Con le mie routine ripetitive perfettamente conosciute, sono chiaro su quali orari della giornata sarò in grado di fare quelle ricariche parziali (e quante unità aumenterà il livello) e cosa abbassa il livello della batteria tra ogni carica. Con questi dati, ogni notte calcolo il livello minimo della batteria con cui devo uscire di casa il giorno successivo in modo che non scenda mai sotto la mia soglia autoimposta di due unità.
Quello che non sono ancora riuscito a padroneggiare è lo stesso calcolo quando lascio la routine stabilita e ho diverse alternative per fare le cose. Succede, ad esempio, nei giorni in cui sono in viaggio verso un'altra città a cui posso arrivare in diversi modi.
Nel mio primo approccio al problema, presumo di voler muovermi in una "scacchiera", dall'angolo in alto a sinistra all'angolo in basso a destra. In ogni "cella" posso caricare il cellulare un importo specifico, oppure non posso e il suo livello di carico scende.
Sfida
Data una matrice FxC di numeri interi, genera la quantità minima di livello di batteria di cui ho bisogno per passare dall'angolo superiore sinistro a quello inferiore destro senza che il livello di carico scenda mai al di sotto di 2 unità.
Nella matrice, un numero positivo indica quanto posso caricare il mio telefono cellulare prima di dover riprendere a seguire il mio percorso, mentre un numero negativo indica che non ci sono prese e che la batteria del cellulare abbassa il suo livello di carica di tale importo. È garantito che le quantità nelle celle di origine e di destinazione (angolo in alto a sinistra e in basso a destra) sono sempre 0 e che il resto dei valori (valore assoluto) non superi 100.
Esempio
dato:
Il percorso di cui ho bisogno di meno batteria è:
E il livello minimo della batteria di cui ho bisogno è 4
Appunti
- L'inizio sarà sempre l'angolo in alto a sinistra
- La fine sarà sempre l'angolo in basso a destra
- Non puoi andare in una cella che hai già superato. Esempio: una volta in posizione (0,1), non è possibile passare al punto iniziale (0,0)
- Il livello della batteria non può (per qualsiasi motivo) scendere al di sotto di 2
- Puoi presumere che ci sarà sempre un inizio e una fine
- Puoi prendere le matrici monodimensionali come multidimensionali, se necessario
[1,2,3] == [[1,2,3]]
- Possono esserci più percorsi corretti (costo minimo necessario)
- Il tuo obiettivo è fornire solo il livello di batteria iniziale più basso necessario, non il percorso
- Puoi andare solo in verticale e in orizzontale (non in diagonale)
Casi test
[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
[[0,1,-1],[-9,-9,1],[-9,1,-1],[-9,-1,-9],[-9,1,0]]
0s
posti uno nell'angolo in alto a sinistra e l'altro in fondo a destra