В теории информации «префиксный код» - это словарь, в котором ни один из ключей не является префиксом другого. Другими словами, это означает, что ни одна из строк не начинается ни с одной другой.
Например, {"9", "55"}
это код префикса, но {"5", "9", "55"}
это не так.
Самым большим преимуществом этого является то, что закодированный текст может быть записан без разделителя между ними, и он все равно будет уникально дешифруемым. Это проявляется в алгоритмах сжатия, таких как кодирование Хаффмана , которое всегда генерирует оптимальный код префикса.
Ваша задача проста: по заданному списку строк определить, является ли он допустимым префиксным кодом.
Ваш вклад:
Будет список строк в любом разумном формате .
Будет содержать только печатаемые строки ASCII.
Не будет содержать пустых строк.
В результате вы получите значение true / falsey : Truthy, если это правильный код префикса, и false, если это не так.
Вот несколько настоящих тестов:
["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
является уникально дешифруемым.