En este desafío, se le pedirá que implemente cualquier función (o programa completo) que cumpla dos propiedades. Esas propiedades son:
Su función debe ser una función inyectiva (reversible) desde los polinomios con coeficientes enteros no negativos hasta los enteros no negativos. Esto significa que no hay dos entradas desiguales que puedan asignarse a una salida igual.
Su función debe preservar el número total de "en bits" desde su entrada hasta su salida. Esto significa que si cuenta los 1 bits de cada coeficiente del polinomio, su suma debe ser la misma que el número de 1 bits en la representación binaria de la salida. Por ejemplo,
9
está1001
en binario, por lo que tiene 21
bits.
IO
Un polinomio entero no negativo es lo mismo que una lista infinita de enteros no negativos, de modo que después de cierto punto todos los enteros son cero. Por lo tanto, los polinomios pueden estar representados por listas infinitas (aunque esto probablemente no sea deseable) o por listas finitas con ceros implícitos después del final de la lista.
La distinción clave entre polinomios y listas finitas es que agregar un cero al final de una lista cambiará la lista:
Si bien agregar un cero al final de un polinomio no cambia su valor:
Por lo tanto, si su función toma una lista finita que representa un polinomio como entrada, agregar un cero no debe cambiar su resultado.
Al representar polinomios como listas, puede representarlos con la primera o la última entrada que representa el término constante. Por ejemplo, podría tener cualquiera de las siguientes posibilidades:
En el primer caso, agregar ceros al final de la lista no debería cambiar el resultado; en el segundo caso, agregar ceros al principio de la lista no debería cambiar el resultado.
Por supuesto, si su idioma admite polinomios, puede tomarlos como entradas.
La salida debe ser una salida entera no negativa a través de cualquier método estándar.
Este es el código de golf, por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
[]
o[0]
una entrada válida?