Eingang
Zwei Listen A
und B
nichtnegative ganze Zahlen.
Ausgabe
Entweder 1
, 0
oder -1
, je nachdem , ob A
größer als, gleich oder kleiner ist als B
in Bezug auf die verdrillten lexikographische Ordnung , wie unten definiert. Wenn Sie möchten, können Sie ersetzen 1
, 0
und -1
mit irgendwelchen anderen drei konstanten Werten.
Die verdrehte lexikografische Reihenfolge ist insofern wie die gewöhnliche lexikografische Reihenfolge, als Sie die Listen Element für Element vergleichen und ihre Reihenfolge beim ersten unterschiedlichen Index festlegen. In der verdrehten Version verwenden wir jedoch für jeden Index eine andere Reihenfolge für nichtnegative Ganzzahlen. Bei jedem Index i
(Indexierung beginnt bei 1
) wird nämlich die Reihenfolge der ersten i
nichtnegativen Ganzzahlen (von 0
bis i-1
) umgekehrt, und sie werden über alle anderen Zahlen verschoben. Darüber hinaus wird das "fehlende Element", das anzeigt, dass eine Liste kürzer als die andere ist, direkt darunter verschoben i-1
. Visuell ist die Reihenfolge bei Index i
ist
i < i+1 < i+2 < i+3 < ... < [missing element] < i-1 < i-2 < i-3 < ... < 2 < 1 < 0
Beachten Sie, dass die erste ...
unendlich viele Zahlen bezeichnet. Dies bedeutet, dass die folgenden Listen in Bezug auf die verdrehte lexikografische Reihenfolge in aufsteigender Reihenfolge sind:
[3,2,3,4]
[3,2,3,5]
[3,2,3,10]
[3,2,3,1341]
[3,2,3]
[3,2,3,3]
[3,2,3,2]
[3,2,3,1]
[3,2,3,0]
Regeln
Sie können ein vollständiges Programm oder eine Funktion angeben. Die niedrigste Byteanzahl gewinnt und Standardschlupflöcher sind nicht zulässig.
Testfälle
Output 1:
[0] []
[] [1]
[] [1,2,1,2]
[2,1] [1,1]
[0,1,2] [0,2,1]
[3,0] [3,1]
[3,1] [3]
[2] [2,2]
[2] [2,23]
[2,24] [2,23]
[2,1] [2,23]
Output 0:
[] []
[0] [0]
[1,1] [1,1]
[2,1,2] [2,1,2]
Output -1:
[1,2,1,1,2] [1,2,1,1,1]
[1,2,1,1,5] [1,2,1,1,4]
[1,2,1,1,5] [1,2,1,1]
[1,2,1] [1,2,1,1]
[1,2,1,1,5] [1,2,1,1,6]
[1,2,1,1,6] [1,2,1,1,7]
Antworten:
CJam - 57
Ja, es ist immer noch sehr lang ...
Probieren Sie es online aus
Kurze Erklärung:
Der Code gibt 0 aus, wenn die Arrays im herkömmlichen Sinne gleich sind, andernfalls konvertiert er jedes Element jedes Arrays in ein Array mit 2 Elementen: [0 a i ] wenn a i > i (0-basiert), [1 was auch immer] wenn ein i fehlt, und [2 -a i ] wenn ein i <= i. Dabei wird das kürzere Array auch auf die größere Größe erweitert. Dann werden die transformierten Arrays lexikographisch verglichen und das Ergebnis auf -1/1 eingestellt.
quelle
Python 2, 76 Bytes
Dies ersetzt jede Ganzzahl in beiden Listen durch ein 2-Tupel, um die verdrehte Reihenfolge zu berücksichtigen. Das
cmp
eingebaute Python 2 erledigt den Rest.Verwendungszweck:
quelle
[3,2,3,1341] < [3,2,3] < [3,2,3,0]
?(0,)
am Ende jeder Liste hinzu, das größer als jedes(-1, x)
und kleiner als(i-x, x)
wann isti-x >= 0
.Perl, 74
Ohne gute Array-Manipulationsfunktionen ist Perl nicht das optimale Werkzeug für den Job, aber es funktioniert.
Teste mich .
quelle
J, 95 Bytes
(Nicht super kurz, aber was auch immer. Auf jeden Fall golfbar.)
Bestehen aller Testfälle. (Tolles Testfall-Set! Danke!)
Methode:
m=.>:>./x,y
).(],m$~>&#*-&#
(|+(1+m)*0>:*)@(i.@#-~])
((m+#x,y)&#.)
*@-&
quelle
Mathematica, 65
Verwendungszweck:
quelle