用Ruby编写的生成器

5
我正在尝试创建一个随机团队生成器,基于用户输入的名称和平均数量的团队。类似于这个https://www.jamestease.co.uk/team-generator/
到目前为止,我已经使用.split.shuffle将输入字符串分割成names数组,但不确定如何进一步操作。
names = gets.split(",").shuffle

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

例如:
假设我想要有两个团队(团队名称不需要按任何特定顺序/团队):

team_1 = ["Nick", "Bob"]

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

任何帮助或提示都将不胜感激。
3个回答

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"]]

如果

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

那么

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

注意:每次洗牌都会产生随机的玩家。

首先,感谢您的输入。如果我们有7个输入名称并且想要3个团队,那么上面的代码不会尽可能平均地分割它吗? - Tim
你认为有可能均匀地抽样奇数人吗? - Shiva
那么你必须确保用户不输入数据,以避免出现这种情况。应用验证 :) - Shiva
是的,添加验证是有意义的哈哈。但在实际情况中,假设一个老师想要使用这个生成器帮助他/她根据一定数量团队均匀地分配教室学生,他不能只省略一个学生或添加不存在的学生。 - Tim

1
使用 Array#samplenames 数组中随机选择元素:
> 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"] 

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"]] 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接