2015-10-26 10 views
5

Próbuję utworzyć generator losowy zespołu na podstawie danych wejściowych użytkownika i liczby zespołów równomiernie. Podobna do tej https://www.jamestease.co.uk/team-generator/Generator z Ruby

Jak dotąd .split i .shuffle ciąg wejścia do tablicy names, ale pewności, jak postępować dalej.

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

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

na przykład:
powiedzmy chcę mieć 2 zespoły (nazwy nie muszą być w określonej kolejności/zespołu):

team_1 = ["Nick", "Bob"] 

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

Każda pomoc lub wskazówki byłyby bardzo cenione

Odpowiedz

1

Zastosowanie Array#sample wybrać losowo elementów z names tablicy:

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

a jeśli

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

następnie

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

Uwaga: spowoduje to losowo zawodników za każdym razem losowo

+0

Po pierwsze, dziękuję za wejście. Co jeśli mamy 7 nazwisk z danych wejściowych i chcemy mieć 3 zespoły. Powyższy kod nie podzieli go równomiernie, jak to możliwe? – Tim

+0

Czy sądzisz, że można równomiernie próbkować nieparzystą liczbę osób? – illusionist

+0

Cóż, musisz upewnić się, że użytkownik nie wprowadza danych, aby takie scenariusze wystąpiły. Zastosuj sprawdzanie poprawności :) – 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"]]