Bilgi teorisinde "önek kodu", anahtarlardan hiçbirinin başka bir önek olmadığı bir sözlüktür. Başka bir deyişle, bu, hiçbir dizenin diğerinin hiçbiriyle başlamayacağı anlamına gelir.
Örneğin {"9", "55"}
, bir önek kodudur, fakat {"5", "9", "55"}
değildir.
Bunun en büyük avantajı, kodlanmış metnin aralarında bir ayırıcı olmadan yazılabilmesi ve yine de benzersiz bir şekilde deşifre edilebilir olmasıdır. Bu gibi sıkıştırma algoritmaları gösterir her zaman en uygun önek kodunu üreten Huffman kodlaması görülür .
Göreviniz basit: Dizelerin bir listesi verildiğinde, geçerli bir önek kodu olup olmadığını belirleyin.
Girişiniz:
Herhangi bir makul formatta dizelerin bir listesi olacaktır .
Yalnızca yazdırılabilir ASCII dizeleri içerecektir.
Boş dizeler içermeyecek.
Çıktınız bir truthy / falsey değeri olacaktır: Geçerli bir önek kodu ise Truthy ve değilse falsey.
İşte bazı gerçek test durumları:
["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"]
İşte bazı yanlış test durumları:
["4", "42"]
["1", "2", "3", "34"]
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]
Bu kod-golf'dür, bu nedenle standart boşluklar uygulanır ve baytlarda en kısa sürede cevap verilir.
001
benzersiz bir şekilde deşifre edilebilir olur? Ya olabilir 00, 1
veya 0, 11
.
0, 00, 1, 11
anahtarları olarak tüm 0 00 bir önek olduğundan bu bir önek kodu değildir ve 1 11. Bir önek kodu öneki olduğu hiçbiri başka anahtarla tuşları başlar. Örneğin, eğer anahtarlarınız 0, 10, 11
bu bir ön kod ise ve benzersiz bir şekilde deşifre edilebilirse. 001
Geçerli bir mesaj değil, ama 0011
ya 0010
benzersiz çözülebilir vardır.