W tym wyzwaniu zostaniesz poproszony o wdrożenie dowolnej funkcji (lub pełnego programu), która spełnia dwie właściwości. Te właściwości to:
Twoja funkcja musi być funkcją iniekcyjną (odwracalną) od wielomianów z nieujemnymi współczynnikami całkowitymi do nieujemnych liczb całkowitych. Oznacza to, że żadne dwa nierówne dane wejściowe nie mogą być odwzorowane na równą wydajność.
Twoja funkcja musi zachować całkowitą liczbę „bitów” od wejścia do wyjścia. Oznacza to, że jeśli policzysz 1 bit każdego współczynnika wielomianu, ich suma powinna być taka sama jak liczba 1 bitów w binarnej reprezentacji wyniku. Na przykład
9
jest1001
binarny, więc ma 21
bity.
IO
Nieujemny wielomian liczb całkowitych jest taki sam, jak nieskończona lista liczb całkowitych nieujemnych, tak że po pewnym punkcie wszystkie liczby całkowite są zerowe. Tak więc wielomiany mogą być reprezentowane przez listy nieskończone (chociaż jest to prawdopodobnie niepożądane) lub przez listy skończone z niejawnymi zerami po końcu listy.
Kluczowa różnica między wielomianami a listami skończonymi polega na tym, że dodanie zera na końcu listy zmieni listę:
Dodanie zera na końcu wielomianu nie zmienia jego wartości:
Zatem jeśli twoja funkcja pobiera skończoną listę reprezentującą wielomian jako dane wejściowe, dodanie zera nie może zmienić jej wyniku.
Reprezentując wielomiany jako listy, możesz je reprezentować za pomocą pierwszego lub ostatniego wpisu reprezentującego stały termin. Na przykład możesz mieć jedną z następujących możliwości:
W pierwszym przypadku dodanie zer na końcu listy nie powinno zmienić wyniku; w drugim przypadku dodanie zer na początku listy nie powinno zmienić wyniku.
Oczywiście, jeśli twój język obsługuje wielomiany, możesz wziąć je jako dane wejściowe.
Wyjście powinno być nieujemną liczbą całkowitą za pomocą dowolnych standardowych metod.
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
[]
albo[0]
ważny wejście?