В теорії інформації «код префікса» - це словник, де жоден з ключів не є префіксом іншого. Іншими словами, це означає, що жодна з рядків не починається з будь-якої іншої.
Наприклад, {"9", "55"}
це код префікса, але {"5", "9", "55"}
це не так.
Найбільша перевага цього полягає в тому, що закодований текст можна записати без роздільника між ними, і він все одно буде однозначно розшифрований. Це виявляється в алгоритмах стиснення, таких як кодування Хаффмана , який завжди генерує оптимальний код префікса.
Ваше завдання просте: Давши список рядків, визначте, чи це дійсний код префікса чи ні.
Ваш внесок:
Буде список рядків у будь-якому розумному форматі .
Міститиме лише рядки для друку ASCII.
Не буде містити порожніх рядків.
Вашим результатом буде значення truthy / falsey : 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
є унікальним для розшифровки.