как рефакторировать хитрую логику, включающую последовательные множества? - PullRequest
1 голос
/ 27 мая 2010

Действующее здесь правило заключается в том, что пользователи могут награждаться значками за серию 10, 20 и 30. Но пользователь не может быть награжден несколькими значками за одну полосу. Я отслеживаю последовательные победы в пользовательской модели.

Например, если пользователь попадает в 10-ти полоску, ему присваивается значок из 10-ти полос. Если пользователь на 20 полосах, он / она получает значок с 20 полосами. Если пользователь участвует в серии из 30 побед, ему присваивается значок из 30 серий. Пользователю не следует награждать три значка с 10 полосами - только одну полосу с 10 полосами, одну полосу с 20 полосами и одну полосу с 30 полосами.

Кроме того, если пользователь достигает полосы с 40 победами, то ему должен быть присвоен значок с 10 полосами. Если пользователь набирает 50, ему / ей должен быть присвоен значок с 20 полосами. Если пользователь наберет 60, он должен получить 30-полосный значок. Если пользователь набирает 70, он должен получить 10-ю полосу. Я думаю, вы получили образец здесь. 30-полосный трофей - это максимум, который может получить пользователь. Но пользователь может быть в бесконечной серии побед.

  def check_win_streak(streak)
    badge = 10
    while badge < BADGE::MAX_STREAK_BADGE_SIZE do # MAX_STREAK_BADGE_SIZE = 30

       if streak < badge then
         break
       end

       if (streak % badge == 0) then
         award_streak_badge(badge)
       end

       badge += 10
    end
  end

Ответы [ 3 ]

1 голос
/ 27 мая 2010

Дон и Рэнди дали общую идею. Вот полный код:

def check_win_streak(streak)
  if streak % 10 == 0
    award_streak_badge(streak % badge::MAX_STREAK_BADGE_SIZE)
  end
end
0 голосов
/ 27 мая 2010

Модуль для избавления от остатков, т.е. 62 % 30 = 2. Затем есть разделение, чтобы получить количество 30 полос.

Starting with 74
74 % 30 = 14
(74 - 14) / 30 = 2
14 - (14 % 10) = 10
Result: 2x30 streaks and 1x10 streak
0 голосов
/ 27 мая 2010

попробуйте MOD арифметические.

измените полосу на 30 - и вы получите результаты, которые повторяются в каждой полосе 30 ...

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