Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Задача на python, срочно!

"Впервые в жизни, – подумал Фердинанд, – я сойду с лестницы как полагается. Я взволнован, я по-настоящему взволнован".
Фердинанд встал на задние лапы, переднюю лапу положил на перила и так, шаг за шагом, не спеша сошел вниз. Все получилось складно, удивительно складно. Правда, с третьего этажа на второй он спускался еще с робостью новичка, зато со второго на первый сходил, как бывалый, завсегдатай самых шикарных лестниц и парадных.
Напишите функцию, выбирающую наибольшую последовательность, строго возрастающую или строго убывающую в зависимости от значения аргумента.
Функция upstairs() принимает произвольное количество чисел – ступеней лестницы – и два именованных аргумента:
start – с какого индекса начинать рассматривать позиционные аргументы (по умолчанию с 0);
order – какая нужна последовательность – возрастающая или убывающая (по умолчанию возрастающая – up).
Функция возвращает найденную последовательность. Если таких несколько, то ту, что ближе к началу.


Пример 1

Ввод:
data = [7, 16, 8, 17, 12, 0, 2, 17, 19, 18]
print(*upstairs(*data, order='down'))

Вывод:
17 12 0


Пример 2

Ввод:
data = [5, 13, 4, 0, 14, 15, 16, 8, 0, 3, 20, 13]
print(*upstairs(*data, start=2))

Вывод:
0 14 15 16

По дате
По рейтингу
Аватар пользователя
Просветленный
123456789101112131415161718192021222324252627
 def upstairs(*args, start=0, order='up'): 
    data = list(args) 
    max_seq = [] 
    current_seq = [] 
 
    def compare(a, b): 
        return a < b if order == 'up' else a > b 
 
    for i in range(start, len(data)): 
        if not current_seq or compare(current_seq[-1], data[i]): 
            current_seq.append(data[i]) 
        else: 
            if len(current_seq) > len(max_seq): 
                max_seq = current_seq 
            current_seq = [data[i]] 
     
    if len(current_seq) > len(max_seq): 
        max_seq = current_seq 
 
    return max_seq 
 
# Примеры использования 
data1 = [7, 16, 8, 17, 12, 0, 2, 17, 19, 18] 
print(*upstairs(*data1, order='down'))  # Вывод: 17 12 0 
 
data2 = [5, 13, 4, 0, 14, 15, 16, 8, 0, 3, 20, 13] 
print(*upstairs(*data2, start=2))  # Вывод: 0 14 15 16  

и в 1 строчку кода функцию можно записать

123
 def upstairs(*args, start=0, order='up'): 
    return max((args[i:j] for i in range(start, len(args)) for j in range(i+1, len(args)+1) if all((x < y if order == 'up' else x > y) for x, y in zip(args[i:j], args[i+1:j]))), key=len, default=[])