編輯:我要感謝@AShelly在我原來的解決方案趕上一個缺陷,指出我的代碼生成不正確結果當他們是11名球員。事實證明,它給我提供的所有例子都產生了錯誤的答案,但顯然沒有人注意到。下面我有each_slice(players.size/4)
,我以前有each_slice(4)
。我相信現在的代碼是可以的。
代碼
def deal_players(players)
shuffled = players.shuffle
shuffled.shift(4*(players.size/4)).each_slice(players.size/4).map { |g|
shuffled.any? ? g + [shuffled.shift] : g }
end
實例
players = ['andre','ben','cameron','deshawn','emmanuel','freddy',
'gabriel','henry','ian','jadeveon','kentavious']
deal_players(players)
#=> [["emmanuel", "jadeveon" , "gabriel"],
# ["cameron" , "henry" , "ben" ],
# ["freddy" , "kentavious", "ian" ],
# ["deshawn" , "andre" ]]
players = ['andre','ben','cameron','deshawn','emmanuel','freddy','gabriel',
'henry','ian','jadeveon','kentavious','lance','malik','betty']
deal_players(players)
#=> [["betty" , "ian" , "henry" , "kentavious"],
# ["ben" , "freddy", "deshawn", "malik" ],
# ["emmanuel", "lance" , "cameron" ],
# ["gabriel" , "andre" , "jadeveon" ]]
說明
players = ['andre','ben','cameron','deshawn','emmanuel','freddy','gabriel',
'henry','ian','jadeveon','kentavious','lance','malik']
shuffled = players.shuffle
#=> ["ben", "henry", "lance", "emmanuel", "malik", "cameron", "freddy",
# "deshawn", "andre", "jadeveon", "kentavious", "gabriel", "ian"]
a = shuffled.shift(4*(players.size/4))
#=> ["ben", "henry", "lance", "emmanuel", "malik", "cameron", "freddy",
# "deshawn", "andre", "jadeveon", "kentavious", "gabriel"]
shuffled #=> ["ian"]
b = a.each_slice(players.size/4)
#=>#<Enumerator:["ben","henry","lance","emmanuel","malik","cameron","freddy",
# "deshawn","andre","jadeveon","kentavious","gabriel"]:each_slice(3)>
要查看枚舉內容愛適易:
b.to_a
#=> [["ben" , "henry" , "lance" ],
# ["emmanuel", "malik" , "cameron"],
# ["freddy" , "deshawn" , "andre" ],
# ["jadeveon", "kentavious", "gabriel"]]
b.map { |g| shuffled.any? ? g + [shuffled.shift] : g }
#=> [["ben" , "henry" , "lance", "ian"],
# ["emmanuel", "malik" , "cameron" ],
# ["freddy" , "deshawn" , "andre" ],
# ["jadeveon", "kentavious", "gabriel" ]]
這最後一步只會增加的剩餘播放器之一(0之間以及3)shuffled
到每個b
陣列元件,直到沒有更多要添加。在這裏,shuffled
只包含「伊恩」,所以「伊恩」被添加到第一組。
我沒有得到預期的輸出的邏輯。它會誤導我.. –
你想'N%4'組有一個額外的球員? – AShelly
爲什麼大小是5,4,4? –