Se le darán dos matrices de números de punto flotante. Su tarea es emparejar los elementos correspondientes de las dos matrices y obtener el máximo de cada par. Sin embargo , si los dos elementos correspondientes son iguales, debe tomar su suma en su lugar.
Por ejemplo, dadas las listas [1, 3, 3.2, 2.3]
y [3, 1, 3.2, 2.6]
, debe hacer lo siguiente:
Par de los elementos (o CP):
[[1, 3], [3, 1], [3.2, 3.2], [2.3, 2.6]]
.Ir a través de cada par y aplicar el proceso anterior:
[3, 3, 6.4, 2.6]
.
Especificaciones
Las matrices / listas siempre tendrán la misma longitud. Sin embargo, pueden estar vacíos.
Los números que contienen siempre se adaptarán a las capacidades de su idioma, siempre y cuando no abuse de eso. Pueden ser positivos, cero o negativos, debe manejar todos los tipos.
Si le ayuda a reducir el recuento de bytes, también puede tomar la longitud de las listas como entrada.
Reglas
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
- Se aplican las reglas estándar de entrada y salida . Puede tomar entrada (y salida) en cualquier formato razonable.
- Las lagunas predeterminadas están prohibidas.
Casos de prueba
Array_1, Array_2 -> Salida [], [] -> [] [1, 2, 3], [1, 3, 2] -> [2, 3, 3] [1, 3, 3.2, 2.3], [3, 1, 3.2, 2.6] -> [3, 3, 6.4, 2.6] [1,2,3,4,5,5,7,8,9,10], [10,9,8,7,6,5,4,3,2,1] -> [10, 9, 8, 7, 6, 10, 7, 8, 9, 10] [-3,2, -3,2, -2,4, 7, -10,1], [100, -3,2, 2,4, -7, -10,1] -> [100, -6,4, 2,4, 7, -20,2]
Respuestas:
Jalea, 4 bytes
Pruébalo en línea!
Esto usa exactamente el mismo enfoque que mi respuesta APL , ¡excepto que Jelly tiene un incorporado para agregar uno a un número!
fuente
Kotlin,
787571666559 bytesEs mi primer intento, sé genial: D
TIO no funciona con esta solución (y no sé por qué), el código fuente para probar a continuación
EDITAR:
-3 por reemplazar "a + b [i]" por "a * 2"
-4 por reemplazar el método "mapIndexed" por "zip" (Gracias a la solución @AnonymousReality Swift)
-5 reemplazando el método "Math.max" cuando la condición
-1 por cambio cuando el orden de la condición
-6 por cambio aFloatArray () por toList ()
fuente
Python 2 , 45 bytes
Una mezcla de mi solución inicial y @ovs ' .
Pruébalo en línea!
Python 2 , 49 bytes
Pruébalo en línea!
Python 2 , 46 bytes
@ovs sugirió este método para guardar 3 bytes.
Pruébalo en línea!
¿Cómo?
En primer lugar, emparejamos los elementos correspondientes, utilizando
*
ozip()
. Eso nos permite seguir jugando al golf trabajando con un mapa o una lista de comprensión.El truco fresco en esta respuesta es esta parte:
max(x,y)*-~(x==y)
. ¿Cómo funciona? - Bueno, como la mayoría de ustedes ya saben, Python convierte automáticamente los valores bool a enteros cuando se usan en operaciones aritméticas. Por lo tanto,(x==y)
se evalúa como1
, si se cumple la condición. Sin embargo, si los dos valores no son iguales, regresa en su0
lugar. Luego, la operación bit a bit-~
incrementa el valor devuelto por bool1
, dándonos ya sea2
o1
.max(a,b)
da el valor máximo del par y lo*
multiplica por el valor devuelto anteriormente (por lo que se multiplica por2
solo si son iguales, en cuyo casomax()
devuelve el valor de ambos).Esto se basa en el hecho de que la suma de dos números iguales es, de hecho, cualquiera de ellos duplicado, y el tipo de "abusos" de la clase booleana de Python es una subclase de int.
fuente
lambda*a:map(lambda x,y:(x<=y)*y+(x>=y)*x,*a)
JavaScript (ES6),
53494543 bytesIntentalo
Explicación
Función anónima que toma las 2 matrices como argumentos a través de parámetros
a
yb
, al cursar la sintaxis (es decir, llamar conf(a)(b)
Asigne sobre la primera matriz, pasando cada elemento a través de una función donde
x
está el elemento actual yy
el índice actual.Obtener el elemento en el índice
y
en la segunda matriz y asígnelo como el nuevo valor dey
.Compruebe si
y
es mayor quex
y, de ser así, regresey
.De lo contrario, verifique si
y
es menorx
y, de ser así, regresex
De lo contrario, devuelve la suma de
x
yy
. (Multiplicarx
oy
por 2 también funcionaría aquí, para la misma cantidad de bytes).fuente
j.value.split`,`.map(eval)
oeval('['+j.value+']')
? Tambiénx+y
se vería más ordenado en mi humilde opinión..map(eval)
. 2) De acuerdo, se editará momentáneamente.Haskell, 34 bytes
Pruébalo en línea.
fuente
x!y=max x y+sum[x|x==y]
.R ,
3129 bytespmax
toma el máximo paralelo de los dos (o más) arreglos (reciclando el más corto según sea necesario).Estaba mirando el comentario de Luis Mendo y obviamente me di cuenta de que el enfoque también podría funcionar para R. Eso me llevó a 30 bytes, pero luego empecé a jugar con diferentes maneras de conseguir índices en lugar de mejorar mi respuesta original, y tropezamos
!a-b
comoTRUE
dondea==b
yFALSE
de lo contrario, lo que equivale aa==b
. Sin embargo, por cualquier razón, R no requiere paréntesis!a-b
como lo hacea==b
, lo que me ahorró dos bytes.Como mencionó JDL en los comentarios , esto funciona porque
!
(la negación) tiene menor prioridad que el operador binario-
en R, lo cual es extraño.Pruébalo en línea! (nueva versión)
Pruébalo en línea! (original)
fuente
:
cuando interactúo con la aritmética.Python 3 ,
484644 bytes-2 bytes gracias a @nwellnhof
Pruébalo en línea!
fuente
Dyalog APL, 5 bytes
Pruébalo en línea!
¿Cómo?
⌈
, máximo en cuanto a elementos de los argumentos×
, elemento sabio multiplicar1+=
, 1 agregado a la igualdad de elementos de los argumentosEsto funciona porque si los números son desiguales,
1+=
será1
, que cuando se multiplica por el máximo, es el máximo. Cuando los números son iguales,1+=
volverá2
, cuando eso se multiplique por el máximo, obtenemos el doble o el máximo agregado a sí mismo.fuente
Jalea , 6 bytes
Un enlace diádico que toma una lista de números en cada lado y devuelve la lista resultante.
Pruébalo en línea! o ver un conjunto de pruebas *.
¿Cómo?
Una alternativa es este enlace monádico que toma una lista de las dos listas, también 6 bytes :
* ¡No creo haber creado un pie de página de prueba casi tres veces el número de bytes del código antes!
fuente
»
vectoriza antes!max([1,1,0],[1,0,3]) -> [1,1,0]
(no[1,1,3]
).05AB1E , 5 bytes
Pruébalo en línea!
-1 gracias a Emigna .
fuente
γ
!{γθ
probablemente sea lo más corto que pueda llegar para eso.øεMÃO
?MÃ
) yay ahora tengo la delantera: p por ciertoøεZÃO
también funcionaríaMATL , 7 bytes
La entrada es una matriz de dos filas, donde cada fila es una de las matrices.
Pruébalo en línea!
Explicación
fuente
Java 8,
80696766656463 bytesEn su lugar, modifica la segunda matriz de entrada o devuelve una nueva matriz flotante para guardar bytes.
-11 bytes tomando la longitud como entrada de enteros adicional, que se permite de acuerdo con las reglas de desafío.
-5 bytes gracias a @ OliverGrégoire (un byte a la vez ... xD)
-1 byte indirectamente gracias a la respuesta JS de @Shaggy , utilizando en
a[l]*2
lugar dea[l]+b[l]
.Explicación:
Pruébalo aquí
fuente
a->b->l->{float A,B;for(;l-->0;b[l]=(A=a[l])<B?B:A>B?A:A+B)B=b[l];}
float A, B
lafor
inicialización.(a,b,l)->{for(;l-->0;)if(a[l]>=b[l])b[l]=a[l]*(a[l]>b[l]?1:2);}
(63 bytes)Pyth , 11 bytes
Pruébalo aquí!
Pyth , 12 bytes
Pruébalo aquí!
o
Pruébalo aquí!
fuente
05AB1E ,
987 bytesGuardado un byte como Erik the Outgolfer señaló que una lista de listas es una entrada válida.
Pruébalo en línea!
Explicación
fuente
‚
e ingresando como un par de una lista y una lista.Mathematica, 31 bytes
fuente
J, 7 bytes
Pruébalo en línea!
Toma una lista como argumento de la izquierda y la otra como la derecha.
Afortunadamente, la igualdad es una operación de rango cero.
Explicación
@.
no es realmente una declaración if, pero en este caso funciona como uno (indexa en el gerundio en>.`+
función del resultado de su argumento correcto y lo aplica a la entrada).fuente
Ruby , 42 bytes
Pruébalo en línea!
El operador de la nave espacial es genial.
fuente
TI-Basic,
2321 bytesLástima que las listas ocupan dos bytes cada una ...
fuente
X
yY
, luego, utilizandoʟX
yʟY
para acceder a ellos, es decir, "Prompt X,Y:ʟX(ʟX=ʟY)+max(ʟ1,ʟ2
".L1(L1=L2)
intenta obtener el elementoL1
en una lista, lo que arroja un error. Para arreglar eso, cambie el orden, es decir(L1=L2)L1
.Octava, 36 Byte
fuente
@(a,b)max(a,b).*(1+(a==b))
@(a,b)a.*(a>=b)+b.*(b>=a)
Pyth, 7 bytes
Pruébalo aquí
fuente
Python 3 ,
494645 bytes3 bytes eliminados gracias a @ Mr.Xcoder (splat en lugar de dos argumentos), y 1 byte gracias a @ovs (mapa en lugar de comprensión de la lista)
Pruébalo en línea!
fuente
lambda*c:[a*(a>=b)+b*(b>=a)for a,b in zip(*c)]
. Resulta que esto también es bastante bueno :) - Lástima que no haya lugar para más golfLisp común,
6059 bytesPruébalo en línea!
-1 byte gracias a @ Zacharý!
fuente
(mapcar(lambda(x y)(*(max x y)(if(= x y)2 1)))(read)(read))
.Python con numpy, 28 bytes
Asume que la entrada se da como dos matrices numpy.
fuente
lambda a,b:n.fmax(a,b)*((a==b)+1)
import numpy as n
. Me salgo sin él aquí porque está implícito en la entrada.n
si ha definidon
en su código, por lo que las importaciones deben ser explícitas. Por defecto, permitimos funciones o programas completos como respuestas, que incluye funciones anónimas.numpy
. ¿Pero esto incluso funciona sin usarreturn
?C # (.NET Core) , utilizando Linq 47 + 18 = 65 bytes
Pruébalo en línea!
C # (.NET Core), 82 bytes
Pruébalo en línea!
fuente
Array
vsIList
vsIEnumerable
, pero si todos son elegibles, entonces puede obtener el recuento de bytes a 37 - tio.run/##Sy7WTS7O/…Perl 6 ,
3428 bytesPruébalo en línea!
fuente
Swift 3,
8179 BytesSwift tiene una propiedad interesante en el sentido de que un Int no se puede convertir directamente en a
Double
, por lo que debe especificar las matrices como matrices deDouble
s antes de pasarlas a la función.(p.ej)
var k:[Double] = [1,2,3,4,5,5,7,8,9,10]
Editar: -2 bytes gracias a @EriktheOutgolfer
fuente
(x,y)
y antes?
??
necesita el anterior porque Swift los trataría como tipos opcionales en lugar de terrarios (que no lo son). Los otros no lo son. Aparte de eso, esto se puede jugar drásticamente.func n(a:[Float],b:[Float]){print(zip(a,b).map{$0==$1 ?2*$0:max($0,$1)})}
(las imprecisiones flotantes no necesitan ser manejadas por defecto)func n(a:[Float],b:[Float]){print(zip(a,b).map{($0==$1 ?2:1)*max($0,$1)})}
C,
7675 bytes¡Gracias a @Kevin Cruijssen por guardar un byte!
Pruébalo en línea!
fuente
Japt , 13 bytes
Pruébalo en línea!con la
-Q
bandera para formatear la matriz de salida.fuente
í
podría tomar una función como un segundo argumento.Óxido ,
10797 bytesPruébalo en línea!
Guardado 8 bytes gracias a @mgc
fuente
Vec
y utilizando elmax
método def32
s:|a:Vec<f32>,b:Vec<f32>|a.iter().zip(b).map(|(&x,y)|if x==y{x+y}else{x.max(y)}).collect::<Vec<_>>();
Swift 4 , 41 bytes
Casos de prueba:
fuente