gpt4 book ai didi

Ruby 组合数学

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:20 24 4
gpt4 key购买 nike

我想生成一个包含俱乐部列表的足球赛事。每场比赛都在周日的随机时间进行,时间包含在 match_starts_at 数组中。每个俱乐部每个星期天只打一场比赛。

例子:

拥有这些俱乐部:

Club Atlético All Boys
Asociación Atlética Argentinos Juniors
Arsenal Fútbol Club
Club Atlético Banfield
Club Atlético Belgrano
Club Atlético Boca Juniors
Club Atlético Colón
Club Estudiantes de La Plata
Club Deportivo Godoy Cruz Antonio Tomba
Asociación Mutual Social y Deportiva Atlético de Rafaela
Club Atlético Independiente
Club Atlético Lanús
Club Atlético Newell's Old Boys
Club Olimpo
Racing Club
Club Atlético San Martín
Club Atlético San Lorenzo de Almagro
Club Atlético Tigre
Club Atlético Unión
Club Atlético Vélez Sarsfield

结果应该与此处看到的类似:http://www.afa.org.ar/index.php?option=com_content&view=article&id=16780%3Afixture-del-torneo-de-primera-division&Itemid=100

俱乐部结构示例:

=> # Club @id=1 @name="Example Name"

=> # Club @id=2 @name="Example2 Name"

夹具结构示例:

=> # Fixture @id=1 @datetime='2011-11-19 19:12:49' @home_id=1 @away_id=2

一个 Fixture 对象需要将以下内容保存到数据库中:

a home club (:home)    
an away club (:away)
and the time of the match (:datetime)

每个俱乐部只能与其他俱乐部比赛一次,所有俱乐部都应该在主场打一场比赛,一场在客场打一场,一场在主场打一场,依此类推。一个日期应该有 10 场比赛。如何创建匹配列表?

这就是我到目前为止所做的。

  competition = Competition.get(1)
clubs = Club.all #20 clubs
@time = Time.now
@count = 0
until @time.sunday? do
@time += (24*60*60) # add 1 day until it's sunday
end
@first_time = @time
@fixture = {1 => []}
clubs.combination(2).each_with_index do |(club1, club2), idx|
Fixture.create(
:home => idx.even? ? club1 : club2,
:away => idx.even? ? club2 : club1,
:datetime => available_fixture_date(club1,club2)
).save
end

def getFecha(club1, club2)
@fixture.keys.each do |fecha|
if (!@fixture[fecha].include?(club1.name) && !@fixture[fecha].include?(club2.name))
@fixture[fecha] << club1.name
@fixture[fecha] << club2.name
@fixture[@fixture.keys.last + 1] = []
return fecha
end
end
end

def available_fixture_date(club1, club2)
fecha = getFecha(club1, club2)
match_starts_at = ['16:00', '17:30', '18:10', '22:00']
match_time = match_starts_at.shuffle.first
@time = @first_time + (24*60*60) * fecha * 7
Time.new(@time.year, @time.month, @time.day, match_time[0,2], match_time[3,2])
end

通过我的代码,我得到了超过 19 个日期,我应该得到 19 个日期,每个日期有 10 个匹配项。

最佳答案

您不会像您为团队配对所做的那样为此得到一个很好的单行,因为它需要查阅现有数据以找出已经采用的日期。但这应该可以正常工作。请注意,我使用了 ActiveSupport 的时间助手,但如果您没有可用的 ActiveSupport 并且不想包含它,则可以使用诸如 Chronic 之类的东西。

def available_fixture_date(club1, club2)
last_played = (club1.fixtures | club2.fixtures).max(:datetime)
last_played.nil? ? DateTime.now.sunday : last_played + 1.week
end

def create_fixtures(clubs)
clubs.combination(2).each_with_index do |(club1, club2), idx|
Fixture.create(
:home => idx.even? ? club1 : club2,
:away => idx.even? ? club2 : club1,
:datetime => available_fixture_date(club1, club2)
)
end
end

关于Ruby 组合数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8197857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com