この課題では、2つの特性を満たす機能(または完全なプログラム)を実装するよう求められます。これらのプロパティは次のとおりです。
関数は、非負の整数に対する非負の整数係数を持つ多項式からの単射(可逆)関数でなければなりません。これは、2つの等しくない入力が等しい出力にマップできないことを意味します。
関数は、入力から出力までの「オンビット」の総数を保持する必要があります。つまり、多項式の各係数の1ビットをカウントする場合、それらの合計は出力のバイナリ表現の1ビットの数と同じでなければなりません。例えば
9
ある1001
ことが2つの持つようにバイナリ1
ビット。
IO
非負の整数多項式は、特定のポイントの後、すべての整数がゼロになるような非負の整数の無限リストと同じです。したがって、多項式は、無限リスト(おそらく望ましくありませんが)またはリストの末尾の後に暗黙のゼロを持つ有限リストのいずれかで表されます。
多項式と有限リストの主な違いは、リストの末尾にゼロを追加するとリストが変更されることです。
多項式の最後にゼロを追加しても、その値は変わりません:
したがって、関数が入力として多項式を表す有限リストをとる場合、ゼロを追加しても結果が変わらないようにする必要があります。
多項式をリストとして表す場合、定数項を表す最初または最後のエントリでそれらを表すことができます。たとえば、次のいずれかの可能性があります。
最初のケースでは、リストの最後にゼロを追加しても結果は変わりません。2番目の場合、リストの先頭にゼロを追加しても結果は変わりません。
もちろん、言語が多項式をサポートしている場合、それらを入力として使用できます。
出力は、任意の標準的な方法による非負の整数出力でなければなりません。
これはコードゴルフであるため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。
[]
か、[0]
有効な入力?