Dank der PPCG-Community ist es dem Weihnachtsmann gelungen, alle seine Geschenke wiederaufzubauen. Nach dem Fließband können die Geschenke nun in die Transportdocks gebracht werden!
Jedes Transportdock des Weihnachtsmanns hat nur eine Reihe von aktuellen Größen, da die Transportschlitten auf eine bestimmte Größe spezialisiert sind (jedes Feuerzeug und es wäre verschwenderisch, jedes schwerer und der Schlitten wäre nicht in der Lage, die Ladung zu tragen). Daher müssen Sie ihm helfen, seine Geschenke zu nehmen und sie in die richtigen Transportdocks zu sortieren.
Herausforderung
Ordnen Sie die Geschenke anhand einer Liste und der Transportdockbereiche stabil in der richtigen Reihenfolge an.
Nehmen wir zum Beispiel Folgendes: Die Geschenke sind [5, 3, 8, 6, 2, 7]
und die Dockbereiche sind [[1, 5] and [6, 10]]
.
Die Geschenke 5
, 3
und 2
gehen in das erste Dock und die Geschenke 8
, 6
und 7
in das zweite Dock gehen. Dies kann als gezeigt werden [[5, 3, 2], [8, 6, 7]]
. Diese Liste ist näher an der Sortierung als die Eingabe, stably
bedeutet jedoch , dass in jedem Dock die Reihenfolge der Geschenke mit der Reihenfolge der Eingabe übereinstimmen muss (andernfalls können Sie einfach die gesamte Liste sortieren).
Ihre endgültige Ausgabe für diesen Fall wäre [5, 3, 2, 8, 6, 7]
(als flache Liste).
Formatierungsspezifikationen
Sie werden Eingang als flache Liste von ganzen Zahlen und einer Liste der Bereiche in jedem vernünftigen Format angegeben werden (beispielsweise der Bereich für den obigen Fall als gegeben werden könnte [[1, 5], [6, 10]]
, [1, 5, 6, 10]
oder [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
). Ihre Ausgabe sollte eine flache Liste von Ganzzahlen in einem vernünftigen Format sein.
Die Eingabe kann doppelte Werte enthalten. In diesem Fall müssen Sie alle Instanzen von ihnen zurückgeben. Alle vorhandenen Größen liegen in genau einem Größenbereich, und Sie können davon ausgehen, dass sich die Bereiche niemals überlappen. Es kann Lücken in den Bereichen geben, solange alle vorhandenen Größen abgedeckt sind.
Regeln
- Standardschlupflöcher gelten
- Dies ist Code-Golf , daher gewinnt die kürzeste Antwort in Bytes
- Es wird keine Antwort akzeptiert
- Sie können davon ausgehen, dass keine leeren Bereiche vorhanden sind (
[7, 4]
wäre ungültig, da die Bereiche steigen).
Testfälle
[1, 2, 3, 4, 5, 6, 7] ; [[1, 3], [4, 7]] => [1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7] ; [[4, 7], [1, 3]] => [4, 5, 6, 7, 1, 2, 3]
[7, 3, 5, 4, 6, 1, 2] ; [[1, 3], [4, 5], [6, 7]] => [3, 1, 2, 5, 4, 7, 6]
[4, 7, 6, 3, 5, 2, 1] ; [[1, 4], [5, 7]] => [4, 3, 2, 1, 7, 6, 5]
[1, 1, 3, 3, 6, 4, 7] ; [[1, 4], [6, 7]] => [1, 1, 3, 3, 4, 6, 7]
Hinweis: Ich habe mich für diese Herausforderungsserie von Advent Of Code inspirieren lassen . Ich habe keine Verbindung zu dieser Site
Eine Liste aller Herausforderungen in der Serie finden Sie im Abschnitt "Verknüpft" der ersten Herausforderung hier .
quelle
Antworten:
Haskell , 26 Bytes
Probieren Sie es online aus! Anwendungsbeispiel:
[1,2,3,4,5,6,7] # [[1,2,3],[4,5,6,7]]
Ausbeuten[1,2,3,4,5,6,7]
.quelle
Gelee , 4 Bytes
Probieren Sie es online aus!
Nimmt die Eingabe als aktuelle Liste mit allen Bereichen auf.
quelle
fþF
in Jelly für 3 Bytes funktioniert . Der Kredit geht an Adnan .Mathematica, 39 Bytes
-22 Bytes von JungHwan Min
-4 Bytes von Martin
Probieren Sie es online aus!
quelle
Range
Ganze auch loswerden , indem Sie einfach die erweiterten Bereiche als Eingabe verwenden.Pyth , 5 Bytes
Probieren Sie es hier aus!
Pyth , 10 Bytes
Probieren Sie es hier aus!
Wie sie arbeiten
Nimmt zuerst die Docks mit allen ganzen Zahlen in den Bereichen und dann die Geschenke in einer neuen Zeile.
quelle
Python 2 ,
4946 Bytesdanke an @HyperNeutrino für -3 Bytes
Probieren Sie es online aus!
Ungolfed
Probieren Sie es online aus!
quelle
05AB1E , 3 Bytes
Probieren Sie es online aus! (Danke an Adnan für die Mitteilung, dass es
δ
existiert, -1 Byte)Wie es funktioniert
quelle
€Ã˜
scheint nicht zu funktionieren.€Ã˜
ist, dassÃ
zwei Argumente verwendet werden und€
eine Funktion mit einem Argument erwartet wird.[[]]
Stattdessen wird sie zurückgegeben (ich denke, das ist ein Fehler). Dann˜
wird sie abgeflacht und zurückgegeben[]
.ε
funktioniert jedoch anders. Für jedes Element des obersten Elements wird ein neuer Stapel erstellt und anschließend der obere Teil jedes neuen Stapels zurückgegeben. Wenn also nicht genügend Elemente für eine Funktion enthalten sind, wird stattdessen eine implizite Eingabe vorgenommen.δØ
wonach Sie suchen?Netzhaut ,
3736 BytesProbieren Sie es online aus! Nimmt die Eingabe als Liste der Geschenke in der ersten Zeile und als Liste der Bereiche in der zweiten Zeile vor. Der Link enthält eine Kopfzeile, um die Testfälle in das gewünschte Format aufzuteilen. Bearbeiten: 1 Byte dank @MartinEnder gespeichert. Erläuterung: Die erste Stufe stimmt mit den Geschenken überein und findet das passende Dock. Die Geschenke werden vom Anfang der Zeile bis zum nach der Teilzeichenfolge sortiert
[
, wodurch die Geschenke nach Dock gruppiert werden. Die zweite Stufe löscht dann die Docks.quelle
Tragen Sie 3 Bytes ein
Probieren Sie es online aus!
Wie es funktioniert
quelle
APL + WIN, 29 Bytes
Fordert zur Bildschirmeingabe für die Ganzzahlen und Bereiche auf. Die ganzen Zahlen als flache Liste und die Bereiche als verschachtelter Vektor, z. B. Fall 3:
Erläuterung:
quelle
C ++, 127 Bytes
Nehmen Sie die Eingabe als zwei Arrays, die durch Zeigerpaare dargestellt werden
[start, end)
.Probieren Sie es online aus!
quelle
[&](int a)->int{a=a>=
stattdessen[&](int a){return a>=
keine Bytes gespeichert. Ich#import<algorithm>
kann#import<regex>
zumindest auf TIO sein. Ich fand, dass nach der Suche erschöpfend ("manuelle binäre Suche") alle auf dieser Seite aufgelisteten Header und dieser ist der kürzeste. / Auch +1 von mir.J, 15 Bytes
Nimmt die Eingabe als linkes Argument und die Bereiche als rechtes Argument. Die Bereiche sind Boxlisten der vollständigen Bereiche.
zB für den ersten Bereich:
Probieren Sie es online aus!
Erläuterung
quelle
J ,
2624 Bytes2 Bytes dank Cole
Wie es funktioniert:
Das linke Argument enthält die Bereiche.
-&1 0"1@[
verringert die untere Grenze jedes Bereichs um 1I."1]
prüft, in welchen Bereich jedes Geschenk passt1=
liegt es im richtigen Bereich]<@#~
kopiert und verpackt die Geschenke, die im aktuellen Bereich liegen;
- raze (Unboxing)Probieren Sie es online aus!
quelle
(0 4,:_3 _1) f _2 _1 0 1 2
)R ,
113485541 BytesIn einer früheren Version wurden Objekte nicht korrekt sortiert, wenn die Docks nicht in aufsteigender Reihenfolge waren.
Probieren Sie es online aus!
Nimmt
D
als Liste von Vektoren von Bereichen, dhlist(4:7,1:3)
wäre[[4, 7], [1, 3]]
.Wahrscheinlich die naive Antwort, zu der ich vor Ewigkeiten hätte kommen sollen; druckt nach stdout.
quelle
Japt , 6 Bytes
Versuch es
Erläuterung
Implizite Eingabe von Array
U
(präsentiert) und 2d-ArrayV
(volle Bereiche). Sortieren (ñ
) der Geschenke, indem Sie sie durch eine Funktion (@
) übergeben, die den Index des ersten Elements (b
) erhältV
, das (ø
) das aktuelle Geschenk enthält (X
).quelle
Python 2,
9785 Bytes-11 Bytes von Ovs
-1 Byte von Mr. Xcoder
Probieren Sie es online aus!
Sortiert die Liste mit einem rekursiven Lambda als Schlüssel. Erklärung
folgt in Kürze ™unten.Erläuterung:
quelle
Javascript ES6,
534745 BytesProbieren Sie es online aus!
quelle
PowerShell , 37 Byte
Probieren Sie es online aus!
Nimmt
$a
als wörtliches Array der Geschenke und$b
als Array von Arrays, von denen jedes den gesamten Bereich darstellt (z. B.@(1,2,3,4,5)
anstelle von@(1,5)
). Wir durchlaufen dann jedes Element$b
mit|%{...}
. Im Inneren müssen wir einen Helfer$i
als aktuelles Element festlegen und dann eineWhere-Object
Klausel gegen verwenden$a
, um nur die Elemente abzurufen, die-in
das aktuelle$b
Array sind.Diese verbleiben in der Pipeline und die Ausgabe ist implizit. Da das Standardverhalten von
Write-Output
Einfügen einer neuen Zeile zwischen Array-Elementen ist, erhalten wir dies. Hier ist eine leicht optimierte Version, die-join
anstelle eines Zeilenumbruchs über Kommas zusammengesetzt wird, um Unterschiede aufzuzeigen.quelle
Rot , 73 Bytes
Probieren Sie es online aus!
quelle
C # (.NET Core) , 50 + 18 Byte
+18 Bytes von
Es braucht eine Sammlung für Geschenke und eine Sammlung von Arrays für Docks.
Probieren Sie es online aus!
quelle
Windows Batch (CMD),
9079 ByteVerwenden Sie das LF-Zeilenendeformat. Jedes Zeilenendezeichen kann als 1 Byte gezählt werden.
Kein TIO (da TIO Linux verwendet)
Nehmen Sie die Liste aus den Befehlszeilenargumenten und reichen von
stdin
.Zum Beispiel, wenn das Programm ausgeführt wird (vorausgesetzt, die Datei hat den Namen
r1.cmd
)und mit
stdin
Eingabewird das Programm
stderr
mit Format ausgegeben(entspricht der Ausgabesequenz
3 1 2 5 4 7 6
)Erläuterung:
Ungolfed-Code (mit aktivierter Interaktion, wenn er
true
als Argument 1 übergeben wird; Eingabeaufforderung für die Liste vonstdin
, umgoto
einen Stapelüberlauf zu vermeiden - eigentlich habe ich gerade versucht, ein Skript auszuführen, das sich über 70000 Mal selbst aufruft, ohne dass ein Problem auftritt sollte ziemlich sicher sein):quelle
(%*)
. Anschließend können Sie%0 %*
das Skript nach der Verarbeitung der einzelnen Bereiche neu starten. (I endete tatsächlich mit einem größeren Byteanzahl, weil ich Ihre interaktive Version mit den netten Details verwendet&&
,exit/b
undecho
als mein Ausgangspunkt.)%1
aber die Anführungszeichen"
sorgen dafür, dass das Leerzeichen nicht als Trennzeichen funktioniert, und so habe ich es letztendlich verwendetset /p
.$~1
...Sauber , 59 Bytes
Probieren Sie es online aus!
Nimmt zwei Listen und gibt eine Liste zurück.
quelle
Wolfram Language (Mathematica) , 34 Bytes
Probieren Sie es online aus!
ist derFunction
Betreiber.Dies ist eine unbenannte Curry-Funktion, die zuerst mit der Liste der (erweiterten) Dock-Bereiche und dann mit der Liste der Geschenke aufgerufen werden sollte. Wenn Sie die Funktion beispielsweise wie folgt zuweisen
f
:Die Liste der Geschenke wird einfach nach der Position des Werts in der Liste der Dockbereiche auf der ersten Ebene sortiert. Wir müssen die
SortBy
Funktion in eine Liste einschließen, um die Sortierung stabil zu machen.quelle
Julia 0,6 ,
3130 BytesProbieren Sie es online aus!
Definiert den
%
Operator neu und ordnet den festgelegten Schnittpunkt∩()
über den Docks zu, wobeid
die Reihenfolge und die Vielzahl des ersten Eingangs, der Liste der Geschenke, beibehalten werdenp
.vcat
Wenn die Eingabe auf mehrere Argumente erweitert wird, wird...
das resultierende verschachtelte Array abgeflacht.Bearbeiten, -1Byte: Listenverständnis statt
map()
.quelle