Introducción
Considere dos matrices de la misma longitud, digamos A = [0,1,0,2]
y B = [-1,1,2,2]
. Supongamos que sabemos que sus contenidos son equivalentes en algún sentido, elemento por elemento:
0
es equivalente a-1
,1
es equivalente a1
,0
es equivalente a2
y2
es equivalente a2
.
La equivalencia es transitiva: -1
y 0
son equivalentes, y 0
y 2
son equivalentes, por lo que -1
y 2
también son equivalentes. La unificación de A
y B
es la matriz donde cada elemento de A
(o B
) ha sido reemplazado por el número más grande que es equivalente a él. En este caso, la unificación sería [2,1,2,2]
.
La tarea
Escriba un programa o función que tome dos matrices enteras no vacías de igual longitud y genere su unificación. También puede modificar una de las entradas en su lugar en lugar de volver. El conteo de bytes más bajo gana.
Casos de prueba
[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]
Respuestas:
JavaScript (ES6),
1009011010296 bytesMi solución inicial fue de 90 bytes:
Aunque está pasando todos los casos de prueba proporcionados, falla por algo como:
Casos de prueba
Mostrar fragmento de código
fuente
a.map
...a.map
se pueden reemplazar porb.map
igual.CJam , 27 bytes
Pruébalo en línea! Banco de pruebas.
Explicación
fuente
Python 2, 91 bytes
fuente
Python, 86 bytes
Simultáneamente actualiza ambas listas reemplazando cada valor en la primera lista por el elemento correspondiente en la segunda lista si es mayor. El reemplazo se realiza con
map
elget
método de un diccionario . Luego, intercambia las listas y se repite hasta que sean iguales.fuente
Pyth, 13 bytes
Pruébelo en línea: demostración
Explicación:
Comience con cada par. Extiende iterativamente cada par (lista) con listas superpuestas, deduplica los elementos y ordena. Pare una vez que este proceso converja. Imprime el máximo de cada lista.
fuente
Php,
266241213200 bytesSolución:
Uso:
u([1,2,3], [0,0,1]);
devuelve la matriz deseada.No tan golfizado:
fuente
Dyalog APL ,
2928 bytes⌈/¨({∪¨,/∘.{⍵/⍨≢⍺∩⍵}⍨⍵}⍣≡,¨)
La misma idea que el solución Pyth .
fuente
Mathematica, 56 bytes
fuente
Java,
273263 bytesEl método
f(int[]a,int[]b)
resuelve el desafío.Primero revise ambas matrices y realice un seguimiento de los números equivalentes. Luego modifique cada elemento en la primera matriz para tener los números equivalentes almacenados.
fuente
Python, 522 bytes
Explicación
Haga una tabla de valores correspondiente a cada elemento único en ambas matrices (
a
yb
en este caso). Por ejemplo sientonces la tabla sería:
luego aplique primero la búsqueda de profundidad, así, por ejemplo, suponga que elijo el elemento más a la izquierda en
a
el valor es entonces0
y0
tiene las equivalencias:0
y2
. Como0
ya ha sido visitado, vaya a2
. 2 tiene las equivalencias:0
. Entonces, el mejor resultado para elegir el elemento más a la izquierdaa
es2
. Aquí está el árbol:y quieres tomar el mayor valor allí, entonces el resultado es
2
.fuente
PHP, 132 bytes
Función anónima que toma dos matrices.
Esta es mi opinión sobre 'modificar una de las matrices en su lugar', como se especifica en la salida del desafío. Esto recorre cada una de las dos matrices, registra la equivalencia si la actual es más grande que la almacenada, luego recorre la primera matriz y reemplaza todos los valores con sus equivalentes más grandes. El primer conjunto se toma por referencia (de ahí el
&$a
), por lo que el conjunto pasado se modifica 'en su lugar'.fuente
Java, 170 bytes
Golfed
Sin golf
Función anónima que toma dos
int[]
s como argumentos y devuelve unint[]
.fuente