Самое простое - попросить админа подсчитать. Он, ведь, и так знает, кому сколько быллов выдал.
Если же обходиться своими силами, то можно сделать нехитрую схемку:
- первый клубень генерирует случайное число R
- далее он прибаляет к R свои баллы и получает сумму S_1, которую тихо сообщает второму клубню
- второй клубень прибавляет к S_1 свои баллы и и получает сумму S_2, которую тихо сообщает третьему клубню
- и так далее, пока не дойдем до последнего клубня, который также прибавит к текущей сумме свои баллы и сообщит это число первому клубню
- первому клубню останется только вычесть из текущей суммы R и поделить итог на число клубней
Из тонких моментов - на сколько вообще получится не делиться информацией о своих баллах. Сама по себе информация о среднем, это уже существенная информация. Зная ее в случае двух клубней мы вообще полностью узнаем их баллы.
В более реалистичном случае придется уточнять кое какие детали. Например, резонно предположить, что число баллов (дензнаков) это положительное число, ограниченное неким N. И у нас N это миллион ( ну или миллиард в случае щедрого админа-олигарха ). Тогда будет тонкий момент с генерацией R. Если генерировать R тоже всегда положительным, то есть риск сгенерировать маленькое число. Например, 0. Тогда второй клубень узнает баллы первого с хорошим приближением. Так что надо позволить отрицательные значения. Зная N, также надо потребовать, чтобы по модулю R было более хотя бы 100N.
Но еще лучше немного модифицировать алгоритм выше. Можно генерировать R в диапазоне [0, N]
Первый клубень тогда делает XOR своих баллов с R. Таким образом, получая также случайное S_1.
прочие клубни складывают как и раньше.
Ну а на последнем шаге первый клубень из текущей суммы вычитает S_1, прибавляет свои баллы и делит на число клубней