Geben Sie bei Eingabe einer Liste von Blöcken, die an bestimmten Punkten abgelegt werden sollen, die Höhe des resultierenden "Turms" aus.
Diese Herausforderung lässt sich am besten anhand eines Beispiels erklären. Die Eingabe ist eine Liste von 2n ganzen Zahlen, die n Blöcke darstellen. Die erste Ganzzahl ist die x-Position des Blocks, 0-indiziert, und die zweite ist die Breite des Blocks. Beispielsweise stellt eine Eingabe von 2 4
den Block dar (mit den unten angegebenen x-Koordinaten):
####
0123456789
Nehmen wir an, die Eingabe ist 2 4 4 6
. Das heißt, ein Block bei x = 2 mit einer Breite von 4 und einer bei x = 4 mit einer Breite von 6:
######
####
Beachten Sie, dass a.) Blöcke immer von der Spitze des Turms "fallen" und b.) Blöcke niemals "umfallen" (dh sie balancieren immer). Eine Eingabe von 2 4 4 6 12 1
stellt also Folgendes
dar:
######
#### #
Beachten Sie, dass der letzte Block bis zum "Boden" gefallen ist.
Ihre endgültige Ausgabe sollte die maximale Höhe des Turms bei jedem x-Wert bis zum größten sein. Daher sollte die Eingabe 2 4 4 6 12 1
zur Ausgabe führen
0011222222001
:
######
#### #
0011222222001
Die Eingabe kann entweder als durch Leerzeichen / Komma getrennte Zeichenfolge, als Array von Ganzzahlen oder als Funktions- / Befehlszeilenargument erfolgen. Die Blockpositionen (x-Werte) sind immer ganze Zahlen von 0 oder mehr, die Breite ist immer eine ganze Zahl von 1 oder mehr und es gibt immer mindestens einen Block.
Die Ausgabe kann als einzelne Zeichenfolge, die durch nicht numerische Zeichen getrennt ist (z. B. "0, 0, 1, ..."
), als einzelne Zeichenfolge, in der alle Ziffern aufgelistet sind (z.
"001..."
B. - die maximale Höhe darf garantiert 9 oder weniger betragen), oder als Array von Ganzzahlen erfolgen.
Da es sich um Code-Golf , wird der kürzeste Code in Bytes gewinnen.
Testfälle:
In Out
---------------------------------------------------------
2 4 4 6 12 1 0011222222001
0 5 9 1 6 4 2 5 1133333222
0 5 9 1 2 5 6 4 1122223333
0 5 2 5 6 4 9 1 1122223334
20 1 20 1 20 1 00000000000000000003
5 5 000011111
0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 4 123456789999
Antworten:
CJam,
3430 BytesEingabe als Array im CJam-Stil, Ausgabe als Ziffernfolge.
Führen Sie alle Testfälle aus.
Hier sind zwei Varianten einer anderen Idee, die jedoch derzeit 2 Byte länger ist:
quelle
Python 3, 89
Probieren Sie es online aus .
Die Funktion nimmt eine Liste von ganzen Zahlen auf und gibt sie zurück.
quelle
Rubin,
8887 BytesProbieren Sie es online aus.
Inspiriert von der Antwort von grc, aber in einer anderen Sprache und nur etwas kürzer.
Erläuterung:
quelle
APL, 79 Bytes
Eingabe als APL-Array, Ausgabe als APL-Array von Ziffern.
quelle
{⊃{o←⍵↑⍨z←(≢⍵)⌈a←+/⍺⋄e←z↑(-a)↑⍺[1]⍴1⋄o+0⌈o-⍨e×e⌈.+e×o}/⌽(⊂⍬),↓⍵⍴⍨⌽2,.5×≢⍵}
(Mein Gott, lerne es⍨
richtig zu benutzen )⊃
und nicht zu kennen,1↑
und aus diesem Grund geben Sie Vorschläge, die dazu führen, dass das aktualisierte Programm das falsche Ergebnis liefert, aber ich bevormunden Sie nicht.0.5
Java 1.8,
351329 BytesIch bin nicht begeistert von diesem ersten Versuch - ich bin sicher, dass das Double-Looping und alle diese Integer.valueOf's noch mehr Golf spielen können.
Ungolfed
quelle