Определение
Вектор , содержащий п элементы называются мажорируют или доминировать вектор Ь с п элементами , если для всех значений K таким образом, что 1 ≤ K ≤ N , сумма первого элемента в ↓ через к - й элемент в ↓ больше чем или равно сумме элементов с первого по k- й в b ↓ , где v ↓ представляет вектор v, отсортированный в порядке убывания.
То есть,
a_1 >= b_1
a_1 + a_2 >= b_1 + b_2
a_1 + a_2 + a_3 >= b_1 + b_2 + b_3
...
a_1 + a_2 + ... + a_n-1 >= b_1 + b_2 + ... + b_n-1
a_1 + a_2 + ... + a_n-1 + a_n >= b_1 + b_2 + ... + b_n-1 + b_n
где a и b отсортированы в порядке убывания.
Для этой задачи мы будем использовать небольшое обобщение мажоризации: мы будем говорить, что список является несортированным мажорированием другого, если все вышеприведенные неравенства верны без сортировки a и b . (Это, конечно, математически бесполезно, но делает задачу более интересной.)
Вызов
Учитывая ввод двух различных списков целых чисел a и b в диапазоне от 0 до 255 (включительно), оба списка длиной n ≥ 1, выводят, является ли первый список несортированным, мажорирует второй ( a > b ), второй не отсортирован - мажорирует первое ( b > a ) или ни того, ни другого.
При желании вы можете указать длину двух списков в качестве входных данных. Выходными данными всегда должно быть одно из трех разных значений, но сами значения могут быть такими, какие вы хотите (пожалуйста, укажите, какие значения представляют a > b , b > a , и ни один из них в вашем ответе).
Тестовые случаи для a > b :
[255] [254]
[3,2,1] [3,1,2]
[6,1,5,2,7] [2,5,4,3,7]
Тестовые случаи для b > a :
[9,1] [10,0]
[6,5,4] [7,6,5]
[0,1,1,2,1,2] [0,1,2,1,2,1]
Контрольные примеры для не мажорирования:
[200,100] [150,250]
[3,1,4] [2,3,3]
[9,9,9,9,9,0] [8,8,8,8,8,9]
источник
Ответы:
Желе ,
1086 байт2 байта благодаря @orlp.
2 байта благодаря @Dennis.
Попробуйте онлайн!
1
дляa>b
,-1
дляa<b
,0
без мажоризации.Если бы было и то,
1
и другое-1
(некоторые кумулятивные суммы больше, а некоторые меньше), то последним шагом будет результат0
.источник
ngn / apl, 11 байт
На основе метода в @Leaky Монахини ответ .
Учитывая два списка A и B , найти разницу между каждым значением поэлементно, или пусть C = A - B . Затем найдите кумулятивные суммы C и возьмите знак каждого. Сумма уникальных значений знака будет результатом. Если A > B , результат равен 1, если A < B, результат равен -1, а если нет большинства, результат равен 0.
Попробуйте онлайн.
источник
Юлия, 30 байт
Сохранено 4 байта благодаря @Dennis!
источник
a^b=sum(sign(cumsum(a-b))∪0)
сохраняет несколько байтов.Python 3.5, 85 байт:
Анонимная лямбда-функция. Возвращает
[True,False]
еслиa>b
,[False,True]
еслиb>a
или[False,False]
если ни один из них не является истинным. Я надеюсь, что это нормально.Попробуйте онлайн! (Ideone)
источник
Чеддер ,
118114 байтВ основном порт моего желе ответа .
Тот факт, что область видимости внутри функции нарушена, что приводит к невозможности определить переменную внутри функции, означает, что мне нужно сделать
[xxx].map(i->yyy)[0]
вместоvar a=xxx;yyy
.Принимает транспонированный массив в качестве входных данных.
источник
Python 2, 73 байта
Проверьте это на Ideone .
источник
Рубин,
7259 байтВозвращает
1
заa>b
,-1
заa<b
,0
ни за.-13 байт от подбора суммы трюк @Dennis в их ответе Python
Попробуйте онлайн!
источник
Python 2, 59 байт
Выходы:
1
заa>b
2
заb>a
3
ни для чегоПеребирает список, отслеживая текущую сумму
t
различий. Числоs
отслеживает, какие знаки были замечены как двухбитное числоr
: положительные в правом бите и отрицательные в левом бите. Это происходит черезcmp(t,0)%3
, который даетt>0
→+1
→ 1t==0
→0
→ 0t<0
→-1
→ 2Принятие
or
этого и текущего значенияr
обновляет 2 битаor
, причем нулевые значения не имеют никакого эффекта.источник
Javascript (с использованием внешней библиотеки-Enumerable) (123 байта)
Ссылка на lib: https://github.com/mvegh1/Enumerable
Объяснение кода: передать вектор a и b, создать глобальную функцию z. z начнет с создания массива целых чисел от 1 для подсчета длины a.length. .All проверит, что предикат верен для каждого члена, принадлежащего. Этот предикат говорит, что нужно загрузить a как перечислимое, взять подсчет этого перечислимого эквивалента текущему значению итерации того диапазона, который мы сделали, и суммировать это. Проверьте, что> = та же логика из массива "b". Итак, мы называем z в порядке (a, b) и сравниваем это с порядком (b, a) ... если мы равны, мы возвращаем 0, чтобы показать, что мажора нет. В противном случае мы возвращаем 1, если (a, b) истинно, иначе -1
источник