Modifica: assegnerò una ricompensa di 100 reputazione per il primo risolutore del puzzle bonus alla fine della domanda!
Aggiungerò la generosità alla domanda solo quando appare la risposta poiché questa generosità non ha scadenza.
Dato un elenco non decrescente di numeri interi positivi a una cifra, è necessario determinare la profondità della scavatura delle cifre.
███ ███ A dungeon with 5 blocks removed and a depth of 3.
███ ███
███ ████
████████
Prima dell'inizio dello scavo il terreno è a livello.
Ogni cifra può rimuovere esattamente un blocco di terreno dal basso ma deve raggiungere quella posizione dall'esterno del sotterraneo e dopo aver rimosso il blocco deve lasciare il sotterraneo. Nel fare ciò una cifra non può scendere o salire più del suo valore numerico in nessun passo orizzontale.
Le cifre utilizzano la seguente strategia per scavare:
- La cifra con il valore più piccolo scava i primi e dopo quello il prossimo scavatore è sempre il valore più piccolo successivo dal resto delle cifre.
- La prima cifra può scavare in qualsiasi posizione. (Tutto il terreno è uguale.)
- Le seguenti cifre scavano sempre nella colonna già iniziata all'estrema sinistra, dove possono andare ed uscire. Se tale colonna non esiste, iniziano a scavare una nuova colonna sul lato destro di quella più a destra.
Ad esempio, le cifre 1 1 1 2 3 3
scaverebbero il seguente dungeon (visualizzazione dettagliata con numeri che segnano il tipo di cifra che scava quella posizione):
███1████ ███11███ ███11███ ███11███ ███11███ ███11███
████████ ████████ ███1████ ███1████ ███1████ ███13███
████████ ████████ ████████ ███2████ ███2████ ███2████
████████ ████████ ████████ ████████ ███3████ ███3████
████████ ████████ ████████ ████████ ████████ ████████
Spiegazione per l'esempio:
- Il secondo
1
non potrebbe uscire dall'unica colonna disponibile se la approfondisse fino a2
-deep in modo da scavare fino ad essa. - Il terzo
1
può scavare nella colonna più a sinistra creando una2
colonna -deep in quanto può spostarsi nella1
colonna -deep e quindi al livello del suolo. - Il prossimo
2
ed3
entrambi possono scavare nella colonna più a sinistra. - L'ultimo
3
non può scavare nella colonna più a sinistra, ma può nella successiva.
Ingresso
- Un elenco non decrescente di numeri interi a una cifra positivi con almeno un elemento.
Produzione
- Un singolo numero intero positivo, la profondità del dungeon costruito.
Esempi
Input => Output (con la profondità delle colonne del dungeon da sinistra a destra come spiegazione che non fa parte dell'output)
[3] => 1
(column depths are [1])
[1, 1, 1, 2, 3, 3] => 4
(column depths are [4, 2])
[1, 1, 1, 1, 1, 1, 1, 1] => 3
(column depths are [3, 2, 2, 1])
[1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5] => 11
(column depths are [11, 6, 2])
[1, 1, 1, 1, 1, 2, 2, 9, 9, 9] => 7
(column depths are [7, 2, 1])
[2, 2, 2, 2, 2, 5, 5, 5, 7, 7, 9] => 9
(column depths are [9, 2])
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5] => 10
(column depths are [10, 5])
[1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 7, 7, 9] => 13
(column depths are [13, 5])
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] => 13
(column depths are [13, 5])
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9] => 21
(column depths are [21, 12, 3])
Questo è code-golf, quindi vince l'ingresso più breve.
Puzzle bonus
Puoi provare (o confutare) che la strategia descritta nella sezione "Le cifre usano la seguente strategia per scavare" fornisce sempre il dungeon più profondo possibile per le cifre indicate?