Определить промежутки монотонности функци
Известно, что функция y=P(x) является многочленом степени N с целыми коэффициентами. Также известно, что её точки экстремума - целые числа. Найти промежутки возрастания и промежутки убывания данной функции на отрезке [-100; 100].
Формат ввода
Строка входных данных содержит N+2 целых чисел. Первое из них - степень многочлена (может принимать значения 2, 3 или 4). Последующие - коэффициенты многочлена, упорядоченные от старшего коэффициента до свободного члена. Коэффициенты многочлена лежат в диапозоне [-4096; +4096], при этом первый из них всегда отличен от нуля.
Формат вывода
Необходимо вывести последовательно (слева на право) все промежутки монотонности данной функции на отрезке [-100; 100]. Каждый промежуток монотонности выводится в отдельной строке. Формат строки: <начало участка> <конец участка> <вид монотонности>, где <начало участка> и <конец участка> - целое число со знаком "+" или "-", либо 0; <вид монотонности> - up (функция возрастает), либо down (функция убывает). Между любыми двемя элементами в строке ровно один пробел.
Пример 1
Ввод
2 1 -18 72
Вывод
-100 +9 down
+9 +100 up
Желательно на Паскале ABC
на питоне:
INPUT = "2 1 -18 72"
RESULT = (lambda C, lo, hi, F : (lambda A : "\n".join("{0:+.0f} {1:+.0f} {2}".format(A[i][0], A[i+1][0], "down" if A[i][1]==1 else "up") for i in range(len(A)-1)))(([(lo, 1 if F(C, lo) > F(C, lo+0.5) else -1)] if (F(C, lo-0.5) > F(C, lo) and F(C, lo) > F(C, lo+0.5)) or (F(C, lo-0.5) < F(C, lo) and F(C, lo) < F(C, lo+0.5)) else []) + [(x, 1 if F(C, x-0.5) < F(C, x) and F(C, x+0.5) < F(C, x) else -1) for x in range(lo, hi+1) if (F(C, x-0.5) < F(C, x) and F(C, x+0.5) < F(C, x)) or (F(C, x-0.5) > F(C, x) and F(C, x+0.5) > F(C, x))] + ([(hi, 1 if F(C, hi) > F(C, hi+0.5) else -1)] if (F(C, hi-0.5) > F(C, hi) and F(C, hi) > F(C, hi+0.5)) or (F(C, hi-0.5) < F(C, hi) and F(C, hi) < F(C, hi+0.5)) else [])))(list(map(int, reversed(INPUT.split()[1:]))), -100, 100, lambda c, x : sum([1.0 * c[i] * (x**i) for i in range(len(c))]))
print(RESULT)