Ответ 1
winner = (3 + player1 - player2) % 3;
Это даст 1, если игрок 1 победит, 2, если победит 2 игрока, 0 за галстук.
Объяснение. В последовательности Rock=0, Paper=1, Scissors=2
каждый элемент побеждает предыдущий. Это верно, даже если мы рассматриваем последовательность как обертывание (то есть последний элемент предшествует первому).
Чтобы поставить это в более математических терминах, для любого элемента X:
- X побежден
(X+1) % 3
. - X побеждает
(X+2) % 3
.
Из этого можно показать, что (3+X-Y) % 3
равно 1, если X побеждает Y или 2, если Y побеждает X.
Добавление 3 требуется, чтобы заставить результат быть неотрицательным: модуль отрицательного числа будет отрицательным или нулевым в C99 и зависит от реализации на C89.