05AB1E , 8 7 5 byte
Salvato 2 byte grazie a @Adnan
0š¥þO
Provalo online!
Come?
Questo sta usando l'algoritmo che è stato trovato per la prima volta da @tsh . Se ti piace questa risposta, assicurati di votare anche la loro risposta !
Ogni volta che un grattacielo è più basso o più alto del precedente, può essere dipinto "gratuitamente" semplicemente estendendo le pennellate.
Ad esempio, dipingere i grattacieli B e C nella figura seguente non costa nulla.
E
Per il primo grattacielo, abbiamo sempre bisogno di tante pennellate quanti sono i pavimenti.
Trasformando questo in matematica:
S=h0+∑i=1nmax(hi−hi−1,0)
Se anteponiamo all'elenco, questo può essere semplificato per:0
S=∑i=1nmax(hi−hi−1,0)
Commentate
0š¥þO # expects a list of non-negative integers e.g. [10, 9, 8, 9]
0š # prepend 0 to the list --> [0, 10, 9, 8, 9]
¥ # compute deltas --> [10, -1, -1, 1]
þ # keep only values made of decimal digits
# (i.e. without a minus sign) --> ["10", "1"]
O # sum --> 11