Considere dos ordenados arrays de enteros y de tamaño y , respectivamente, con . Por ejemplo , .Y m n m < n X = ( 1 , 4 ) Y = ( 2 , 10 , 11 )
Se dice que un juego es algún modo de emparejamiento de cada elemento de con un elemento de de tal manera que no hay dos elementos de están emparejados con el mismo elemento de . El costo de una coincidencia es solo la suma de los valores absolutos de las diferencias en los pares.Y X Y
Por ejemplo, con , podemos hacer los pares que luego han costado . Si hubiéramos formado los pares el costo habría sido . Si hubiéramos hecho los pares el costo habría sido .Y = ( 2 , 10 , 11 ) ( 7 , 2 ) , ( 11 , 10 ) 5 + 1 = 6 ( 7 , 10 ) , ( 11 , 11 ) 3 + 0 = 3 ( 7 , 11 ) , ( 11 , 10 ) 4
Como otro ejemplo, tome , . Podemos hacer los pares por un costo de . Los pares cuestan .Y = ( 2 , 10 , 11 , 18 ) ( 7 , 2 ) , ( 11 , 10 ) , ( 14 , 11 ) 9 ( 7 , 10 ) , ( 11 , 11 ) , ( 14 , 18 ) 7
La tarea es escribir código que, dados dos arreglos ordenados de enteros e , calcule una coincidencia de costo mínimo.Y
Casos de prueba
[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]]
Respuestas:
Brachylog , 16 bytes
Pruébalo en línea!
Explicación
Como nos unificamos
I
a un número entero desde el principio, intentamos cosas desde valores pequeñosI
hasta valores grandes deI
, lo que significa que la primera vez que tendrá éxito será necesariamente para el emparejamiento con las diferencias absolutas más pequeñas.fuente
Jalea ,
15 14 1211 bytesPruébalo en línea!
Fuerza bruta. Toma de entrada como entonces X .Y X
fuente
L}
Funcionaría en lugar de⁹L¤
?ÐṂḢ
->ÞḢ
para guardar un byte.Haskell,
787776 bytesTIO no tiene
Data.Lists
, así que no hay enlace.Básicamente, el mismo algoritmo que se ve en la respuesta de @ dylnan .
Editar: -1 byte gracias a @BMO.
fuente
JavaScript (ES7), 121 bytes
Toma las 2 matrices en sintaxis curry
(x)(y)
.Pruébalo en línea!
fuente
J , 24 bytes
Pruébalo en línea!
Explicación / Demostración:
Un verbo diádico
x f y
-/
encuentra las diferencias(0{]#~1>])"1
para cada fila, mantenga solo los valores no positivos y tome el primero:[:,@:
aplana la lista (para que coincida con la forma del argumento izquierdo)[-
restar el min. diferencias con el argumento izquierdo[,.
coserlos al argumento izquierdo:fuente
Pyth , 18 bytes
Pruébalo aquí!
fuente
Octava , 66 bytes
Función anónima que toma vectores de fila
X
,Y
como entradas y salidas de una matriz de 2 filas donde cada columna es un par de coincidencia.Pruébalo en línea!
fuente
Pyth , 16 bytes
Pruébelo en línea aquí , o verifique todos los casos de prueba a la vez aquí .
fuente
MATL , 16 bytes
Las entradas son
X
, entoncesY
.La coincidencia se genera con los primeros valores de cada par (es decir,
X
) en la primera línea y los segundos valores de cada par en la segunda línea.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Jalea , (10?) 12 bytes
10 bytes si solo se requieren los elementos de Y (ver comentarios); sin embargo, no estoy seguro de si está permitido por la especificación (y tal vez no debería serlo ya que otras respuestas ya implementan este detalle).
Esto se puede lograr eliminando el final
⁸ż
.Un enlace diádico que acepta X a la izquierda e Y a la derecha.
(
œc⁹L¤ạS¥ÞḢż@
y los 10 bytesœc⁹L¤ạS¥ÞḢ
hacen lo mismo con Y a la izquierda y X a la derecha).Pruébalo en línea!
¿Cómo?
fuente
JavaScript (ES7), 100 bytes
Nuevo aquí; cualquier consejo / correcciones sería apreciado! Un intento anterior pasó por alto las complicaciones al ordenar una matriz que contiene un
NaN
valor, por lo que espero no haber perdido nada esta vez.Espera dos argumentos como X , Y , respectivamente. Pruébalo en línea!
Parece ser similar a la solución de @ Arnauld
Explicación
Se basa en el hecho de que dado X , Y están ordenados, existe una solución de coincidencias de costo mínimo donde si todos los pares están dispuestos para preservar el orden de los elementos de X , todos los elementos Y en el arreglo también conservan su orden.
fuente