Compare duas listas pelo máximo


14

Dadas duas listas diferentes de números inteiros não negativos, retorne a lista que tem o máximo mais alto (por exemplo [4, 2], [3, 3, 1] -> [4, 2]).

Se ambos tiverem o mesmo máximo, retorne a lista que contém mais instâncias desse máximo (por exemplo [4, 2, 4], [4, 3, 3, 3, 1, 3] -> [4, 2, 4]).

Se, após essas comparações, forem iguais, faça a mesma comparação, mas com o próximo item mais alto (por exemplo [2, 3, 4, 4], [4, 4, 3, 3, 1] -> [4, 4, 3, 3, 1]).

Se, após todas essas comparações, elas ainda forem consideradas iguais, produza a lista mais longa (por exemplo [4, 3, 2, 1, 0], [1, 2, 3, 4] -> [4, 3, 2, 1, 0]).

Faça seu código o mais curto possível.

Casos de teste

[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]

Respostas:


5

Pitão, 4 bytes

eo_S

Experimente online

Explicação

eo_S
 o  NQ    Order the inputs...
  _S      ... by their reversed sorted values...
e         ... and take the last.


4

Gelatina , 4 bytes

NÞÞṪ

Experimente online!

Como funciona

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 bytes

import Data.Lists
argmax$sortOn(0-)

A entrada é tomada como uma lista de dois elementos, por exemplo ( argmax$sortOn(0-) ) [[4,4,4,4,2,4], [4,4,4,4,3,2]].

Encontre o elemento na lista de entrada que é o máximo após a classificação, negando os valores (por exemplo, ordem decrescente).


2

Limpo , 42 bytes

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

Experimente online!


2
Huh, essa é uma sintaxe interessante. Entendo que significa "retornar ase a proteção de padrões for verdadeira ou bnão"?
Laikoni

@Laikoni Yep. Os protetores de padrões no Clean são sintaticamente semelhantes a um estilo C if ... else if ..., onde você pode aninhar / encadeá-los. E, assim como você pode omitir else if(true), você pode pular a última condição de guarda. (no entanto, apenas uma vez por linha)
Οurous 22/01

1

JavaScript (ES7), 52 bytes

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

Este método funciona sem classificar as matrizes. Em vez disso, calcula a soma de 10.000 aumentada para os elementos de cada matriz. A maior soma representa a matriz com a maior pontuação. (Esta solução assume que nenhuma matriz possui mais de 10.000 elementos.)

Casos de teste




0

Ruby 149 bytes

->n,m{(n+m).sort.reverse.map{|i|r=((a=n.index(i))&&m.index(i)?(b=n.count(i))==(c=m.count(i))?nil:b>c ?n:m:a ?n:m);return r if r};n.size>m.size ? n:m}

Experimente online!


0

Casca , 3 bytes

►Ö_

Experimente online!

Essa submissão basicamente pega uma lista de dois elementos de listas como entrada e recupera o máximo ( ), classificado por seus valores classificados em ordem decrescente ( Ö_).



0

JavaScript (ES6), 98 bytes

(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

gclassifica uma cópia de seu parâmetro na ordem inversa (uma vez que sortmodifica a matriz), enquanto hrecursivamente executa a comparação elementar das matrizes.


0

Perl 6 , 17 bytes

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

Teste (Lambda Lambda Lambda)

  • -* lambda que nega numericamente a entrada
  • *.sort(-*) lambda que usa que usa os resultados da aplicação para comparar elementos
  • *.max(*.sort(-*)) lambda que encontra o máximo desses resultados e usa isso para determinar qual entrada retornar.

0

J, 20 bytes

[:{.]\:[:#.[:>\:~&.>

Ungolfed:

[: {. ] \: [: #. [: > \:~&.>

Essencialmente, a resposta de Pyth, traduzida sem sentido em J.

Experimente online!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.