Definição
Diz-se que um vetor a contendo n elementos majoriza ou domina um vetor b com n elementos se todos os valores k são tais que 1 ≤ k ≤ n , a soma do primeiro elemento de a ↓ através do k ésimo elemento de a ↓ é maior igual ou igual à soma do primeiro a k de elementos de b ↓ , em que v ↓ representa o vetor v classificado em ordem decrescente.
Isso é,
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
onde a e b são classificadas em ordem decrescente.
Para o objetivo deste desafio, usaremos uma ligeira generalização da majorização: diremos que uma lista é uma majoração não classificada de outra se todas as desigualdades acima forem verdadeiras sem classificar a e b . (Isso é, obviamente, matematicamente inútil, mas torna o desafio mais interessante.)
Desafio
Dada uma entrada de duas listas distintos um e b de inteiros no intervalo de 0 a 255 (inclusive), ambas as listas de comprimento n ≥ 1, a saída se a primeira lista não classificada-majorizes o segundo ( um > b ), a segunda unsorted- realça o primeiro ( b > a ), ou nenhum.
Opcionalmente, você pode exigir que o comprimento das duas listas seja fornecido como entrada. A saída deve sempre ser um dos três valores distintos, mas os valores em si podem ser o que você quiser (especifique quais valores representam a > b , b > a e nenhum na sua resposta).
Casos de teste para a > b :
[255] [254]
[3,2,1] [3,1,2]
[6,1,5,2,7] [2,5,4,3,7]
Casos de teste para b > a :
[9,1] [10,0]
[6,5,4] [7,6,5]
[0,1,1,2,1,2] [0,1,2,1,2,1]
Casos de teste sem majoração:
[200,100] [150,250]
[3,1,4] [2,3,3]
[9,9,9,9,9,0] [8,8,8,8,8,9]
fonte
Respostas:
Geléia ,
1086 bytes2 bytes graças a @orlp.
2 bytes graças a @Dennis.
Experimente online!
1
paraa>b
,-1
paraa<b
,0
sem majoração.Se houvesse ambos
1
e-1
presentes (algumas somas cumulativas são maiores, outras menores), o último passo seria produzido0
.fonte
ngn / apl, 11 bytes
Baseado no método da resposta de @Leaky Nun .
Dadas duas listas A e B , encontrar a diferença entre cada elemento a elemento de valor, ou deixá- C = A - B . Em seguida, encontre as somas cumulativas de C e pegue o sinal de cada uma. A soma dos valores de sinal exclusivos será o resultado. Se A > B , o resultado for 1, se A < B, o resultado for -1 e, se não houver maioria, o resultado será 0.
Experimente online.
fonte
Julia, 30 bytes
Guardado 4 bytes graças a @Dennis!
fonte
a^b=sum(sign(cumsum(a-b))∪0)
salva alguns bytes.Python 3.5, 85 bytes:
Uma função lambda anônima. Retorna
[True,False]
sea>b
,[False,True]
seb>a
ou[False,False]
se nenhum deles for verdadeiro. Espero que isso esteja bem.Experimente Online! (Ideona)
fonte
Queijo Cheddar ,
118114 bytesBasicamente, um porto da minha resposta Jelly .
O fato de que a função scope dentro está quebrada, causando a incapacidade de definir a função variável dentro significa que eu precisaria fazer isso em
[xxx].map(i->yyy)[0]
vez devar a=xxx;yyy
.Leva o array transposto como entrada.
fonte
Python 2, 73 bytes
Teste em Ideone .
fonte
Ruby,
7259 bytesRetorna
1
paraa>b
,-1
paraa<b
,0
para nenhum.-13 bytes de deduzir o truque da soma do @Dennis na resposta em Python
Experimente online!
fonte
Python 2, 59 bytes
Saídas:
1
paraa>b
2
parab>a
3
para nemRepete a lista, acompanhando a soma
t
das diferenças. O números
rastreia quais sinais foram vistos como um número de dois bitsr
: positivos no bit direito e negativos no bit esquerdo. Isso acontece viacmp(t,0)%3
, o que dát>0
→+1
→ 1t==0
→0
→ 0t<0
→-1
→ 2Tirar
or
isso e o valor atual der
atualiza os 2 bits comor
, com valores zero sem efeito.fonte
Javascript (usando a biblioteca externa enumerável) (123 bytes)
Link para lib: https://github.com/mvegh1/Enumerable
Explicação do código: Passe no vetor aeb, crie a função global z. z começará criando uma matriz de números inteiros a partir de 1, para uma contagem de a.length. .All verificará se o predicado é verdadeiro para todos os membros pertencentes a a. Esse predicado diz para carregar a como um enumerável, faça uma contagem desse equivalente enumerável ao valor atual da iteração do intervalo que criamos e resuma isso. Verifique se>> é a mesma lógica da matriz "b". Então, chamamos z na ordem de (a, b) e comparamos com a ordem de (b, a) ... se igual, retornamos 0 para significar que não há maior. Caso contrário, retornamos 1 se (a, b) for verdadeiro, caso contrário -1
fonte