У вас есть несколько полиномов, которые одиноки, так что сделайте из них несколько компаньонов (которые не будут угрожать нанести удар)!
Для многочлена степени n
существует матрицаn by n
сопутствующего куба . Вам нужно создать функцию, которая принимает список коэффициентов для полинома в порядке возрастания ( ) или убывания ( ) (но не в обоих) и выводить сопутствующую матрицу.a + bx +cx^2 + …
ax^n + bx^(n-1) + cx^(n-2)+…
для полинома c0 + c1x + c2x^2 + ... + cn-1x^(n-1) + x^n
его сопутствующая матрица
(0, 0, 0, ..., -c0 ),
(1, 0, 0, ..., -c1 ),
(0, 1, 0, ..., -c2 ),
(...................),
(0, 0, ..., 1, -cn-1)
обратите внимание, что коэффициент для x^n
равен 1. Для любого другого значения разделите все остальные коэффициенты на x^n
's. Кроме того, 1 смещены от диагонали.
Если используемый вами язык уже содержит функцию или модуль, который делает это, вы не можете использовать его - вы должны написать свой собственный.
Например, если у вас есть 4x^2 – 7x + 12
, коэффициенты в порядке возрастания (12, -7, 4)
и убывания (4, -7, 12)
. Функция или программа должны выводить [(0, -3.0), (1, 1.75)]
для любого заказа. Укажите, какой заказ принимает ваш код. Минимальный полином должен быть квадратичным. Коэффициенты ограничены действительными числами.
Ниже приведены примеры - ваш вывод не должен совпадать с хорошим форматированием, но он должен выводить строки (в ()
) матрицы по порядку.
Восходящий порядок:
input:
[3., 7., -5., 4., 1.]
output:
[(0, 0, 0, -3.),
(1, 0, 0, -7.),
(0, 1, 0, 5.),
(0, 0, 1, -4.)]
input:
[-4., -7., 13.]
output:
[(0, 0.30769231),
(1, 0.53846154)]
input:
[23., 1., 92., 8., -45., 88., 88.]
output:
[(0, 0, 0, 0, 0, -0.26136364),
(1, 0, 0, 0, 0, -0.01136364),
(0, 1, 0, 0, 0, -1.04545455),
(0, 0, 1, 0, 0, -0.09090909),
(0, 0, 0, 1, 0, 0.51136364),
(0, 0, 0, 0, 1, -1. )]
В порядке убывания:
input:
[1., 4., -5., 7., 3.]
output:
[(0, 0, 0, -3.),
(1, 0, 0, -7.),
(0, 1, 0, 5.),
(0, 0, 1, -4.)]
input:
[13., -7., -4.]
output:
[(0, 0.30769231),
(1, 0.53846154)]
input:
[88., 88., -45., 8., 92.,1., 23.]
output:
[(0, 0, 0, 0, 0, -0.26136364),
(1, 0, 0, 0, 0, -0.01136364),
(0, 1, 0, 0, 0, -1.04545455),
(0, 0, 1, 0, 0, -0.09090909),
(0, 0, 0, 1, 0, 0.51136364),
(0, 0, 0, 0, 1, -1. )]
Деннис побеждает с 20 байтами!
источник
Ответы:
CJam,
2320 байтЭто функция, которая извлекает входные данные (в порядке возрастания) из стека и возвращает их в ответ.
Попробуйте онлайн в интерпретаторе CJam .
Как это устроено
источник
CJam,
323128 байтПопробуйте онлайн
Это принимает входные данные в порядке возрастания, используя формат списка CJam. Пример ввода:
Объяснение:
источник
APL,
4030 байтПринимает ввод в порядке возрастания.
Объяснение:
Попробуйте онлайн
источник
Юлия, 43 байта
Это использует порядок убывания для ввода. Он строит матрицу, повернутую на 180 градусов, чтобы обеспечить более эффективное использование «глаза», затем поворачивает матрицу в правильную ориентацию.
источник
Юлия,
6444 байтаПринимает вектор коэффициентов в порядке возрастания.
Ungolfed:
Попробуйте онлайн
Сохранено 20 байтов благодаря Glen O!
источник
R
7159 байтПринимает ввод в порядке возрастания.
Ungolfed:
источник
Matlab, 66 байт
Для ввода используется возрастающий порядок с форматом
[3., 7., -5., 4., 1.]
или[3. 7. -5. 4. 1.]
.Попробуйте онлайн (в октаве).
Пример (в Matlab):
Если программа действительна (вместо функции) с использованием stdin и stdout:
Matlab, 59 байт
источник
n=numel(c=input(''));
n=numel(input(''))
будет действительным, но мне нужно использоватьc
позжеОктава,
4544 байтаПредполагается,
c
что это вектор-столбец с коэффициентом наибольшей степениx
в конце.Старая версия:
Дай пять, Юля!
источник
Python 2, 141 байт
Моя собственная попытка:
Принимает список коэффициентов в порядке убывания и сначала строит транспонирование сопутствующей матрицы - известной своими колющими и разговорчивыми. В возврате zip используется для транспонирования этого транспонирования, чтобы получить фактическую матрицу.
источник
JavaScript (ES6) 85
В порядке возрастания
Попробуйте запустить приведенный ниже фрагмент в любом браузере, совместимом с EcmaScript 6.
источник
TI-BASIC, 50 байтов
Принимает ввод в порядке возрастания. Обратите внимание, что это не будет работать для полиномов степени <2, потому что TI-BASIC не поддерживает пустые матрицы или списки. В ожидании решения от OP, я могу исправить это за счет нескольких байтов.
Сначала мы сохраняем список,
∟X
чтобы позже использовать последний элемент; затем мы вычисляемΔList(Ans-cumSum(Ans))
, что является просто списком с отрицанием последнего отрубленного элемента, и преобразуем его в вектор-столбец. ПосколькуList▶matr(
не изменяетсяAns
, мы можем использовать следующую строку, чтобы получить размерность списка, который мы используем трижды. TI-BASIC не имеет вертикальной конкатенации, поэтому нам нужно взять транспонирование и горизонтальную конкатенацию. В последней строке[A]/∟X(Ans
не будет работать, потому что матрицы могут быть умножены на скаляры, но не разделены.Напомним, что для генерации вектора строки из нулей мы используем редко используемую
randM(
команду.randM(
создает случайную матрицу, но ее записи всегда являются случайными целыми числами от -9 до 9 (!), поэтому на самом деле полезно создавать только нулевые матрицы.источник
Пари / ГП , 49 байт
Попробуйте онлайн!
источник