У цьому виклику вам буде запропоновано реалізувати будь-яку функцію (або повну програму), яка відповідає двом властивостям. Ці властивості:
Ваша функція повинна бути ін'єктивною (оборотною) функцією від поліномів з невід'ємними цілими коефіцієнтами до невід'ємних цілих чисел. Це означає, що жоден два нерівні входи не можуть відобразити рівний вихід.
Ваша функція повинна зберігати загальну кількість "на біт" від її введення до виводу. Це означає, що якщо порахувати 1 біт кожного коефіцієнта многочлена, їх сума повинна бути такою ж, як кількість 1 біт у двійковому поданні виводу. Наприклад
9
,1001
у двійковій формі, тому вона має 21
біти.
IO
Ненегативний цілочисельний многочлен - це те саме, що нескінченний список невід’ємних цілих чисел такий, що після певного моменту всі цілі числа дорівнюють нулю. Таким чином, поліноми можуть бути представлені або нескінченними списками (хоча це, мабуть, небажано), або кінцевими списками з неявними нулями після закінчення списку.
Ключовою відмінністю між поліномами та кінцевими списками є те, що додавання нуля до кінця списку змінить список:
Хоча додавання нуля до кінця многочлена не змінює його значення:
Таким чином, якщо ваша функція приймає кінцевий список, що представляє поліном як вхід, додавання нуля не повинно змінювати його результат.
Представляючи многочлени як списки, ви можете представляти їх або з першим, або останнім записом, що представляють собою постійний доданок. Наприклад, ви можете мати одну з наступних можливостей:
У першому випадку додавання нулів до кінця списку не повинно змінювати результат; у другому випадку додавання нулів на передню частину списку не повинно змінювати результат.
Звичайно, якщо ваша мова підтримує поліноми, ви можете приймати їх як вхідні дані.
Вихід повинен бути невід'ємним цілим виведенням за допомогою будь-яких стандартних методів.
Це кодовий гольф, тому відповіді будуть набрані в байтах, менша кількість байтів буде кращою.
[]
чи[0]
допустимий вхід?