Вхід:
Непорожня послідовність цілих чисел, більша за нуль, довжина яких більша за 1.
Вихід:
Найбільший добуток усіх елементів найдовшої послідовності між мінімальними та максимальними елементами послідовності, включаючи себе.
Примітка:
Оскільки мінімальний і максимальний елементи можуть бути повторені, то для певної відповіді необхідно знайти найдовшу можливу послідовність, на одному кінці якої є мінімум, а на іншому кінці - максимальні елементи послідовності. Якщо є кілька найдовших підрядів, тоді виберіть підпорядкування з найбільшим продуктом.
Приклади:
1-й приклад:
Вхід: [5, 7, 3, 2, 1, 2, 2, 7, 5]
Вихід: 42
Пояснення:
min == 1
, max == 7
. Існує 2 можливих послідовності з min і max на кінцях: [1, 2, 2, 7]
і [7, 3, 2, 1]
. Їх довжина дорівнює, тому порівнюючи вироби: 7*3*2*1 == 42
і 1*2*2*7 == 28
. Тому що 42 >= 28
, відповідь : 42
.
2-й приклад:
Вхід: [1, 2, 2, 2, 4, 3, 3, 1]
Вихід: 32
Пояснення:
min == 1
, max == 4
. 2 послідовності: [1, 2, 2, 2, 4]
і [4, 3, 3, 1]
. Довжина [1, 2, 2, 2, 4]
більше, ніж довжина [4, 3, 3, 1]
. продукт: 1*2*2*2*4 == 32
=> відповідь є 32
.
3d-приклад:
Вхід: [1, 2, 3, 4, 3, 3, 1]
Вихід: 36
Короткий пояснення:
min == 1
, max == 4
. 2 послідовності: [1, 2, 3, 4]
і [4, 3, 3, 1]
. 1*2*3*4 == 24
, 4*3*3*1 == 36
, 36 >= 24
=> Відповідь 36
.
Четвертий приклад:
Вхід: [2, 2, 2]
Вихід: 8
Пояснення:
min == 2
, max == 2
. 2 різні послідовності: [2, 2]
і [2, 2, 2]
. Довжина [2, 2, 2]
більше, ніж довжина [2, 2]
. продукт: 2*2*2 == 8
=> відповідь є 8
.
Більше (випадкових) прикладів:
>>>[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
Перевірте своє рішення:
Ось лямбда Python 3 (788 байт) , який відповідає вимозі завдання:
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)
Переможець:
Найкоротше рішення виграє. Усі мови програмування прийняті.
PS: Я буду радий поясненням ваших рішень