Contribution:
Une séquence non vide d'entiers supérieurs à zéro, dont la longueur est supérieure à 1.
Sortie:
Le plus grand produit de tous les éléments de la sous-séquence la plus longue entre les éléments de séquence minimum et maximum, y compris eux-mêmes.
Remarque:
Parce que les éléments minimum et maximum peuvent être répétés, alors à une réponse définitive nécessaire pour trouver la sous-séquence la plus longue possible, à une extrémité de laquelle est un minimum et à l'autre extrémité des éléments maximum de la séquence. S'il y a plusieurs sous-séquences les plus longues, choisissez la sous-séquence avec le plus grand produit.
Exemples:
1er exemple:
Contribution: [5, 7, 3, 2, 1, 2, 2, 7, 5]
Sortie: 42
Explication:
min == 1
, max == 7
. Il y a 2 sous-séquences possibles avec min et max aux extrémités: [1, 2, 2, 7]
et [7, 3, 2, 1]
. Leur longueur est égale, donc en comparant les produits: 7*3*2*1 == 42
et 1*2*2*7 == 28
. Parce que 42 >= 28
, réponse: 42
.
2ème exemple:
Contribution: [1, 2, 2, 2, 4, 3, 3, 1]
Sortie: 32
Explication:
min == 1
, max == 4
. 2 sous-séquences: [1, 2, 2, 2, 4]
et [4, 3, 3, 1]
. La longueur de [1, 2, 2, 2, 4]
est supérieure à la longueur de [4, 3, 3, 1]
. produit: 1*2*2*2*4 == 32
=> la réponse est 32
.
Exemple 3D:
Contribution: [1, 2, 3, 4, 3, 3, 1]
Sortie: 36
Brève explication:
min == 1
, max == 4
. 2 sous-séquences: [1, 2, 3, 4]
et [4, 3, 3, 1]
. 1*2*3*4 == 24
, 4*3*3*1 == 36
, 36 >= 24
=> Réponse est 36
.
4ème exemple:
Contribution: [2, 2, 2]
Sortie: 8
Explication:
min == 2
, max == 2
. 2 sous-séquences différentes: [2, 2]
et [2, 2, 2]
. La longueur de [2, 2, 2]
est supérieure à la longueur de [2, 2]
. produit: 2*2*2 == 8
=> la réponse est 8
.
Plus d' exemples (aléatoires) :
>>>[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
Vérifiez votre solution:
Voici Python 3 lambda (788 octets) , qui satisfait l'exigence de la tâche:
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)
Gagnant:
La solution la plus courte gagnera. Tous les langages de programmation acceptés.
PS: je serai heureux des explications de vos solutions