Вот интересно, как решается такая задачка на PHP. Есть строка: $str = 'ABCBCABCA', где ABC - 1 BC - 2 AB - 3 CA - 4. Требуется написать дешифратор. Пытался решить - ответ не однозначный(всегда разная комбинация). Если у кого какие идеи?
Во-первых, PHP тут не имеет значения. Такая задачка решается на PHP также как и на десятке других языков программирования. Весь вопрос в алгоритме. Во-вторых, простой случай - 'ABCABC' - это {ABC}+{ABC} или все-таки {AB}+{CA}+{BC}???
Данная строка расшифровывается однозначно. Но могут быть варианты, когда однозначности не будет. А алгоритм простой: 1. Начинаем с конца строки 2. Если три последних символа не равны ABC, то последние два символа однозначно приводятся к значению и строка анализируется дальше. 3. Если последние три символа равны ABC, то пробуем расшифровать две строки: одна без BC и одна без ABC. 3.1. Если расшифровывается только одна, то получаем правильный вариант строки. 3.2. Если расшифровываются обе, то получаем как минимум два варианта.
Задача имеет множество решений. А вообще, в таких случаях должен быть задан приоритет операций, тогда задача имеет однозначное решение. В данном случае лично мне сложно предположить, как бы эта задача имела однозначное решение, если приоритеты операций отождествлены. При одинаковом раскладе мы можем иметь n-ое количество решений, в зависимости от количества сомножителей. ((ab^n)*..)
alexander.pro Да я понимаю, что мы сразу не знаем какая строка. Я спрашиваю, как препод предложил решать вопрос с двойственной трактовкой строки.
Смотря что там зашифровано! Если литературный текст, то пробуем все возможные комбинации, сравниваем результат со словарями и в зависимости от кол-ва найденых слов присваиваем некий вес дешифровке, когда будут перепробованы все возможные варианты выбираем вариант с максимальным весом... - это первое что пришло в голову!
флоппик Никаких приоритетов. Просто если последние три символа равны ABC, то имеет место два варианта: ABC и BC. В остальных случаях интерпретация однозначная.
Интересная задача. Без приоритетов действительно не обойтись. Однозначность может быть только в том случае, если размер входных данных ('BC', 'CB' и т.д.) будет равным.