设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1660|回复: 8
打印 上一主题 下一主题

[随意闲聊] 有关一个问题的求解

[复制链接]

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

跳转到指定楼层
1
发表于 2013-10-19 19:24:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
问题:
如何用一行语句达到如下效果:
输出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])


仍然征求新的算法~

点评

将每个Range拆成数组,然后拆开数组【阁下可以去搜一下flatten方法】然后随机选择  发表于 2013-10-19 20:43
本就是一个整数,你可以试试看  发表于 2013-10-19 20:39
萌新瑟瑟发抖
看到我请叫我去干活

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
2
发表于 2013-10-19 19:36:42 | 只看该作者
  1. def num_p;num=rand(10)+1;unless [1, 2, 7, 8].include?(num);return num;end;end
复制代码

点评

def b;unless [1, 2, 7, 8].include?(num=rand(10)+1);p num;else;b;end;end  发表于 2013-10-19 19:51
BUG : 如果产生的数为1、2、7、8,就不会有返回值  发表于 2013-10-19 19:41

评分

参与人数 1星屑 +1 收起 理由
余烬之中 + 1 最后再加上【;p b】就完成了

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
3
发表于 2013-10-19 20:16:33 | 只看该作者
  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)
复制代码

点评

…………预期结果是一个整数而不是范围……  发表于 2013-10-19 20:38

评分

参与人数 1星屑 +1 收起 理由
余烬之中 + 1 事实上不是很理解

查看全部评分

我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
4
发表于 2013-10-19 20:19:51 | 只看该作者
本帖最后由 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))))
复制代码

点评

如果我要求的是3到99除了27,29,65,72,77,78,82,83,94……请尝试用第二种方法写出来【笑  发表于 2013-10-19 20:40

评分

参与人数 1星屑 +1 收起 理由
余烬之中 + 1 写这么长辛苦你了……

查看全部评分

回复 支持 反对

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60819
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

5
发表于 2013-10-19 20:20:12 | 只看该作者
本帖最后由 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

点评

在下不才……看不懂……  发表于 2013-10-19 20:41

评分

参与人数 1星屑 +1 收起 理由
余烬之中 + 1 @.@

查看全部评分

我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
6
发表于 2013-10-19 20:25:08 | 只看该作者
LS各位已经正解了

点评

想要糖不?今天没了,明天补你  发表于 2013-10-19 20:43
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
7
发表于 2013-10-19 20:57:05 | 只看该作者
@余烬之中
((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)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

点评

不用加括号+1  发表于 2013-10-19 21:22
【==】的优先级高于【? :】,而【? :】的结合方式是自右向左,所以可以不加括号,一个都不需要  发表于 2013-10-19 21:03
ORZ  发表于 2013-10-19 21:02
回复 支持 反对

使用道具 举报

Lv2.观梦者

(?????)

梦石
0
星屑
728
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

8
发表于 2013-10-19 21:19:56 | 只看该作者
RUBY 代码复制
  1. (a=rand(3..8))>6?a+2:a


何必简单问题复杂化还搞什么循环……针对这个问题来说这种思路明显最简单。
至于用 + 还是 += 看你需要咯……

点评

一語驚醒夢中人  发表于 2013-10-20 02:22
惊现失踪已久的大神喵君!  发表于 2013-10-19 21:28
膜拜  发表于 2013-10-19 21:24
膜拜雷达喵触手  发表于 2013-10-19 21:23
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
54
在线时间
231 小时
注册时间
2013-7-9
帖子
1456
9
发表于 2013-10-19 22:35:44 | 只看该作者
不明觉厉
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-25 05:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表