Ziel dieser Herausforderung ist es, ausgewählte Elemente in einer Liste zu sammeln und an eine bestimmte Stelle in der Liste zu verschieben.
Nehmen Sie als visuelles Beispiel die Eingabewerte (dargestellt durch Ganzzahlen mit schwarzen Kästchen) und eine entsprechende Liste von Wahrheitswerten, wobei wahr bedeutet, dass das Element ausgewählt ist (dargestellt durch blaue Kästchen, wobei T
wahr und F
falsch ist):
Der erste logische Schritt besteht darin, die als wahr und nicht wahr gekennzeichneten Elemente in die entsprechenden Listen zu unterteilen. Beachten Sie, dass die relative Reihenfolge in jeder Liste beibehalten werden muss (dh die Reihenfolge der ausgewählten Elemente muss 1,4,5
und die Reihenfolge der nicht ausgewählten Elemente muss sein 2,3,6,7
)!
Der zweite logische Schritt erhält einen Index in der verbleibenden Liste der nicht ausgewählten Elemente. Fügen Sie alle ausgewählten Elemente vor dem Element am angegebenen Index ein. Angenommen, die Indizierung beginnt bei 0, möchten Sie die Auswahl bei Index 3 einfügen. Dies entspricht der Stelle vor dem 7
Kästchen, sodass die ausgewählten Elemente vor dem Kästchen eingefügt werden sollten 7
.
Die endgültige Lösung ist dann 2,3,6,1,4,5,7
.
Beachten Sie, dass dieses logische Diagramm eine Möglichkeit darstellt, dies zu tun. Ihr Programm muss nicht dieselben logischen Schritte ausführen, solange die Ausgabe immer dasselbe beobachtbare Ergebnis liefert.
Eingang
Ihr Programm erhält 3 Eingaben:
- Eine Liste von Ganzzahlen, die die Elemente darstellen. Dies kann eine leere Liste sein. Diese Liste besteht immer aus eindeutigen positiven ganzen Zahlen, nicht unbedingt in sortierter Reihenfolge (dh 5 sind nicht zweimal in der Liste enthalten).
- Eine Liste von Wahrheits- / Falschwerten mit derselben Länge wie die Liste von Elementen, wobei ein Wahrheitswert angibt, dass das Element am selben Index ausgewählt wurde.
- Eine Ganzzahl, die angibt, wo die Auswahl eingefügt werden soll. Sie können den Index des ersten Elements der Liste so lange festlegen, wie er in jedem Programmlauf konstant ist (z. B. kann der erste Eintrag Index 0 oder Index 1 sein). Bitte geben Sie an, welcher Konvention Ihr Programm entspricht. Dieser Index sollte im Bereich liegen
[starting_idx, ending_idx+1]
, dh es handelt sich immer um einen gültigen Index. Für den Fallindex istending_idx+1
, sollte die Auswahl am Ende der Liste eingefügt werden. Sie können davon ausgehen, dass diese Ganzzahl in den systemeigenen Ganzzahltyp Ihrer Sprache passt.
Der Eingang kann von einer beliebigen Quelle stammen (stdio, Funktionsparameter usw.)
Ausgabe
Die Ausgabe ist eine Liste, die die endgültige Reihenfolge der Elemente darstellt. Dies kann eine beliebige Quelle sein (stdio, Rückgabewert, Funktionsausgangsparameter usw.). Sie können alle Eingaben direkt ändern (z. B. eine Liste mit Änderungsmöglichkeiten als Funktionsparameter angeben und Ihre Funktion direkt in dieser Liste ausführen lassen).
Testfälle
Alle folgenden Testfälle setzen eine 0-basierte Indizierung voraus. Ich habe 0 und 1 verwendet, um falsche / wahre Werte für die Auswahlmaske anzugeben.
Testfälle haben Listen, die formatiert sind als [a,b,c]
, aber solange Ihre Eingabelisten eine endlich geordnete Sequenz darstellen, die in Ordnung ist.
Eingang:
[]
[]
0
Ausgabe:
[]
Eingang:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
3
Ausgabe:
[2,3,6,1,4,5,7]
Eingang:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
0
Ausgabe:
[1,4,5,2,3,6,7]
Eingang:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
4
Ausgabe:
[2,3,6,7,1,4,5]
Eingang:
[1,2,3,4,5,6,7]
[1,1,1,1,1,1,1]
0
Ausgabe:
[1,2,3,4,5,6,7]
Eingang:
[1,2,3,4,5,6,7]
[0,0,0,0,0,0,0]
5
Ausgabe:
[1,2,3,4,5,6,7]
Eingang:
[1,3,2,5,4,6]
[1,0,0,1,1,0]
3
Ausgabe:
[3,2,6,1,5,4]
Wertung
Das ist Code Golf; kürzeste Antwort in Bytes gewinnt. Standardlücken sind verboten. Sie dürfen alle gewünschten eingebauten Funktionen verwenden.