Порівняйте два списки за їх максимумом


14

З огляду на два різні списки невід’ємних цілих чисел, поверніть список, який має найбільший максимум (наприклад [4, 2], [3, 3, 1] -> [4, 2]).

Якщо вони мають однаковий максимум, поверніть список, який містить більше примірників цього максимуму (наприклад [4, 2, 4], [4, 3, 3, 3, 1, 3] -> [4, 2, 4]).

Якщо після цих порівнянь вони рівні, зробіть те саме порівняння, але зі своїм наступним найвищим пунктом (наприклад [2, 3, 4, 4], [4, 4, 3, 3, 1] -> [4, 4, 3, 3, 1]).

Якщо після цих порівнянь вони все-таки вважаються рівними, виведіть довший список (наприклад [4, 3, 2, 1, 0], [1, 2, 3, 4] -> [4, 3, 2, 1, 0]).

Зробіть свій код якомога коротшим.

Випробування

[4, 4, 4, 4, 2, 4], [4, 4, 4, 4, 3, 2] -> [4, 4, 4, 4, 2, 4]
[0], [] -> [0]
[0, 0], [0] -> [0, 0]
[1], [0, 0] -> [1]
[4, 4, 4, 4, 4, 2], [4, 4, 4, 4, 4] -> [4, 4, 4, 4, 4, 2]
[1, 0], [0, 0, 0] -> [1, 0]

Відповіді:




4

Желе , 4 байти

NÞÞṪ

Спробуйте в Інтернеті!

Як це працює

NÞÞṪ  Main link. Argument: [u, v] (pair of vectors)

  Þ   Sort [u, v], using the link to the left as key.
NÞ      Sort u (or v) by the negatives of its values.
        This sorts the vector in descending order.
   Ṫ  Tail; select the last, lexicographically larger vector.

2

Haskell, 37 35 байт

import Data.Lists
argmax$sortOn(0-)

Вхід приймається як список двох елементів, наприклад ( argmax$sortOn(0-) ) [[4,4,4,4,2,4], [4,4,4,4,3,2]].

Знайдіть елемент у списку входів, який є максимальним після сортування, відкинувши значення (тобто порядок зменшення).


2

Чисто , 42 байти

import StdEnv
s=sortBy(>)
?a b|s a>s b=a=b

Спробуйте в Інтернеті!


2
Так, цікавий синтаксис. Я вважаю, це означає "повернутись, aякщо захист шаблону є істинним, bінакше"?
Лайконі

@Laikoni Yep Охоронці візерунків у програмі Clean синтаксично схожі на C-стиль if ... else if ..., де ви можете гніздо / ланцюжок. І так само, як ви можете пропустити else if(true), ви можете пропустити останню умову охорони. (проте, лише один раз на рядок)
Οurous

1

JavaScript (ES7), 52 байти

(a,b,m=d=>d.map(n=>N+=1e4**n,N=0)&&N)=>m(a)>m(b)?a:b

Цей метод працює без сортування масивів. Натомість він обчислює суму 10 000, підняту для елементів кожного масиву. Найбільша сума являє собою масив з найвищим балом. (Це рішення передбачає, що жоден масив не містить більше 10000 елементів.)

Тестові справи







0

JavaScript (ES6), 98 байт

(a,b,g=a=>[...a].sort((a,b)=>b-a),h=([a,...b],[c,...d])=>a==c?h(b,d):a<c|!(1/a))=>h(g(a),g(b))?b:a

gсортує копію свого параметра у зворотному порядку (оскільки sortмутує масив), при цьому hрекурсивно виконує елементне порівняння масивів.


0

Perl 6 , 17 байт

*.max(*.sort(-*))

Перевірте його (Lambda Lambda Lambda)

  • -* лямбда, яка чисельно заперечує вхід
  • *.sort(-*) лямбда, яка використовує, що використовує результати застосування, щоб порівняти елементи
  • *.max(*.sort(-*)) лямбда, яка знаходить максимум цих результатів, і використовує це, щоб визначити, який вхід повернути.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.