Considere dois classificados matrizes de inteiros de e Y de tamanho m e n , respectivamente, com m < n . Por exemplo X = ( 1 , 4 ) , Y = ( 2 , 10 , 11 ) .
Dizemos que uma correspondência é alguma forma de emparelhamento de cada elemento de com um elemento de Y , de tal maneira que não há dois elementos de X são emparelhados com o mesmo elemento de Y . O custo de uma correspondência é apenas a soma dos valores absolutos das diferenças nos pares.
Por exemplo, com , Y = ( 2 , 10 , 11 ) , podemos fazer os pares ( 7 , 2 ) , ( 11 , 10 ) que custam 5 + 1 = 6 . Se tivéssemos feito os pares ( 7 , 10 ) , ( 11 , 11 ), o custo teria sido 3 + 0 . Se tivéssemos feito os pares ( 7 , 11 ) , ( 11 , 10 ), o custo teria sido 4 + 1 = 5 .
Como outro exemplo, considere , Y = ( 2 , 10 , 11 , 18 ) . Podemos fazer os pares ( 7 , 2 ) , ( 11 , 10 ) , ( 14 , 11 ) por um custo de 9 . Os pares ( 7 , 10 ) , ( 11 , 11 ) , custam 7 .
A tarefa é escrever um código que, considerando duas matrizes classificadas de números inteiros e Y , calcule uma correspondência de custo mínimo.
Casos de teste
[1, 4], [2, 10, 11] => [[1, 2], [4, 10]]
[7, 11], [2, 10, 11] => [[7, 10], [11, 11]]
[7, 11, 14], [2, 10, 11, 18] => [[7, 10], [11, 11], [14, 18]]
Respostas:
Braquilog , 16 bytes
Experimente online!
Explicação
Como unificamos
I
um número inteiro no início, tentamos coisas de pequenos valoresI
a grandes valores deI
, o que significa que a primeira vez que será bem-sucedida será necessariamente para o emparelhamento com as menores diferenças absolutas.fonte
Gelatina ,
15 14 1211 bytesExperimente online!
fonte
L}
trabalhar no lugar de⁹L¤
?ÐṂḢ
->ÞḢ
para salvar um byte.Haskell,
787776 bytesO TIO não possui
Data.Lists
, portanto, nenhum link.Basicamente, o mesmo algoritmo visto na resposta de @ dylnan .
Edit: -1 byte graças ao @BMO.
fonte
JavaScript (ES7), 121 bytes
Toma as 2 matrizes na sintaxe de currying
(x)(y)
.Experimente online!
fonte
J , 24 bytes
Experimente online!
Explicação / Demonstração:
Um verbo diádico,
x f y
-/
encontra as diferenças(0{]#~1>])"1
para cada linha, mantenha apenas os valores não positivos e pegue o primeiro:[:,@:
nivela a lista (para corresponder à forma do argumento esquerdo)[-
subtrair o min. diferenças do argumento esquerdo[,.
costure-os no argumento esquerdo:fonte
Pitão , 18 bytes
Experimente aqui!
fonte
Oitava , 66 bytes
Função anônima que recebe vetores de linha
X
,Y
como entradas e saídas de uma matriz de 2 linhas em que cada coluna é um par da correspondência.Experimente online!
fonte
Pitão , 16 bytes
Experimente on-line aqui ou verifique todos os casos de teste de uma vez aqui .
fonte
MATL , 16 bytes
Entradas são
X
, entãoY
.A correspondência é emitida com os primeiros valores de cada par (ou seja,
X
) na primeira linha e os segundos valores de cada par na segunda linha.Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Gelatina , (10?) 12 bytes
10 bytes se apenas os elementos de Y forem necessários (consulte os comentários) - embora não seja ainda permitido pelas especificações (e talvez não deva ser, uma vez que outras respostas já implementam esse detalhe).
Isso pode ser conseguido removendo a trilha
⁸ż
.Um link diádico que aceita X à esquerda e Y à direita.
(
œc⁹L¤ạS¥ÞḢż@
e os 10 bytesœc⁹L¤ạS¥ÞḢ
fazem o mesmo com Y à esquerda e X à direita).Experimente online!
Quão?
fonte
JavaScript (ES7), 100 bytes
Novo aqui; quaisquer dicas / correções seriam apreciadas! Uma tentativa anterior ignorou as complicações com a classificação de uma matriz contendo um
NaN
valor, por isso espero não ter perdido nada neste momento.Espera dois argumentos como X , Y , respectivamente. Experimente online!
Parece ser semelhante à solução de @ Arnauld
Explicação
Baseia-se no fato de que, dado que X e Y são classificados, existe uma solução de correspondências de custo mínimo em que, se todos os pares são organizados para preservar a ordem dos elementos de X , todos os elementos Y no arranjo também preservam sua ordem.
fonte