Project1

标题: 有关一个问题的求解 [打印本页]

作者: 余烬之中    时间: 2013-10-19 19:24
标题: 有关一个问题的求解
问题:
如何用一行语句达到如下效果:
输出3到10之间的随机数,但这个数绝不会是7或8
(没错 这个题目是抄来的 @76213585 对这个问题突然有了兴趣)
(尽量不用循环)

已有的解法:
@satgo1546
RUBY 代码复制
  1. (rand(6) <= 4) ? (rand(4) + 3) : (rand(2) + 9)

用了很龌龊的伪装 不过也是达到了要求
不过之前@myownroc 用到了相同的方法,只是没简化为一行
RUBY 代码复制
  1. a = rand(6)
  2. if a <= 3
  3.   p rand(3) + 3 #这里好像算错了= =!
  4. else
  5.   p rand(2) + 9
  6. end


@无脑之人 用到了这个方法……很难普适,从数组中随机取
RUBY 代码复制
  1. [3,4,5,6,9,10].[](rand(6))


使用了循环的算法  @76213585
RUBY 代码复制
  1. loop do;a = rand(8)+3;if a != 7 and a != 8;p a;break;end;end


楼主的算法(递归)
RUBY 代码复制
  1. def b x,y,z;z.include?(a=rand(y-x+1)+x) ? b(x,y,z) : a;end;p b(3,10,[7,8])


仍然征求新的算法~
作者: 恐惧剑刃    时间: 2013-10-19 19:36
  1. def num_p;num=rand(10)+1;unless [1, 2, 7, 8].include?(num);return num;end;end
复制代码

作者: 无脑之人    时间: 2013-10-19 20:16
  1. def range_random(*ranges)
  2.   ranges.map{|i|i.to_a}
  3.   ranges.flatten!
  4.   ranges[rand(ranges.size)]
  5. end
  6. range_random(3..6,9..10)
复制代码

作者: satgo1546    时间: 2013-10-19 20:19
本帖最后由 satgo1546 于 2013-10-19 20:21 编辑
  1. (rand(2) == 1) ? (rand(3) + 3) : ((rand(3) == 2) ? 6 : rand(2) + 9)
复制代码
↑ 应付LZ的方法
↓ 超级奇葩的方法
  1. (rand(6) == 1) ? 3 : ((rand(5) == 1) ? 4 : ((rand(4) == 1) ? 5 : ((rand(3) == 1) ? 6 : ((rand(2) == 1) ? 9 : 10))))
复制代码

作者: orzfly    时间: 2013-10-19 20:20
本帖最后由 orzfly 于 2013-10-19 21:34 编辑
无脑之人 发表于 2013-10-19 20:16


对于没有 Array#sample 而且支持 -> 语法的
RUBY 代码复制
  1. ->(x){x[rand(x.size)]}.call([*3..10] - [7, 8])


对于没有 Array#sample 而且不支持 -> 语法的
RUBY 代码复制
  1. lambda {|x|x[rand(x.size)]}.call([*3..10] - [7, 8])


对于有 Array#sample 的
RUBY 代码复制
  1. ([*3..10] - [7, 8]).sample

作者: 紫英晓狼1130    时间: 2013-10-19 20:25
LS各位已经正解了
作者: satgo1546    时间: 2013-10-19 20:57
@余烬之中
((rand(89) == 1) ? 3 : ((rand(88) == 1) ? 4 : ((rand(87) == 1) ? 5 : ((rand(86)== 1) ? 6 : ((rand(85) == 1) ? 7 : ((rand(84) == 1) ? 8 : ((rand(83) == 1) ? 9 : ((rand(82) == 1) ? 10 : ((rand(81) == 1) ? 11 : ((rand(80) == 1) ? 12 : ((rand(79) == 1) ? 13 : ((rand(78) == 1) ? 14 : ((rand(77) == 1) ? 15 : ((rand(76) == 1) ? 16 : ((rand(75) == 1) ? 17 : ((rand(74) == 1) ? 18 : ((rand(73) == 1) ? 19 : ((rand(72) == 1) ? 20 : ((rand(71) == 1) ? 21 : ((rand(70) == 1) ? 22 : ((rand(69) == 1) ? 23 : ((rand(68) == 1) ? 24 : ((rand(67) == 1) ? 25 : ((rand(66) == 1) ? 26 : ((rand(65) == 1) ? 28 : ((rand(64) == 1) ? 30 : ((rand(63) == 1) ? 31 : ((rand(62) == 1) ? 32 : ((rand(61) == 1) ? 33 : ((rand(60) == 1) ? 34 : ((rand(59) == 1) ? 35 : ((rand(58) == 1) ? 36 : ((rand(57) == 1) ? 37 : ((rand(56) == 1) ? 38 : ((rand(55) == 1) ? 39 : ((rand(54) == 1) ? 40 : ((rand(53) == 1) ? 41 : ((rand(52) == 1) ? 42 : ((rand(51) == 1) ? 43 : ((rand(50) == 1) ? 44 : ((rand(49) == 1) ? 45 : ((rand(48) == 1) ? 46 : ((rand(47) == 1) ? 47 : ((rand(46) == 1) ? 48 : ((rand(45) == 1) ? 49 : ((rand(44) == 1) ? 50 : ((rand(43) == 1) ? 51 : ((rand(42) == 1) ? 52 : ((rand(41) == 1) ? 53 : ((rand(40) == 1) ? 54 : ((rand(39) == 1) ? 55 : ((rand(38) == 1) ? 56 : ((rand(37) == 1) ? 57 : ((rand(36) == 1) ? 58 : ((rand(35) == 1) ? 59 : ((rand(34) == 1) ? 60 : ((rand(33) == 1) ? 61 : ((rand(32) == 1) ? 62 : ((rand(31) == 1) ? 63 : ((rand(30) == 1) ? 64 : ((rand(29) == 1) ? 66 : ((rand(28) == 1) ? 67 : ((rand(27) == 1) ? 68 : ((rand(26) == 1) ? 69 : ((rand(25) == 1) ? 70 : ((rand(24) == 1) ? 71 : ((rand(23) == 1) ? 73 : ((rand(22) == 1) ? 74 : ((rand(21) == 1) ? 75 : ((rand(20) == 1) ? 76 : ((rand(19) == 1) ? 79 : ((rand(18) == 1) ? 80 : ((rand(17) == 1) ? 81 : ((rand(16) == 1) ? 84 : ((rand(15) == 1) ? 85 : ((rand(14) == 1) ? 86 : ((rand(13) == 1) ? 87 : ((rand(12) == 1) ? 88 : ((rand(11) == 1) ? 89 : ((rand(10) == 1) ? 90 : ((rand(9) == 1) ? 91 : ((rand(8) == 1) ? 92 : ((rand(7) == 1) ? 93 : ((rand(6) == 1) ?95 : ((rand(5) == 1) ? 96 : ((rand(4) == 1) ? 97 : ((rand(3) == 1) ? 98 : 99)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
作者: 各种压力的猫君    时间: 2013-10-19 21:19
RUBY 代码复制
  1. (a=rand(3..8))>6?a+2:a


何必简单问题复杂化还搞什么循环……针对这个问题来说这种思路明显最简单。
至于用 + 还是 += 看你需要咯……
作者: Sunny.J    时间: 2013-10-19 22:35
不明觉厉




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1