W teorii informacji „kod prefiksu” to słownik, w którym żaden z kluczy nie jest prefiksem innego. Innymi słowy, oznacza to, że żaden ciąg nie zaczyna się od żadnego z pozostałych.
Na przykład {"9", "55"}
jest kodem prefiksu, ale {"5", "9", "55"}
nie jest.
Największą zaletą tego jest to, że zakodowany tekst można zapisać bez separatora między nimi i nadal będzie on wyjątkowo czytelny. Widać to w algorytmach kompresji, takich jak kodowanie Huffmana , które zawsze generuje optymalny kod prefiksu.
Twoje zadanie jest proste: na podstawie listy ciągów określ, czy jest to prawidłowy kod prefiksu.
Twój wkład:
Będzie listą ciągów znaków w dowolnym rozsądnym formacie .
Będzie zawierać tylko drukowalne ciągi ASCII.
Nie będzie zawierać żadnych pustych ciągów.
Twój wynik będzie miał wartość true / falsey : Prawda, jeśli jest to poprawny kod prefiksu, i falsey, jeśli nie jest.
Oto kilka prawdziwych przypadków testowych:
["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"]
Oto kilka fałszywych przypadków testowych:
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
Jest to kod-golf, więc obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach.
001
byłoby wyjątkowo rozszyfrowalne? Może to być 00, 1
albo 0, 11
.
0, 00, 1, 11
wszystko jako klucze, nie jest to kod prefiksu, ponieważ 0 to prefiks 00, a 1 to prefiks 11. Prefiks to kod, w którym żaden z kluczy nie zaczyna się od innego klucza. Na przykład, jeśli twoje klucze to są, 0, 10, 11
jest to kod prefiksowy i jednoznacznie rozszyfrowalny. 001
nie jest ważny komunikat, ale 0011
czy 0010
są wyjątkowo odczytania.