Driftsort ist eine einfache Möglichkeit, ein Array zu "sortieren". Es funktioniert, indem die Elemente im Array "verschoben" oder "gedreht" werden, bis das Array sortiert ist oder bis das Array nicht mehr sortiert werden kann.
Lassen Sie uns zwei Beispiele durchgehen. Betrachten Sie zunächst das Array [10, 2, 3, 4, 7]
. Da das Array nicht sortiert ist, drehen wir es einmal. (Dies kann in beide Richtungen geschehen, solange die Richtung gleich bleibt.) Dann wird das Array:
[7, 10, 2, 3, 4]
Dies ist nicht sortiert, so dass wir erneut drehen.
[4, 7, 10, 2, 3]
Und wieder:
[3, 4, 7, 10, 2]
Und ein letztes Mal:
[2, 3, 4, 7, 10]
Und es ist sortiert! Das Array [10, 2, 3, 4, 7]
ist also driftsortierbar. Hier sind zur Verdeutlichung alle Rotationen des Arrays:
[10, 2, 3, 4, 7]
[7, 10, 2, 3, 4]
[4, 7, 10, 2, 3]
[3, 4, 7, 10, 2]
[2, 3, 4, 7, 10]
Betrachten Sie nun das Array [5, 3, 9, 2, 6, 7]
. Schauen Sie sich die Rotationen an:
[5, 3, 9, 2, 6, 7]
[7, 5, 3, 9, 2, 6]
[6, 7, 5, 3, 9, 2]
[2, 6, 7, 5, 3, 9]
[9, 2, 6, 7, 5, 3]
[3, 9, 2, 6, 7, 5]
Keines dieser Arrays ist sortiert, sodass das Array [5, 3, 9, 2, 6, 7]
nicht driftsortierbar ist.
Zielsetzung Wenn ein nicht leeres Array / eine Liste von Ganzzahlen als Eingabe für ein Programm / eine Funktion verwendet wird, implementieren Sie eine Driftsortierung für die Eingabe und geben Sie sie aus, oder geben Sie einen Falsey - Wert aus ( oder ein leeres Array / eine leere Liste) aus, wenn keine Driftsortierung möglich ist. Die Ganzzahlen sind an Ihre Sprachen max / min gebunden, aber dies muss mindestens 255 für das Maximum und 0 für das Minimum sein.
Sie können integrierte Sortiermethoden verwenden, jedoch keine integrierten, die die Herausforderung lösen.
Dies ist ein Code-Golf , also das kürzeste Programm in Bytes.
Testfälle
input => output
[1] => [1]
[5, 0, 5] => [0, 5, 5]
[3, 2, 1] => false
[0, 9, 3] => false
[1, 2, 3, 4] => [1, 2, 3, 4]
[4, 1, 2, 3] => [1, 2, 3, 4]
[0, 2, 0, 2] => false
[5, 3, 9, 2, 6, 7] => false
[0, 0, 0, 0, 0, 0, 0] => [0, 0, 0, 0, 0, 0, 0]
[75, 230, 30, 42, 50] => [30, 42, 50, 75, 230]
[255, 255, 200, 200, 203] => [200, 200, 203, 255, 255]
shiftsort
?
shift
Operation führen, mit der das erste Element eines Arrays entfernt wird.
sorted(l)
eine zusammenhängende Unterliste vonl+l
.