Что это за элегантный модуль, который я не могу понять? - PullRequest
2 голосов
/ 09 февраля 2010

Какой хороший способ определить следующее.

У вас есть таблица игровых игроков в массиве размера N. Каждый раунд каждый игрок получает ход.

Вы знаете индекс игрока, который должен идти первым, и каждый игрок будет по очереди подниматься в массиве и возвращаться к 0, когда достигнет последнего индекса. Например, если игрок с индексом 3 идет первым, то 4 будет вторым, а 2 последним.

Как рассчитать индекс игрока, который идет последним в раунде?

Вот один из способов:

var startPosition = 3;
var numberOfPlayers = 10;

for (var i=0;i<numberOfPlayers;i++) {
  startPosition++;
  if (startPosition == numberOfPlayers) startPosition = 0;
}

Ответы [ 2 ]

7 голосов
/ 09 февраля 2010
(startPos + numberOfPlayers - 1) % numberOfPlayers
1 голос
/ 09 февраля 2010

Не всегда результат startPosition > 0 ? startPosition - 1 : numberOfPlayers - 1, т.е. он всегда на единицу меньше, чем startPosition, за исключением случая, когда startPosition равно 0 ..

Еще более "элегантный" модуль может быть чем-то вроде (startPosition + numberOfPlayers - 1) % numberOfPlayers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...