Не нужен граф. Во-первых, тест проходит, во-вторых, понятно, почему не может быть дубликатов:
Буква Y никогда не используется в одиночку, она всегда используется только в двухбуквенных последовательностях, к-рые начинаются с этой буквы Y.
YO YI YQ YY YU YA = Ё Й Ъ Ы Ю Я
Коль скоро букв всегда две, видя Y мы просто читаем ещё одну букву и ищем данную двухбуквенную последовательность в этой табличке. То, что идёт за Y, уникально идентифицирует кириллическую буквы, преобразование в этом месте однозначно.
Буква H тоже никогда не используется в одиночку. При использовании в паре она всегда идёт после другой буквы:
ZH KH CH SH SHH = Ж Х Ч Ш Щ
Коль скоро эти последовательности уникальны, здесь тоже нет проблемы неоднозначности. Читается так: после любой буквы смотрим, не идёт ли за ней H. Если идёт, читаем все H и далее полученную 2-3 буквенную последовательность ищем в табличке. Табличка однозначна.
Т.е. любая последовательность букв или превратится обратно в кириллицу, или будет ошибка расшифровки.
Так что здесь всё правильно, хотя это ещё не совсем строгое доказательство, а лишь его набросок.
Вопрос лишь во вкусовщине - закодировать ли твёрдый знак как YQ или как QH. Оба варианта плохи, но третьего я пока не вижу.
Поправил головной пост пока что для YQ (в варианте yq всё же есть отдалённое сходоство с ъ - путём некоторой комбинации переворотов и отражений можно сделать что-то, визуально напоминающее ъ)
Отредактировано budden (2017-05-21 21:00:01)