mihaild NullДа верно, гениально.
Напишу свое решение, оно не так элегантное, основано на двоичных бисекций (обобщение протокола для двух клеток).
Поясню на случае с 8-ми клеток (восьмибитное число XXXXXXXX).
Введем понятия "четности группы битов" (четность количества единиц, которые входят в этой группе).
Очевидно что переворачивая монетку на какой-то позиции, А меняет четность любой группе битов, в которой эта позиция входит.
Идея в том, чтобы А своим переворачиванием смог передать информацию о любой позиции (с 0 до 7), указывая B: 1) в какой половине битов позиция находится, левой или правой; 2) в какой половине из соответной половины позиция находится, левой или правой... и т.д. 3 раз (для 8 клеток) разбивая двоично, чтобы позиция была однозначно определена.
Для этой цели, А разбивает оригинальное восьмибитное число XXXXXXXX на разных пар групп четырехбитных чисел, а именно:
1) Две четырехбитные числа A и B, из битов соответно AAAABBBB.
2) Две четырехбитные числа A и B, из битов соответно AABBAABB.
3) Две четырехбитные числа A и B, из битов соответно ABABABAB.
Теперь, на первом этапе восьмерка аналогична случаю двух клеток (только вместо решка/орел, смотрим на "четность первых 4 битов", и "четность вторых 4 битов").
Какие бы четности не были (НН, НЧ, ЧН, ЧЧ) очевидно что путем переворачивания либо в левой половине, либо в правой половине - А волен изменить четность любой половины - и аналогично как в случае двух клеток, может передать инфу B в какой из половин битов позиция ключа находилась (левой, или правой).
Допустим, А для этого понадобилось поменять четность в какой-то конкретной половине (например, левой).
Но А здесь имеет возможность выбора - он может поменять любой из 4-х битов в требуемой половине, не меняя итог. Тем самым он может передаст дополнительную инфу (еще один бит), в какой "половине из половины" позиция ключа находилась.
Переходя к разбиении 2 выше (разбиения AABBAABB), видно что (независимо четность какой половины ему нужно поменять) - то он может дополнительно изменить четность групп либо первых двух, либо вторых двух битов (из соответной половины). Тем самым четность этих новых групп из 4 бит А или B, далее укажет в какой "половине половины" (левой или правой) позиция ключа находилась.
Разбиения 1-3 выше для случая восьми (
) клеток очевидным образом обобщаются на
клеток.
Итого путем вычисления четностей соответных пар групп бит (и пользуясь протоколом для двух клеток), выбором позиции переворачиваемой монетки, A может передать любое N-битное число (позицию ключа).