05AB1E , 8 7 5 Bytes
2 Bytes dank @Adnan gespart
0š¥þO
Probieren Sie es online!
Wie?
Hierbei wird der Algorithmus verwendet, der zuerst von @tsh gefunden wurde . Wenn Ihnen diese Antwort gefällt, stellen Sie sicher, dass Sie auch die Antwort positiv bewerten !
Jedes Mal, wenn ein Wolkenkratzer niedriger als oder so hoch wie der vorherige ist, kann er durch einfaches Ausfahren der Pinselstriche "kostenlos" bemalt werden.
Das Malen der Wolkenkratzer und in der folgenden Abbildung kostet beispielsweise nichts.BC
Auf der anderen Seite brauchen wir 2 neue Pinselstriche, um Wolkenkratzer zu malen , egal ob sie danach wiederverwendet werden oder nicht.E
Für den ersten Wolkenkratzer brauchen wir immer so viele Pinselstriche, wie Böden darin sind.
Das in Mathematik umwandeln:
S=h0+∑i=1nmax(hi−hi−1,0)
Wenn wir der Liste voranstellen , kann dies vereinfacht werden, um:0
S=∑i=1nmax(hi−hi−1,0)
Kommentiert
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