Einführung
Einige von Ihnen haben vielleicht von Hilberts Grand Hotel gehört . Der Manager dort hat seine Liste mit den Aufenthaltsorten der Gäste verloren, hat jedoch immer noch die Reihenfolge, in der sie eingecheckt haben. Jeder Gast kann nicht in einem Zimmer mit einer niedrigeren Zimmernummer als ihrem Wert übernachten und wenn ein Gast zu einer niedrigeren hinzugefügt wird zimmer, alle gäste in höheren zimmern ohne leeren raum zwischen ihnen und dem neuen gast werden um ein zimmer nach oben verschoben. Können Sie ihm helfen, herauszufinden, wo sich die Gäste aufhalten?
Bedarf
Schreiben Sie ein Programm, das eine geordnete Liste natürlicher Zahlen als Eingabe erhält und diese an ihrem Index ablegt. Wenn der Index bereits einen Wert enthält, wird er zum nächsten Eintrag in der Liste verschoben. Dieser Vorgang wird wiederholt, bis der erste leere (0 oder undefinierte) Bereich gefunden wurde. Undefinierte Leerzeichen zwischen dem aktuell höchsten Index und neuen Eingaben werden durch Hinzufügen von Nullen aufgefüllt. Da dies Hilberts Grand Hotel ist, gibt es keine Zimmer, die höher sind als der derzeit am höchsten belegte Index.
Ein- und Ausgang
Bei der Eingabe handelt es sich um eine geordnete Liste natürlicher Zahlen (die durch jede akzeptierte Form der Eingabe gelesen werden dürfen).
Jede Zahl in der Eingabe gilt als ein Gast, der im Hotel ankommt, und ist in der Reihenfolge seiner Ankunft
Ausgabe wird die endgültige Anordnung der Gäste (Zahlen) sein
Beispiele
Eingabe: 1 3 1
Ausgabe: 1 1 3
Schritt für Schritt:
1
Raum auf Index 1 anlegen und 1 darin platzieren
1 0 3
Räume auf Index 3 anlegen und 3 in Raum 3 platzieren
1 1 3
Verschieben Sie den Inhalt von Raum 1 nach oben ein Raum und Platz 1 in Raum 1Eingabe: 1 4 3 1 2 1
Ausgabe : 1 1 2 1 3 4
Schritt für Schritt:
1
Raum an Index 1 anlegen und 1 darin platzieren
1 0 0 4
Räume bis Index 4 anlegen und 4 in Raum 4
1 0 3 platzieren 4
Platzieren Sie 3 in Raum 3
1 1 3 4
Verschieben Sie den Inhalt von Raum 1 um einen Raum und platzieren Sie 1 in Raum 1
1 2 1 3 4
Verschieben Sie den Inhalt von Räumen 2 bis 4 um einen Raum und platzieren Sie 2 in Raum 2
1 1 2 1 3 4
Verschieben Sie den Inhalt der Räume 1 bis 5 um einen Raum und platzieren Sie 1 in Raum 1Eingabe: 10
Ausgabe: 0 0 0 0 0 0 0 0 0 0 10
Schritt für Schritt:
0 0 0 0 0 0 0 0 0 10
Erstellen Sie Räume bis zu Raum 10 und platzieren Sie 10 in Raum 10Hinweise: Das
Arbeiten mit einer indizierten 0 ist in Ordnung. In diesem Fall können Sie eine 0 vor der Ausgabe einfügen
Standardlücken sind verboten, kürzester Code in Bytes gewinnt
quelle
PHP 93 Bytes
0 indiziert. Verwendet eine 2-in-1-Schleife, die den nächsten Gast sucht, nachdem er eine 0 (oder ein Null-Formular, das über den aktuellen endgültigen Raum hinausgeht) erhalten hat. Verwenden Sie wie:
Ungolfed:
quelle
Haskell , 107 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
144120 Byte20B dank Arnauld und 11B dank Neil gerettet
Verwendung
Sie können die Funktion der Variablen zuweisen
f
und die Liste sollte als Array angegeben werden. Beispiel:Ausgabe
Die Ausgabe erfolgt ebenfalls in einem Array. Da Javascript mit einem Nullindex arbeitet, gibt es eine zusätzliche 0 im Voraus.
quelle
(c+'').split`,`.map(Number)
aber den Job machen?c.map(n=>n|0)
eher tun als(c+'').split`,`.map(Number)
.map()
undefinierte Werte im Array überhaupt nicht iteriert werden. (Das heißt, ich bin mir ziemlich sicher, dass es einen kürzeren Weg gibt als den, den ich vorgeschlagen habe.)JavaScript (ES6), 86 Byte
Führende Null im Ergebnis, da JavaScript 0-indiziert ist.
quelle
Mathematica, 98 Bytes
Unbenannte Funktion, die eine Liste positiver Ganzzahlen aufnimmt und eine 0-indizierte Liste von Ganzzahlen zurückgibt. Die gesamte
If
Funktion benötigt eine unvollständige Liste und die nächste Ganzzahl, die als Argumente eingefügt werden soll. Wenn die nächste Ganzzahl die Länge der Teilliste überschreitet,PadRight@##~Append~#2
wird die Teilliste entsprechend erhöht. Andernfalls wirdJoin[Take@##,{#2},Drop@##/.{a___,0,b__}->{a,b}]]
die nächste Ganzzahl an ihrer Position eingefügt und anschließend die zuerst0
gefundene weggeworfen.Fold[...,{0},#]
Wendet diese Funktion wiederholt auf die ursprüngliche Liste an, beginnend mit dem leeren Hotel{0}
, und gibt die endgültige Hotelliste aus.quelle
JavaScript (ES6), 81
Indizierung 0 verwenden
Weniger golfen
Prüfung
quelle
R, 133 Bytes
Um Probleme mit einer schlechten Indizierung zu vermeiden, fülle ich mit Nullen auf und entferne sie am Ende. Dies ist vielleicht nicht die beste Lösung, aber es funktioniert.
quelle
Python,
134125116 BytesGültig für Python 2.7.13 und 3.6.0. Dieser Code funktioniert durch Austauschen des gehaltenen Werts mit dem Wert, der an jedem Index enthalten ist, bis der gehaltene Wert 0 ist. Wenn er einen Index erreicht, der noch nicht im Array enthalten ist, fügt er am Ende des Arrays Nullen hinzu, bis das Array diese enthält Index. Dank an Wheat Wizard und xnor für das Golfen mit jeweils 9 Bytes
quelle
while
undif
brauchen keine Eltern. Sie können mehrere Anweisungen in eine durch ";
like" getrennte Zeile setzen, esif(i<d):r.extend([0]*(d-i));i=d
sei denn, die späteren Anweisungen enthalten einen Kontrollfluss.