2015-10-26 17 views
5

Tôi đang cố tạo một trình tạo nhóm ngẫu nhiên dựa trên tên đầu vào của người dùng và số lượng nhóm đồng đều. Tương tự như điều này https://www.jamestease.co.uk/team-generator/với Ruby

Cho đến nay tôi đã .split.shuffle chuỗi đầu vào vào một mảng names, nhưng không chắc chắn cách tiếp tục.

names = gets.split(",").shuffle 

names = ["Aaron", "Nick", "Ben", "Bob", "Ted"] 

Ví dụ:
phép nói rằng tôi muốn có 2 đội (tên không phải trong bất kỳ thứ tự/nhóm cụ thể):

team_1 = ["Nick", "Bob"] 

team_2 = ["Aaron", "Ben", "Ted"] 

Bất kỳ sự giúp đỡ hoặc lời khuyên sẽ là đánh giá cao

Trả lời

1

Sử dụng Array#sample để chọn các phần tử ngẫu nhiên từ mảng names:

> names = ["Aaron", "Nick", "Ben", "Bob", "Ted"] 
# => ["Aaron", "Nick", "Ben", "Bob", "Ted"] 
team_size = names.length/2 
# => 2 
> team_1 = names.sample(team_size) # pick 2 random team names 
# => ["Nick", "Ben"] 
> team_2 = names - team_1 # get the remaining team names from the names array 
# => ["Aaron", "Bob", "Ted"] 
2
names = ["Aaron", "Nick", "Ben", "Bob", "Ted", 'shiva', 'hari', 'subash'] 

number_of_teams = 4 

players_per_team = (names.count/number_of_teams.to_f).ceil 

teams = [] 

(1..number_of_teams).each do |num| 
    teams[num - 1] = names.sample(players_per_team) 
    names = names - teams[num - 1] 
end 

> p teams 
=> [["hari", "Ben"], ["Bob", "subash"], ["shiva", "Ted"], ["Nick", "Aaron"]] 

và nếu

names = ["Aaron", "Nick", "Ben", "Bob", "Ted", 'hari', 'subash'] 

sau đó

> p teams 
[["hari", "subash"], ["Bob", "Aaron"], ["Ben", "Nick"], ["Ted"]] 

Lưu ý: điều này sẽ dẫn người chơi ngẫu nhiên mỗi khi bạn xáo trộn

+0

Thứ nhất, cảm ơn cho đầu vào. Nếu chúng ta có 7 tên từ đầu vào và muốn có 3 đội. Đoạn mã trên sẽ không phân chia đồng đều hết mức có thể? – Tim

+0

bạn có nghĩ rằng có thể lấy mẫu số lẻ lẻ một cách đồng đều không? – illusionist

+0

thì bạn phải đảm bảo rằng người dùng không nhập dữ liệu để các tình huống như vậy xảy ra. Áp dụng xác thực :) – illusionist

0
players = %w| Wilma Hector Alfonse Hans Luigi Bo Katz Themal Dotty Billy-Bob | 

num_teams = 4 

(players.shuffle + ["unfilled"]*(players.size % 4)).each_slice(num_teams).to_a.transpose 
    #=> [["Katz", "Bo", "Hans"], ["Themal", "Luigi", "Billy-Bob"], 
    # ["Alfonse", "Hector", "unfilled"], ["Dotty", "Wilma", "unfilled"]]