查看: 2102|回复: 9

[随意闲聊] [特别无聊]脚本题

[复制链接]

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

发表于 2014-6-15 16:37:44 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 余烬之中 于 2014-6-15 18:41 编辑

特别无聊……无……聊……………………
@taroxd @喵呜喵5 @所有人

第一题什么情况下,下面一行脚本的返回值为true?举例子或说明均可。[pre lang="ruby" line="1"]self == eval(self.to_s)[/pre]

第二题每个对象都有一个object_id,不借助任何工具(包括纸笔),说出object_id为0,为2,为9,为1354687的对象。想好之后才允许碰键盘鼠标。

第三题(这个简单)不借助任何工具做出判断:有一个类A,其中定义了一个protected实例方法hello,什么时候A.new.hello会报错?至少给出三种不同情况。

第四题请用一行代码得出Infinity,禁用分号、逗号、引号以及方括号,新规则:禁用字母算了还是准用字母。


参考答案回复可见,如果版主觉得不合适就取消吧
设置了回帖仅作者可见@咕噜 @tjjlb 帖子性质 还请原谅  已自行取消
参考答案1.[pre lang="ruby" line="1"]class A; self == eval(self.to_s); end
#=> true[/pre]
2.false true 4 677343
3.[pre lang="ruby" line="1"]class A
  protected
  def hello; end
end
# 以上是定义
#======================
# 以下是实现
# 一
A.new.hello #=> NoMethodError
# 二
class B
  def not_world
    A.new.hello
  end
end
B.new.not_world #=>NoMethodError
# 三
class A
  def hello
    raise "Wish You Have A Nice Day!  : )"
  end
end[/pre]
4.[pre lang="ruby" line="1"]1 / (1 - 0.99999999999999999)
#=>Infinity[/pre]
   

点评

而且还设了头像 黑幕?  发表于 2014-6-15 18:40
噗,还真有“所有人”这个人  发表于 2014-6-15 18:40
我要看看楼下三位大触的答案~~~  发表于 2014-6-15 17:28
不要作者可见,大家的代码一起看看嘛~  发表于 2014-6-15 17:12
萌新瑟瑟发抖
看到我请叫我去干活

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-6-15 17:03:45 | 显示全部楼层
本帖最后由 taroxd 于 2014-6-15 17:10 编辑

1 对啦~[pre lang="ruby" line="1"]
module T
  self == eval(self.to_s) # true
end[/pre]

2 全猜错了
大概是0、1、-4、?(猜个main...)

3 我讨厌你的答案……
我去不是只要在类或者子类外面都会报错么?

4 秒杀你的答案……
[pre lang="ruby" line="1"]
Float::INFINITY
[/pre]

点评

正解 但是如果写惯了 多个单词的情况很危险  发表于 2014-6-15 18:30
其实% Infinity 也可以,同样的理由的话 Infinity两边用空格代替了!作为分隔符  发表于 2014-6-15 18:29
OK now  发表于 2014-6-15 17:45
%{} << 73 << 110 << 102 << 105 << 110 << 105 << 116 << 121  发表于 2014-6-15 17:18
切原来是要字符串啊,我还以为就要这个常量呢  发表于 2014-6-15 17:16
回复

使用道具 举报

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-6-15 17:11:11 | 显示全部楼层
本帖最后由 喵呜喵5 于 2014-6-15 17:17 编辑

第一题【我总感觉我的代码最烂了
  1. class TrueClass
  2.   def hello
  3.     self == eval(self.to_s)
  4.   end
  5. end
  6. a = true
  7. p a.hello
复制代码


第二题【放空。。。


第三题【默默望天
  1. def hello
  2.   hello
  3. end

  4. def hello
  5.   hsdfjkjdfhkdsjfdlsjkfasdjklfjalkdf
  6. end

  7. def hello
  8.   msgbox "错"
  9. end
复制代码


第四题【。。。。p "Infinity"

点评

我突然发现这个第一题挺妙的啊  发表于 2014-6-15 18:31
第4题  发表于 2014-6-15 17:46
第三题 类A的protected方法hello 第四题 不要用引号啦  发表于 2014-6-15 17:46
引号禁止  发表于 2014-6-15 17:46
回复

使用道具 举报

○赛

梦石
0
星屑
1254
在线时间
1276 小时
注册时间
2013-1-22
回帖
2078

贵宾

发表于 2014-6-15 17:11:58 | 显示全部楼层
………太厉害了,我又要去补ruby了…
回复

使用道具 举报

无节操

梦石
0
星屑
608
在线时间
795 小时
注册时间
2009-2-6
回帖
3910

开拓者贵宾

发表于 2014-6-15 17:14:46 | 显示全部楼层
本帖最后由 moy 于 2014-6-15 17:29 编辑

我是专程来看答案的
第四题的奇怪结果
  1. p 1 << 123456
  2. #=>你还是自己试吧
复制代码

点评

moy你搞错了,Infinity是浮点数,你整数再怎么移位也移不成浮点数的  发表于 2014-6-15 18:04
moy
至少这从一个侧面告诉我,Infinity比我想象的要大- -b  发表于 2014-6-15 17:58
RangeError:: bignum too big to convert into long  发表于 2014-6-15 17:52
moy
那玩意反正VA是直接无视了,没有任何回馈(报错有没有我就不知道了  发表于 2014-6-15 17:50
长是当然的 你可以试试 1<<12345678987654321  发表于 2014-6-15 17:49
Brandnew day, Brandnew Life
                             规 实在  中
暂为素材区版主,版其  琢磨
应援一下~
RPG制作大师授权素材推广计划
回复

使用道具 举报

无节操

梦石
0
星屑
608
在线时间
795 小时
注册时间
2009-2-6
回帖
3910

开拓者贵宾

发表于 2014-6-15 18:12:23 | 显示全部楼层
@taroxd @余烬之中
大小那个其实我是指这个
  1. p 1 << 123456 < Float::INFINITY # true
  2. p (1 << 123456).to_f < Float::INFINITY # false
复制代码
这是双重标准QAQ(雾
顺便收获了一个怪异的答案(你到底多执着于123456
  1. def inf;1<<123456;end;p inf.to_f #=>Infinity
复制代码
Brandnew day, Brandnew Life
                             规 实在  中
暂为素材区版主,版其  琢磨
应援一下~
RPG制作大师授权素材推广计划
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-6-15 18:14:08 | 显示全部楼层
moy 发表于 2014-6-15 18:12
@taroxd @余烬之中
大小那个其实我是指这个这是双重标准QAQ(雾
顺便收获了一个怪异的答案(你到底多执着 ...


最大的非Infinity浮点数为Float::MAX,超过这个当然就成Float::INFINITY啦~

点评

那是当然的=。= 那只是个预定义常量而已…… 就和Math::PI一样  发表于 2014-6-15 18:55
对了 【class Float; MAX = 2.0; end; 3.0.infinite? #=> nil】(我只是来证明 实际判定中 不以MAX为指标)  发表于 2014-6-15 18:49
是的 请看下楼  发表于 2014-6-15 18:27
moy
话说于是去翻了F1……浮点数可以除0啊= =||| → p 1.0/0 #=> Infinity  发表于 2014-6-15 18:23
回复

使用道具 举报

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

 楼主| 发表于 2014-6-15 18:21:09 | 显示全部楼层
本帖最后由 余烬之中 于 2014-6-15 21:15 编辑

一第二题确实有点冷门 主要是这样一条规则:
奇数id为自然数保留

然后其他的id 有些为固定的常量对象及方法之类保留 比如0 -> false  2 -> true  4 -> nil 404 -> !  4400 -> respond_to? 4904 -> gets ……
而有些 则为开发者新建的对象保留
从零到一千万 所有的偶数id对应的对象请戳我
其中一个比较奇葩的对象请戳我


二另外第四题 我是将一个数除以无穷小得到无穷大 那么多的0.9999999....⑨只是玩玩……因为我写了十七个⑨ 然后用1减去 剩下的应该是【0.十六个零1】 十六是什么意思应该很清楚了
而且:[pre lang="ruby" line="1"]1 - 0.99999999999999999
# 0.0[/pre]
所以 实际上是这样的一个区别:[pre lang="ruby" line="1"]1 / 0.0
# Infinity

1 / 0
# Divided by 0[/pre]
另外[pre lang="ruby" line="1"]1 / (1 - 0.99999999999999999)
# Infinity

1 / 0.00000000000000001
# 1.0c+17
# 这时候你用再多的0也没用[/pre]
萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

 楼主| 发表于 2014-6-15 18:25:04 | 显示全部楼层
moy 发表于 2014-6-15 18:12
@taroxd @余烬之中
大小那个其实我是指这个这是双重标准QAQ(雾
顺便收获了一个怪异的答案([ s ]你到底多执着 ...


事实上
  1. 1 << 123456
  2. # ^%#*%*&!$^%*&!%^!&

  3. (1 << 123456).to_f
  4. # Infinity
复制代码

点评

就是 .nan? .infinite? 和 .finite?呀  发表于 2014-6-15 18:57
有什么专门的方法…… NaN和Infinity就是两个特殊的、固定的浮点数罢了  发表于 2014-6-15 18:56
moy
嗯,查阅F1时看到了·w·  发表于 2014-6-15 18:42
我想这是因为Integer有Bignum而Float没有 另外 Float存在专门的方法判定NaN和Infinity  发表于 2014-6-15 18:39
moy
这微妙而欢乐的bug233  发表于 2014-6-15 18:35
萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-6-15 19:05:25 | 显示全部楼层
余烬之中 发表于 2014-6-15 18:25
事实上


毫无特殊之处(这里是infinite?方法的定义)
  1. static VALUE
  2. flo_is_infinite_p(VALUE num)
  3. {
  4.     double value = RFLOAT_VALUE(num);

  5.     if (isinf(value)) {
  6.         return INT2FIX( value < 0 ? -1 : 1 );
  7.     }

  8.     return Qnil;
  9. }
复制代码
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部