2010-05-27 39 views
1

在這裏工作的規則是,用戶可以獲得10,20和30條紋的徽章。但是用戶不能被授予同一連勝的多個徽章。我正在跟蹤用戶模型中的consec wins。如何重構涉及連續集的棘手邏輯?

例如,如果用戶擊中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 

回答

0

嘗試MOD算術。

國防部連勝30 - ,你會得到在30每個波段重複結果...

0

模擺脫了休止符即62 % 30 = 2的。然後有分裂得到30條紋的數量。

Starting with 74 
74 % 30 = 14 
(74 - 14)/30 = 2 
14 - (14 % 10) = 10 
Result: 2x30 streaks and 1x10 streak 
1

唐和蘭迪給出了總體思路。以下是完整的代碼:

def check_win_streak(streak) 
    if streak % 10 == 0 
    award_streak_badge(streak % badge::MAX_STREAK_BADGE_SIZE) 
    end 
end