松本一书10.2节介绍优化Ruby运行速度的一个小例程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
def mandelbrot(cr, ci) limit = 95 iterations = 0 zr = zi = 0.0 while iterations < limit and (zr**2+zi**2) < 10 zr, zi = zr*zr-zi*zi+cr, zr*zi+zi*zr+ci iterations += 1 end return iterations end def mandel_calc(min_r, min_i, max_r, max_i, res) cur_i = min_i while cur_i > max_i print "|" cur_r = min_r while cur_r < max_r ch = 127 - mandelbrot(cur_r, cur_i) printf "%c", ch cur_r += res end print "|\n" cur_i -= res end end mandel_calc(-2, 1, 1, -1, 0.04) |
运行结果如下,是字符画形式的曼德博集合。看了源码也不清楚为何能做到这样的效果……实在是太神奇了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
|}||||||||||||||||||||||||{{{{{{{{{{{{{zzzzyyxwtputUyzzz{{{{{{{|||||||||||||| |||||||||||||||||||||||||{{{{{{{{{{{{{zzzzzyyxwupouxyyzzz{{{{{{{||||||||||||| ||||||||||||||||||||||||{{{{{{{{{{{{zzzzzzyyxwvsmruwxyzzzz{{{{{{{|||||||||||| ||||||||||||||||||||||{{{{{{{{{{{{{zzzzzyyyxwpto Ftvwyyzzzz{{{{{{|||||||||||| |||||||||||||||||||||{{{{{{{{{{{{zzzzzzyyyxwhZn ebhvxyyzzzzz{{{{{||||||||||| |||||||||||||||||||{{{{{{{{{{{{zzzzzzyyyyxxwul Iluxxyyzzzzz{{{{{|||||||||| ||||||||||||||||||{{{{{{{{{{{zzzzzzyyyyxxxwvs\ ^vwxxyyyyzzz{{{{|||||||||| ||||||||||||||||{{{{{{{{{{{zzzzzzzyyxxwwwwvutB puvwxxxyxyyz{{{{{||||||||| |||||||||||||||{{{{{{{{{{zzzzzzzzyyvrllvvrisroQ Yqstsuwxxwqxzz{{{{||||||||| |||||||||||||{{{{{{{{{{zzzzzzzzyyyxwrQoOthDkb G2neXvvvuZwyzz{{{{|||||||| |||||||||||{{{{{{{{{{zzzzzzzzzyyyyxwr< oe nsrdpcoxzz{{{{|||||||| ||||||||||{{{{{{{{{zzzzzzzzzzyyyyxwvt W lfyzzz{{{{||||||| ||||||||{{{{{{{{{zzzzzzzzzyyyyyyxxwuto_ awyyzz{{{{||||||| |||||||{{{{{{{{{zzzyyyyyyyyyyyxxxvsmp aouwxyzz{{{{||||||| |||||{{{{{{{{{zzzzywxyyyyxxxxxxxwvI Wrwxyzz{{{{{|||||| ||||{{{{{{{{{zzzzyxuuwxxxwwxxxwwvurN qutxzz{{{{{|||||| |||{{{{{{{{{zzzzyyxtsvvvvluvwwwvul. e^dwyzz{{{{|||||| ||{{{{{{{{{zzzzzyyxvllpttooteuvuuq] )Qixyzz{{{{|||||| |{{{{{{{{{zzzzzyyxxvupV]lj nTstts qvxyzz{{{{{||||| |{{{{{{{zzzzzzyyxxwvtj eprq emxyzz{{{{{||||| |{{{{{{zzzzzyyyxxwvsrl oo _tyyzz{{{{{||||| |{{{{zzzzzyyyyxwvvus_' Wl qwyzzz{{{{{||||| |{{zzzzzyyyyxxxvUtrq4 e uxyzzz{{{{{||||| |{zzzyyxxxxxxwwvskal= # owxyzzz{{{{{||||| |zzyyxwtwwvvvvqsnK vxyyzzz{{{{{||||| |c?G:9# 6$ ) ntvxyyzzz{{{{{||||| |zzyyxwtwwvvvvqsnK vxyyzzz{{{{{||||| |{zzzyyxxxxxxwwvskal= # owxyzzz{{{{{||||| |{{zzzzzyyyyxxxvUtrq4 e uxyzzz{{{{{||||| |{{{{zzzzzyyyyxwvvus_' Wl qwyzzz{{{{{||||| |{{{{{{zzzzzyyyxxwvsrl oo _tyyzz{{{{{||||| |{{{{{{{zzzzzzyyxxwvtj eprq emxyzz{{{{{||||| |{{{{{{{{{zzzzzyyxxvupV]lj nTstts qvxyzz{{{{{||||| ||{{{{{{{{{zzzzzyyxvllpttooteuvuuq] )Qixyzz{{{{|||||| |||{{{{{{{{{zzzzyyxtsvvvvluvwwwvul. e^dwyzz{{{{|||||| ||||{{{{{{{{{zzzzyxuuwxxxwwxxxwwvurN qutxzz{{{{{|||||| |||||{{{{{{{{{zzzzywxyyyyxxxxxxxwvI Wrwxyzz{{{{{|||||| |||||||{{{{{{{{{zzzyyyyyyyyyyyxxxvsmp aouwxyzz{{{{||||||| ||||||||{{{{{{{{{zzzzzzzzzyyyyyyxxwuto_ awyyzz{{{{||||||| ||||||||||{{{{{{{{{zzzzzzzzzzyyyyxwvt W lfyzzz{{{{||||||| |||||||||||{{{{{{{{{{zzzzzzzzzyyyyxwr< oe nsrdpcoxzz{{{{|||||||| |||||||||||||{{{{{{{{{{zzzzzzzzyyyxwrQoOthDkb G2neXvvvuZwyzz{{{{|||||||| |||||||||||||||{{{{{{{{{{zzzzzzzzyyvrllvvrisroQ Yqstsuwxxwqxzz{{{{||||||||| ||||||||||||||||{{{{{{{{{{{zzzzzzzyyxxwwwwvutB puvwxxxyxyyz{{{{{||||||||| ||||||||||||||||||{{{{{{{{{{{zzzzzzyyyyxxxwvs\ ^vwxxyyyyzzz{{{{|||||||||| |||||||||||||||||||{{{{{{{{{{{{zzzzzzyyyyxxwul Iluxxyyzzzzz{{{{{|||||||||| |||||||||||||||||||||{{{{{{{{{{{{zzzzzzyyyxwhZn ebhvxyyzzzzz{{{{{||||||||||| ||||||||||||||||||||||{{{{{{{{{{{{{zzzzzyyyxwpto Ftvwyyzzzz{{{{{{|||||||||||| ||||||||||||||||||||||||{{{{{{{{{{{{zzzzzzyyxwvsmruwxyzzzz{{{{{{{|||||||||||| |||||||||||||||||||||||||{{{{{{{{{{{{{zzzzzyyxwupouxyyzzz{{{{{{{||||||||||||| |