Опять же, можно показывать фокус в двух вариантах:
(а) загадывающий может соврать один или два раза. Если он соврал один раз — фокусник угадывает, если два — просто говорит «не верю».
(б) загадывающий может соврать один раз, и дополнительно — про одну карточку может отказаться отвечать.
Для случая (а) — опять же, раскладываем карточки в зависимости от ответов на две кучки, берём ту, которая меньше (считать проще), и считаем XOR синих кодов (уже четырёхбитовых).
- Если получилось 0000 — загадывающий не соврал ни одного раза (для контроля: так бывает только если ответов «да» — 0, 4 или 8; причём не все наборы с 4 «да» подойдут).
- Если получился код с одной или тремя единицами — это код той карточки, где он соврал; находим её и (комментируя) перекладываем в другую стопку.
- Если получилось что-то ещё — загадывающий соврал два раза, говорим «не верю»
А имея правильные ответы — первые 4 карточки это двоичная запись, так что складываем красные числа (первые на карточках с тремя единицами в коде), попавшие в стопку «да».
Post #4326
1.56K
Математические байки Теперь можно скрестить код Хэмминга с идеей бита контроля чётности: раньше, честные ответы для любых двух чисел отличались минимум в трёх местах. Именно поэтому мы в принципе могли исправить один ошибочный ответ: если бы нашлись числа, для которых честные…