Entrada:
Una secuencia no entera de enteros mayor que cero, cuya longitud es mayor que 1.
Salida:
El producto más grande de todos los elementos de la subsecuencia más larga entre los elementos mínimos y máximos de secuencia, incluidos ellos mismos.
Nota:
Debido a que los elementos mínimos y máximos pueden repetirse, entonces se necesita una respuesta definitiva necesaria para encontrar la subsecuencia más larga posible, en un extremo de la cual es mínimo y en el otro extremo los elementos máximos de la secuencia. Si hay múltiples subsecuencias más largas, elija subsecuencia con el producto más grande.
Ejemplos:
1er ejemplo:
Entrada: [5, 7, 3, 2, 1, 2, 2, 7, 5]
Salida: 42
Explicación:
min == 1
, max == 7
. Hay 2 subsecuencias posibles con min y max en los extremos: [1, 2, 2, 7]
y [7, 3, 2, 1]
. Su longitud es igual, por lo que se comparan productos: 7*3*2*1 == 42
y 1*2*2*7 == 28
. Debido a que 42 >= 28
, la respuesta: 42
.
2do ejemplo:
Entrada: [1, 2, 2, 2, 4, 3, 3, 1]
Salida: 32
Explicación:
min == 1
, max == 4
. 2 subsecuencias: [1, 2, 2, 2, 4]
y [4, 3, 3, 1]
. La longitud de [1, 2, 2, 2, 4]
es mayor que la longitud de [4, 3, 3, 1]
. producto: 1*2*2*2*4 == 32
=> la respuesta es 32
.
Ejemplo 3d:
Entrada: [1, 2, 3, 4, 3, 3, 1]
Salida: 36
Breve explicación:
min == 1
, max == 4
. 2 subsecuencias: [1, 2, 3, 4]
y [4, 3, 3, 1]
. 1*2*3*4 == 24
, 4*3*3*1 == 36
, 36 >= 24
=> Respuesta es 36
.
4to ejemplo:
Entrada: [2, 2, 2]
Salida: 8
Explicación:
min == 2
, max == 2
. 2 subsecuencias diferentes: [2, 2]
y [2, 2, 2]
. La longitud de [2, 2, 2]
es mayor que la longitud de [2, 2]
. producto: 2*2*2 == 8
=> la respuesta es 8
.
Más ejemplos (aleatorios) :
>>>[7, 2, 3, 6, 8, 6, 2, 5, 4, 3]
288
>>>[3, 3, 8, 9, 1, 7, 7, 2, 2, 4]
9
>>>[3, 2, 6, 5, 4, 1, 8, 8, 7, 9]
4032
>>>[7, 4, 2, 8, 8, 3, 9, 9, 5, 6]
31104
Comprueba tu solución:
Aquí está Python 3 lambda (788 bytes) , que satisface el requisito de la tarea:
lambda O: __import__('functools').reduce(__import__('operator').mul,O[[[slice(O.index(max(O)),len(O)-1-O[::-1].index(min(O))+1),slice(O.index(min(O)),(len(O)-1-O[::-1].index(max(O)))+1)][__import__('functools').reduce(__import__('operator').mul,O[O.index(min(O)):(len(O)-1-O[::-1].index(max(O)))+1],1)>=__import__('functools').reduce(__import__('operator').mul,O[O.index(max(O)):len(O)-1-O[::-1].index(min(O))+1],1)],slice(O.index(min(O)),(len(O)-1-O[::-1].index(max(O)))+1),slice(O.index(max(O)),len(O)-1-O[::-1].index(min(O))+1)][(len(range(O.index(min(O)),(len(O)-1-O[::-1].index(max(O)))+1))>len(range(O.index(max(O)),len(O)-1-O[::-1].index(min(O))+1)))-(len(range(O.index(min(O)),(len(O)-1-O[::-1].index(max(O)))+1))<len(range(O.index(max(O)),len(O)-1-O[::-1].index(min(O))+1)))]],1)
Ganador:
La solución más corta ganará. Todos los lenguajes de programación aceptados.
PD: Estaré encantado con las explicaciones de sus soluciones.