Dans ce défi, il vous sera demandé d'implémenter toute fonction (ou programme complet) qui remplit deux propriétés. Ces propriétés sont:
Votre fonction doit être une fonction injective (réversible) des polynômes à coefficients entiers non négatifs aux entiers non négatifs. Cela signifie que deux entrées inégales ne peuvent pas correspondre à une sortie égale.
Votre fonction doit conserver le nombre total de "sur bits" de son entrée à sa sortie. Cela signifie que si vous comptez les 1 bits de chaque coefficient du polynôme, leur somme doit être la même que le nombre de 1 bits dans la représentation binaire de la sortie. Par exemple,
9
est1001
en binaire, il a donc 21
bits.
IO
Un polynôme entier non négatif est identique à une liste infinie d'entiers non négatifs de sorte qu'après un certain point, tous les entiers sont nuls. Ainsi, les polynômes peuvent être représentés soit par des listes infinies (bien que ce soit probablement indésirable) soit par des listes finies avec des zéros implicites après la fin de la liste.
La principale distinction entre les polynômes et les listes finies est que l'ajout d'un zéro à la fin d'une liste changera la liste:
En ajoutant un zéro à la fin d'un polynôme ne change pas sa valeur:
Ainsi, si votre fonction prend en entrée une liste finie représentant un polynôme, l'ajout d'un zéro ne doit pas changer son résultat.
Lorsque vous représentez des polynômes sous forme de listes, vous pouvez les représenter avec la première ou la dernière entrée représentant le terme constant. Par exemple, vous pouvez avoir l'une des possibilités suivantes:
Dans le premier cas, l'ajout de zéros à la fin de la liste ne devrait pas modifier le résultat; dans le second cas, l'ajout de zéros au début de la liste ne devrait pas modifier le résultat.
Bien sûr, si votre langue prend en charge les polynômes, vous pouvez les utiliser comme entrées.
La sortie doit être une sortie entière non négative via toutes les méthodes standard.
Il s'agit de code-golf donc les réponses seront notées en octets, avec moins d'octets étant mieux.
[]
ou[0]
une entrée valide?