Да никак, алгоритм ущербен значит. Но я пытался.
Добавлено через 18 часов 50 минут
Всего 16 вариантов сообщения.
Первые 4 бита - само сообщение.
5й равен 0, если число единиц в сообщении четное (то есть все единицы, ни одной единицы или 2 единицы), 1 если нечетное (одна единица или три).
Таким образом, если есть ошибка в самом сообщении или в 5м бите, это сразу видно. И нет ситуации, когда ошибки нет и это не очевидно.
Что делать дальше, я придумал, но придумал явно неправильно, но сама мысль вроде верная и кажется может пригодится. По крайней мере, если сходятся таким образом первые 5 битов, то 2 последних могут быть любыми, в том числе неиспорченными, мы все равно читаем сообщение.
А если тут ошибка есть, то можно понадеятся, что мы извлечем какую-то пользу из 6го и 7го, которые точно будут достоверные, если ошибка все же видна в первых пяти. Я пробовал вариант, когда 6й бит проверяет четность единиц среди битов 2-5, а 7й - среди битов 5-6.
Возможно, стоит покрутить по другому, например четность среди 1-2 и 3-4.
Добавлено через 18 минут
Например, писать 1 в 6й бит, если число единиц среди 1-2, 5 составляет ни одной или одну, и 0, если 2 или 3.
Аналогично, в 7й бит писать число единиц среди битов 3-5.