В этом задании вам будет предложено реализовать любую функцию (или полную программу), которая выполняет два свойства. Эти свойства:
Ваша функция должна быть инъективной (обратимой) функцией от полиномов с неотрицательными целочисленными коэффициентами до неотрицательных целых чисел. Это означает, что никакие два неравных входа не могут быть сопоставлены с одинаковым выходом.
Ваша функция должна сохранить общее количество битов от своего входа до выхода. Это означает, что если вы посчитаете 1 бит каждого коэффициента полинома, их сумма должна быть такой же, как число 1 бит в двоичном представлении выходных данных. Например
9
,1001
в двоичном коде, поэтому он имеет 21
бита.
IO
Целый неотрицательный многочлен такой же, как бесконечный список неотрицательных целых чисел, так что после определенной точки все целые числа равны нулю. Таким образом, полиномы могут быть представлены либо бесконечными списками (хотя это, вероятно, нежелательно), либо конечными списками с неявными нулями после конца списка.
Основное различие между полиномами и конечными списками заключается в том, что добавление нуля в конец списка изменит список:
При добавлении нуля в конец многочлена не изменяется его значение:
Таким образом, если ваша функция принимает конечный список, представляющий многочлен в качестве входных данных, добавление нуля не должно изменить его результат.
При представлении полиномов в виде списков вы можете представлять их либо с первой, либо с последней записью, представляющей постоянный член. Например, у вас может быть одна из следующих возможностей:
В первом случае добавление нулей в конец списка не должно изменить результат; во втором случае, добавляя нули к передней части списка не должно изменить результат.
Конечно, если ваш язык поддерживает многочлены, вы можете использовать их в качестве входных данных.
Вывод должен быть неотрицательным целочисленным выводом через любые стандартные методы.
Это код-гольф, поэтому ответы будут оцениваться в байтах, причем меньше байтов будет лучше.
[]
или[0]
правильный вход?