Betrachten Sie eine Liste l
, die aus Zahlen besteht. Definieren Sie eine Blockoperation am Index i
in der Liste so l
, dass 3 aufeinanderfolgende Elemente von i
innen l
bis zum Ende verschoben werden.
Beispiel:
l, i (1-indexing) -> l (after applying block operation at index i)
[1,2,3,4,5], 1 -> [4,5,1,2,3]
[1,2,3,4,5,6,7], 3 -> [1,2,6,7,3,4,5]
Bei einer Liste, die nur aus 0 und 1 besteht, besteht Ihre Herausforderung darin, sie so zu partitionieren, dass Nullen vorne und Einsen hinten sind, wobei nur Blockoperationen verwendet werden. Die Ausgabe sollte die Indizes in der Reihenfolge sein, in der sie auf die Liste angewendet werden.
Da dies für die Liste nicht möglich ist [1,0,1,0]
, beträgt die Listenlänge garantiert mindestens 5.
Testfälle (1-Indexierung)
(Es gibt andere gültige Ausgaben)
[1,1,1,0,0] -> [1]
[0,1,0,1,0] -> [1,2,1,1]
[0,0,0,1,1,1,0,0,0] -> [4]
Verwenden Sie dieses Skript , um weitere Testfälle zu generieren. (nur Eingabe. Das rplc ' ';','
Teil wird verwendet , r e pl a c e Räume mit Komma in der Ausgabe)
Gewinnkriterien
Code-Challenge ist das Hauptgewinnkriterium, und der schnellste Code ist der Tie-Breaker. Im Speziellen:
- Die Lösung mit der kürzesten Ausgabelänge (geringste Anzahl von Blockoperationen) mit dem Testfall (
n_elem
= 500,random_seed
= {geheimer Wert}) gewinnt. Sie sollten in der Lage sein, Ihre Lösung mit dem Testfall (n_elem
= 500,random_seed
= 123456) . - Im Falle von Unentschieden die Lösung, die den größten Zweierpotenzwert von
n_elem
mit verarbeiten kannrandom_seed
gewinnt innerhalb von 10 Sekunden (für mich) = {secret value} verarbeiten kann. - Bei Unentschieden gewinnt die Lösung, die in diesem Testfall weniger Zeit benötigt.
quelle
Antworten:
Python 3 , (0,397 n + 3,58) Schritte
1000-Punkte-Polynomregression durch
numpy.polyfit
.Probieren Sie es online aus!
quelle
Python 3, ~ 179 Schritte für n = 500 (im Durchschnitt)
Ein heuristischer gieriger Ansatz. Etwas langsam, funktioniert aber immer noch. Verwendet einen optimalen Löser für kleine Größen.
quelle