情報理論では、「プレフィックスコード」とは、どのキーも別のキーのプレフィックスではない辞書です。言い換えれば、これは、文字列が他の文字列で始まらないことを意味します。
たとえば、{"9", "55"}
はプレフィックスコードですが、そうで{"5", "9", "55"}
はありません。
これの最大の利点は、エンコードされたテキストを区切り文字なしで書き留めることができ、一意に解読できることです。これは、常に最適なプレフィックスコードを生成するHuffmanコーディングなどの圧縮アルゴリズムに現れます。
タスクは簡単です。文字列のリストが与えられたら、それが有効なプレフィックスコードかどうかを判断します。
あなたの入力:
出力は、真/偽の値になります。有効なプレフィックスコードの場合はTruthy、そうでない場合はfalseyです。
真のテストケースを次に示します。
["Hello", "World"]
["Code", "Golf", "Is", "Cool"]
["1", "2", "3", "4", "5"]
["This", "test", "case", "is", "true"]
["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011",
"0110", "11001", "00110", "10011", "11000", "00111", "10010"]
いくつかの誤ったテストケースを次に示します。
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
これはコードゴルフなので、標準の抜け穴が適用され、バイト単位の最短回答が勝ちます。
001
が一意に解読可能でしょうか?00, 1
またはのいずれか0, 11
です。
0, 00, 1, 11
すべてをキーとして使用する場合、0はプレフィックス00、1はプレフィックス11であるため、これはプレフィックスコードではありません。プレフィックスコードは、キーが他のキーで始まらない場所です。したがって、たとえば、キーが0, 10, 11
これである場合、これはプレフィックスコードであり、一意に解読可能です。001
有効なメッセージではなく、0011
または0010
独自に解読されています。