Eingang:
Eine nicht leere Folge von ganzen Zahlen größer als Null, deren Länge größer als 1 ist.
Ausgabe:
Das größte Produkt aller Elemente der längsten Teilsequenz zwischen den minimalen und maximalen Elementen der Sequenz, einschließlich sich selbst.
Hinweis:
Da die minimalen und maximalen Elemente wiederholt werden können, ist dann eine eindeutige Antwort erforderlich, um die längste mögliche Teilsequenz zu finden, an deren einem Ende sich ein minimales und am anderen Ende ein maximales Element der Sequenz befindet. Wenn es mehrere längste Teilfolgen gibt, wählen Sie die Teilfolge mit dem größten Produkt.
Beispiele:
1. Beispiel:
Eingang: [5, 7, 3, 2, 1, 2, 2, 7, 5]
Ausgabe: 42
Erklärung:
min == 1
, max == 7
. Es gibt 2 mögliche Untersequenzen mit min und max an den Enden: [1, 2, 2, 7]
und [7, 3, 2, 1]
. Ihre Länge ist gleich, also Produkte vergleichen: 7*3*2*1 == 42
und 1*2*2*7 == 28
. Da 42 >= 28
, Antwort: 42
.
2. Beispiel:
Eingang: [1, 2, 2, 2, 4, 3, 3, 1]
Ausgabe: 32
Erklärung:
min == 1
, max == 4
. 2 Teilfolgen: [1, 2, 2, 2, 4]
und [4, 3, 3, 1]
. Länge von [1, 2, 2, 2, 4]
ist größer als Länge von [4, 3, 3, 1]
. Produkt: 1*2*2*2*4 == 32
=> Antwort ist 32
.
3d beispiel:
Eingang: [1, 2, 3, 4, 3, 3, 1]
Ausgabe: 36
Kurze Erläuterung:
min == 1
, max == 4
. 2 Teilfolgen: [1, 2, 3, 4]
und [4, 3, 3, 1]
. 1*2*3*4 == 24
, 4*3*3*1 == 36
, 36 >= 24
=> Antwort ist 36
.
Viertes Beispiel:
Eingang: [2, 2, 2]
Ausgabe: 8
Erklärung:
min == 2
, max == 2
. 2 verschiedene Teilfolgen: [2, 2]
und [2, 2, 2]
. Länge von [2, 2, 2]
ist größer als Länge von [2, 2]
. Produkt: 2*2*2 == 8
=> Antwort ist 8
.
Weitere (zufällige) Beispiele:
>>>[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
Überprüfen Sie Ihre Lösung:
Hier ist Python 3 Lambda (788 Bytes) , das die Anforderung der Aufgabe erfüllt:
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)
Gewinner:
Kürzeste Lösung gewinnt. Alle Programmiersprachen werden akzeptiert.
PS: Ich freue mich auf die Erläuterungen Ihrer Lösungen