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

rainchen · 发布于 2013年12月30日 · 最后由 quakewang 回复于 2013年12月30日 · 1836 次阅读
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

代码没有高亮啊

681

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

501

双色球要是随机就好了

250
class ColourBalls
  def self.pick
    [(1..33).to_a.sample(6).sort, (1..16).to_a.sample]
  end
end
377

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

162

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

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