вход
Два списка A
и B
неотрицательных целых чисел.
Вывод
Либо 1
, 0
либо -1
, в зависимости от того A
, больше ли , равно или меньше, чем в B
отношении витого лексикографического порядка, как определено ниже. Если вы хотите, вы можете заменить 1
, 0
и -1
с любыми другими тремя значениями постоянных.
Скрученный лексикографический порядок подобен обычному лексикографическому порядку в том, что вы сравниваете списки элемент за элементом и определяете их порядок по первому отличающемуся индексу. Однако в скрученной версии мы используем различный порядок неотрицательных целых чисел в каждом индексе. А именно, в каждом индексе i
(индексация начинается с 1
) порядок первых i
неотрицательных целых чисел (от 0
до i-1
) меняется на противоположный, и они перемещаются над всеми другими числами. Более того, «отсутствующий элемент», который означает, что один список короче другого, перемещается непосредственно ниже i-1
. Визуально, заказ по индексу i
является
i < i+1 < i+2 < i+3 < ... < [missing element] < i-1 < i-2 < i-3 < ... < 2 < 1 < 0
Обратите внимание, что первый ...
обозначает бесконечно много чисел. Это означает, что следующие списки расположены в порядке возрастания относительно витого лексикографического порядка:
[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]
правила
Вы можете дать полную программу или функцию. Побеждает меньшее количество байтов, и стандартные лазейки запрещены.
Тестовые случаи
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]
Ответы:
CJam - 57
Да, это все еще очень долго ...
Попробуйте онлайн
Краткое объяснение:
Код выводит 0, если массивы равны в традиционном смысле, в противном случае он преобразует каждый элемент каждого массива в массив из 2 элементов: [0 a i ], если a i > i (на основе 0), [1 что угодно], если a i отсутствует, и [2 -a i ], если a i <= i. При этом более короткий массив также расширяется до большего размера. Затем преобразованные массивы сравниваются лексикографически и результат корректируется до -1/1.
источник
Python 2, 76 байт
Это заменяет каждое целое число в обоих списках 2-кортежем для учета витого порядка. Встроенный в Python 2
cmp
делает все остальное.Применение:
источник
[3,2,3,1341] < [3,2,3] < [3,2,3,0]
?(0,)
в конец каждого списка, который больше любого(-1, x)
и меньше, чем(i-x, x)
когдаi-x >= 0
.Perl, 74
Без хороших функций манипулирования массивами Perl не является оптимальным инструментом для работы, но он работает.
Проверь меня .
источник
J, 95 байт
(Не супер-короткий, но какой угодно. Определенно пригодный для игры в гольф.)
Проходя все тесты. (Отличный тестовый набор! Спасибо!)
Метод:
m=.>:>./x,y
).(],m$~>&#*-&#
(|+(1+m)*0>:*)@(i.@#-~])
((m+#x,y)&#.)
*@-&
источник
Математика, 65
Применение:
источник