赞 | 0 |
VIP | 2 |
好人卡 | 27 |
积分 | 1 |
经验 | 26327 |
最后登录 | 2019-10-13 |
在线时间 | 953 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 110
- 在线时间
- 953 小时
- 注册时间
- 2007-4-25
- 帖子
- 805
|
1、
在所有脚本之前加一句:这是图省事了,正途还是应该去捕获 `Reset' 异常。
2、- class Array
- def max
- inject(self[0]) { |max, elem| elem > max ? elem : max }
- end
- end
复制代码 3、
你举的两个例子性质不一样——前者的 `actor.hp -= damage' 是 `actor.hp = actor.hp -
damage' 的语法糖,其中有调用 `actor' 这个对象的 `hp=' 实例方法和 actor.hp 的 `-' 实
例方法的过程,但 `actor' 这个引用的值没有变。后者的 `b -= a' 是 `b = b - a',直接改
变了 `b' 这个引用的值,而并不是调用了 `xxx=' 这样的 setter。和第二个例子中的运算对称
的应该是 `actor -= damage',而这种调用方式同样会改变 `actor' 这个引用本身,除非 `-'
方法返回 self。不太清楚你是纯粹想模拟后者的指针反引用机制还是前者的成员变异机制。
4、
前者在当前 Binding 下名为 Foo 的常量已定义时返回 "constant",否则返回 nil;后者在
当前 Binding 下名为 Foo 的方法已定义时返回 "method",否则返回 nil。
5、
想继续用浮点运算的话可以通过 Float#round 四舍五入。熊猫那种是强制类型转换,在大部分语言中是直接抛弃小数部分的。
6、如果是 RMXP 的环境,顶层 self 默认已经是 nil。
7、- class Bitmap
- def area
- width * height
- end
- end
- arr = [Bitmap.new(1,1), Bitmap.new(2,1), Bitmap.new(3,4),Bitmap.new(5,2)]
- p arr
- arr.max { |u, v| u.area <=> v.area }.dispose
- # 位图释放分布
- p arr.collect { |u| u.disposed? }
复制代码 8、
有泛用的排列算法,不过鉴于这里排列长度仅仅为 4,还是套四个循环简单:- arr = []
- def get_next_possible_digits(*digits)
- result, absence = [ ], [ true ] * 6
- digits.each { |digit| absence[digit] = false }
- free = 2 * ((absence[2] ? 0 : 1) + (absence[3] ? 0 : 1)) >= digits.size
- [0, 1, 4, 5].each { |e| result << e if absence[e] } if free
- result << 2 if absence[2] and digits[-1] != 3
- result << 3 if absence[3] and digits[-1] != 2
- result
- end
- for i in 1..5
- for j in get_next_possible_digits(i)
- for k in get_next_possible_digits(i, j)
- for l in get_next_possible_digits(i, j, k)
- arr << i * 1000 + j * 100 + k * 10 + l
- end
- end
- end
- end
- p arr
复制代码 统计学方法:
2??3 => 共 P(4,2) 种排列
2?3? => 共 P(4,2) 种排列
?2?3 => 共 3^2 排列
互换 2 和 3 的位置排列方式翻倍,于是最后是 2*(2*P(4,2)+3^2)=66
9、
Golfer 的版本:- 2.upto(1e3){|i|(2..i).one?{|j|i%j==0}&&p(i)}
复制代码 不过 one? 只有 Ruby 1.9 才有。在 RM 里的话只能:- 2.upto(1e3){|i|(2...i).all?{|j|i%j!=0}&&p(i)}
复制代码 追求执行效率的参见这贴:
http://rpg.blue/forum.php?mod=viewthread&tid=140141
我(用主号)在33楼发过 Eratosthenes 筛法,而 Atkin 筛法是它的一个优化版,是目前公认最快的质数筛法。
http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes |
|