算法 双色球组合 ruby 版(just for fun)

rainchen · 发布于 2013年12月30日 · 最后由 quakewang 回复于 2013年12月30日 · 1782 次阅读
377

周末在家,忽然想到洗牌排牌问题,那用于双色球上就是如何随机取出不重复的数字,目前想到最简单的ruby写法如下:

class ColourBalls
  def self.pick
    red_balls    = (1..33).to_a
    blue_balls   = (1..16).to_a
    picked_balls = []
    picked_balls << red_balls.sample(6).sort
    picked_balls << blue_balls.sample(1).first
    picked_balls
  end
end

5.times { p ColourBalls.pick } 运行效果如下 $ ruby color_balls_v1.rb [[2, 4, 5, 6, 11, 32], 7] [[6, 14, 20, 22, 23, 28], 9] [[1, 7, 8, 10, 14, 18], 13] [[1, 3, 7, 18, 27, 30], 3] [[2, 5, 8, 9, 13, 27], 10]

大家有更好的写法吗?

共收到 7 条回复
681
sevk · #1 · 2013年12月30日

代码没有高亮啊

681
sevk · #2 · 2013年12月30日

可以直接打印,省去 变量 picked_balls

501
tsinghan · #3 · 2013年12月30日

双色球要是随机就好了

377
rainchen · #4 · 2013年12月30日

#3楼 @TsingHan 是随机的

250
miclle · #5 · 2013年12月30日
class ColourBalls
  def self.pick
    [(1..33).to_a.sample(6).sort, (1..16).to_a.sample]
  end
end
377
rainchen · #6 · 2013年12月30日

#5楼 @miclle 去掉了变量牺牲了可读,不过倒是提醒了我sample是可以不需要参数的

162
quakewang · #7 · 2013年12月30日

#5楼 @miclle * 展开还可以省掉to_a

[[*1..33].sample(6).sort, [*1..16].sample]
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册