Nesse desafio, você será solicitado a implementar qualquer função (ou programa completo) que cumpra duas propriedades. Essas propriedades são:
Sua função deve ser uma função injetável (reversível) dos polinômios com coeficientes inteiros não negativos para os inteiros não negativos. Isso significa que não há duas entradas desiguais que podem ser mapeadas para uma saída igual.
Sua função deve preservar o número total de "em bits" desde a entrada até a saída. Isso significa que, se você contar os 1 bits de cada coeficiente do polinômio, sua soma deverá ser igual ao número de 1 bits na representação binária da saída. Por exemplo,
9
está1001
em binário, por isso tem 21
bits.
IO
Um polinômio inteiro não negativo é igual a uma lista infinita de números inteiros não negativos, de modo que após um certo ponto todos os números inteiros sejam zero. Assim, os polinômios podem ser representados por listas infinitas (embora isso provavelmente seja indesejável) ou por listas finitas com zeros implícitos após o final da lista.
A principal distinção entre polinômios e listas finitas é que adicionar um zero ao final de uma lista mudará a lista:
A adição de um zero ao final de um polinômio não altera seu valor:
Portanto, se sua função usa uma lista finita representando um polinômio como entrada, adicionar um zero não deve alterar o resultado.
Ao representar polinômios como listas, você pode representá-los com a primeira ou a última entrada representando o termo constante. Por exemplo, você pode ter uma das seguintes possibilidades:
No primeiro caso, adicionar zeros ao final da lista não deve alterar o resultado; no segundo caso, adicionar zeros à frente da lista não deve alterar o resultado.
Obviamente, se o seu idioma suportar polinômios, você poderá considerá-los como entradas.
A saída deve ser uma saída inteira não negativa através de qualquer método padrão.
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
[]
ou[0]
uma entrada válida?