Introdução
Considere duas matrizes do mesmo comprimento, digamos A = [0,1,0,2]
e B = [-1,1,2,2]
. Suponha que saibamos que seu conteúdo é equivalente em algum sentido, item por item:
0
é equivalente a-1
,1
é equivalente a1
,0
é equivalente a2
, e2
é equivalente a2
.
A equivalência é transitória: -1
e 0
são equivalentes, e 0
e 2
são equivalentes, por isso -1
e 2
também são equivalentes. A unificação de A
e B
é a matriz em que cada item de A
(ou B
) foi substituído pelo maior número equivalente a ele. Nesse caso, a unificação seria [2,1,2,2]
.
A tarefa
Escreva um programa ou função que use duas matrizes inteiras não vazias de igual comprimento e produza sua unificação. Você também pode modificar uma das entradas no lugar em vez de retornar. A menor contagem de bytes vence.
Casos de teste
[0] [0] -> [0]
[1] [2] -> [2]
[0,-1] [-1,-1] -> [0,0]
[0,1,0] [2,1,0] -> [2,1,2]
[1,2,3] [0,0,1] -> [3,3,3]
[0,1,0,2] [-1,1,2,2] -> [2,1,2,2]
[1,0,1,-4] [-3,-1,-2,2] -> [1,0,1,2]
[1,2,3,-2] [1,0,-3,-2] -> [1,2,3,-2]
[-3,-2,-1,0,1] [-1,-1,-1,-1,-1] -> [1,1,1,1,1]
[-3,-2,-1,0,1] [2,-1,0,1,-3] -> [2,2,2,2,2]
[-3,5,5,3,1] [4,2,3,1,2] -> [4,5,5,5,5]
[4,0,2,-5,0] [0,4,-5,3,5] -> [5,5,3,3,5]
[-2,4,-2,3,2,4,1,1] [-2,4,1,2,2,3,1,-2] -> [1,4,1,4,4,4,1,1]
[-10,-20,-11,12,-18,14,-8,-1,-14,15,-17,18,18,-6,3,1,15,-15,-19,-19] [-13,6,-4,3,19,1,-10,-15,-15,11,6,9,-11,18,6,6,-5,-15,7,-11] -> [-8,14,18,14,19,14,-8,-1,-1,15,14,18,18,18,14,14,15,-1,18,18]
[20,15,2,4,-10,-4,-19,15,-5,2,13,-3,-18,-5,-6,0,3,-6,3,-17] [-18,7,6,19,-8,-4,-16,-1,13,-18,8,8,-16,17,-9,14,-2,-12,7,6] -> [20,15,20,19,-8,-4,20,15,17,20,17,17,20,17,-6,14,15,-6,15,20]
code-golf
array-manipulation
Zgarb
fonte
fonte
Respostas:
JavaScript (ES6),
1009011010296 bytesMinha solução inicial foi de 90 bytes:
Embora esteja passando em todos os casos de teste fornecidos, ele falha em algo como:
Casos de teste
Mostrar snippet de código
fonte
a.map
...a.map
podem ser substituídos porb.map
.CJam , 27 bytes
Experimente online! Suíte de teste.
Explicação
fonte
Python 2, 91 bytes
fonte
Python, 86 bytes
Atualiza simultaneamente as duas listas, substituindo cada valor na primeira lista pelo elemento correspondente na segunda lista, se for maior. A substituição é feita
map
noget
método de um dicionário . Em seguida, alterna as listas e repete até que sejam iguais.fonte
Pitão, 13 bytes
Experimente online: Demonstração
Explicação:
Comece com cada par. Estenda iterativamente cada par (lista) com listas sobrepostas, desduplique os elementos e classifique. Pare quando este processo convergir. Imprima o máximo de cada lista.
fonte
PHP,
266241213200 bytesSolução:
Uso:
u([1,2,3], [0,0,1]);
retorna a matriz desejada.Não tão jogado:
fonte
Dyalog APL ,
2928 bytes⌈/¨({∪¨,/∘.{⍵/⍨≢⍺∩⍵}⍨⍵}⍣≡,¨)
Mesma idéia que a solução Pyth .
fonte
Mathematica, 56 bytes
fonte
Java,
273263 bytesO método
f(int[]a,int[]b)
resolve o desafio.Primeiro, passe pelas duas matrizes e acompanhe os números equivalentes. Em seguida, modifique todos os elementos da primeira matriz para que os números equivalentes sejam armazenados.
fonte
Python, 522 bytes
Explicação
Faça uma tabela de valores correspondentes a cada elemento exclusivo em ambas as matrizes (
a
eb
neste caso). Por exemplo, seentão a tabela seria:
em seguida, aplique a pesquisa em profundidade primeiro, então, por exemplo, suponha que eu escolha o elemento mais à esquerda no
a
valor seja then0
e0
tenha as equivalências:0
e2
. Como0
já foi visitado, vá para2
. 2 tem as equivalências:0
. Portanto, o melhor resultado para escolher o elemento mais à esquerdaa
é2
. Aqui está a árvore:e você deseja levar o maior valor possível para o resultado
2
.fonte
PHP, 132 bytes
Função anônima que recebe duas matrizes.
Esta é a minha opinião sobre 'modificar uma das matrizes no local', conforme especificado na saída do desafio. Isso percorre cada uma das duas matrizes, registra a equivalência se a atual for maior que a armazenada, depois percorre a primeira matriz e substitui todos os valores pelos seus maiores equivalentes. A primeira matriz é tomada por referência (daí a
&$a
), então a matriz passada é modificada 'no lugar'.fonte
Java, 170 bytes
Golfe
Ungolfed
Função anônima que recebe dois
int[]
s como argumentos e retorna umint[]
.fonte