Ruby
Sedgewick
心存感恩地生活,自然而然地思考。
展开
-
分数化简的 Ruby 版
虽然Ruby 已有Rational 类做这件事情,还是想试一试。刚开始我以为通分以后分子、分母分别除以原来分母的最大公因数就可以了7/6 + 5/8 = (7×8+5×6)/(6×8) = (86/gcd(6, 8)) / (48/gcd(6, 8)) = 43/24还为此证明了老半天。后来我们一高人给了一个例子:7/18 + 11/30 = (7×30+11×18) / (18×30) = (4原创 2008-07-16 14:52:00 · 900 阅读 · 0 评论 -
ruby-graphviz 入门
自从写了一个关于Graphviz 的教程以来,我一直觉得它使用起来还不够方便。最近终于找到Graphviz 的Ruby 扩展了——ruby-graphviz。首先你得安装Graphviz,记得装在默认目录下,不然ruby-graphviz 找不到(我还不知道怎么设置PATH,请指教)。然后,gem 一下:gem install ruby-graphviz 接下来将见原创 2009-05-26 14:44:00 · 3822 阅读 · 0 评论 -
Treetop 入门
Treetop 是一个出奇简单的Ruby 写的解析器。我知道Treetop 是因为看到Nathan Sobo在RubyConf 2007上做的一个报告。第一步:安装Treetopgem install treetop 第二步:新建一个叫arithmetic 的.treetop 文件grammar Arithmetic rule additive原创 2009-05-25 14:04:00 · 2318 阅读 · 0 评论 -
两百行写一个递归下降解析器
最近看到Peter Cooper 用Ruby 实现了一个Recursive Descent Parser。让我惊讶的是,作者仅仅用了255 行Ruby 代 码就实现了。于是我决定分析一下这个神奇的rdparser。先看看它怎么用吧。初始化需要定义语法规则:如果左边是终结符,右边对于正则表达式;如果是非终结符,对于非终结符或终结符组成的字符串。并列规则用竖线("|")连接。原创 2009-06-04 19:37:00 · 2585 阅读 · 0 评论 -
Ruby都从Perl那继承了什么?
最近看了看Perl,主要是想看看Ruby都从Perl那拿来了些什么。同时,也是我学习Perl的一篇笔记。为什么大家都是Perl的代码丑陋,是什么导致了Perl程序晦涩难懂,Ruby中又是如何取舍这些元素的呢?我认为Perl社区追求更少代码的风气助长了大量使用预设变量的风气,从而导致了Perl代码的晦涩。下面的每个Perl的例子总伴有Ruby的对照。Perl的理念-条条大道通罗马「T原创 2009-09-27 14:37:00 · 5081 阅读 · 1 评论 -
用Shoes 写累积计时器
已经用了一个月的天翼,除了经常掉线外,最郁闷的就是它没有统计总时间,所以用Shoes 写了一个计时器来记录一共用了多久。Shoes.app :title => "Timer", :height => 70, :width => 150 do stack do @cap = caption "Pope" flow do @start = button("原创 2009-11-03 19:34:00 · 737 阅读 · 0 评论 -
用Ruby生成素数
想看看自己写的素数生成代码与专业coder的差别。一开始只是想验证自己的一个想法,任何整数都可以分解为素因子的乘积,那么只用素数来测试是否会快一些呢?这是我写的。用@primes来保存找到的素数。#!rubyclass Prime def initialize @primes = [] @n = 1 end def isPrime?(n)原创 2009-10-26 23:40:00 · 1235 阅读 · 0 评论 -
用Ruby 写Turing 机
最近在看John E.Hopcroft,Rajeev Motwani,Jeffrey D.Ullman 三巨头写的Introduction to Automata Theory,Language,and Computation,想写一个Turing 机验证一下自己写的状态转移函数对不对。懒得很,网上搜了几个不错的。但Ruby Quiz 上的这个最简单。翻译 2009-12-02 21:21:00 · 1345 阅读 · 0 评论 -
涉水The Python Challenge
在Stack Overflow 上看到学习Python 的一个方法是用Python 破解The Python Challenge。但我喜欢用Ruby,谁管得着呢^_^0. 入门关很简单。p 2**38 1. 破解一段话,观察图片很容易发现解码表把字母表循环右移两位。riddle = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyr原创 2010-02-17 23:35:00 · 2171 阅读 · 2 评论 -
一百行Ruby写个A*
Ruby quiz的第98题让写一个A*寻路程序。Daniel Martin提供了一个不到两百行的解答。如果简化一下,完全可以在一百行以内实现。原创 2010-06-29 01:15:00 · 1553 阅读 · 0 评论 -
Trie: 树模样的hash?
网上闲逛的时候,看到一篇介绍Trie 的文章。写得很明了,让人有实现的冲动。我观察了一下,觉得Trie 不就是一个树状的hash吗?!原创 2010-07-07 23:28:00 · 1374 阅读 · 0 评论 -
(如何写 (Lisp) 解释器 (用Ruby哦))
Peter Norvig 连发两篇博文(How to Write a (Lisp) Interpreter (in Python))和(An ((Even Better) Lisp) Interpreter (in Python))原创 2010-10-09 00:30:00 · 5088 阅读 · 1 评论 -
edit distance
做毕业设计的缘故,写了几个edit distance 的小程序。最常见的edit distance 是用动态规划实现的。所以先写一个矩阵。class Matrix def initialize(m, n) @m, @n = m, n @ary = Array.new(@m*@n) end def []=(i, j, val) @ary原创 2009-04-14 12:20:00 · 1163 阅读 · 0 评论 -
My Solution to Project Euler in Ruby
Problem 11求横、竖、对角方向上连续四个数乘积的最大值。暴力解,没什么技术含量。ary2d ="08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 0849 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 0081 49 31 73 55 79原创 2009-03-20 21:35:00 · 1138 阅读 · 0 评论 -
Project Euler .net
最近看到一个解题网站Project Euler,只需提供答案。所以可以无所不 用其极,不过聪明人用笔算,高明人用程序算,普通人用Google搜。我大多用的是暴力解决(包括SAGE)。Problem 40 An irrational decimal fraction is created by concatenating the positive integers原创 2008-07-21 13:31:00 · 1187 阅读 · 0 评论 -
如何将数字转换成英语
受Project Euler Problem 17 的启发,写了(其实是改写)一个能把数字转换成英语的Ruby 过程。# zero, one, two, three, four, five, six, seven, eight, nine, ten,# elevent, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eight原创 2008-07-24 00:02:00 · 3395 阅读 · 0 评论 -
The Ruby Way 之幂集
Hal Fulton 的《Ruby之道》里面有一个输出幂集的程序。class Array def powerset num = 2**size ps = Array.new(num, []) self.each_index do |i| #print "i := #{i}/n" a = 2**i b = 2**(i+1) - 1 j =原创 2008-08-22 22:29:00 · 1347 阅读 · 0 评论 -
奇怪的Ruby!
h = {}h["a"] = [[[1, 2]], 3]p ref = h["a"][0]ref << [7, 8]p h["a"] 如果ref 是一个副本,按理说应该不会改变h 的值。可输出是:[[1, 2]][[[1, 2], [7, 8]], 3] 太奇怪了! P.S.: 终于解决了,原来 今天又发现了一个bug。ary = ["a"]原创 2009-02-19 23:39:00 · 654 阅读 · 0 评论 -
初试Ruby/Tk
为了运行Ruby/Tk,你需要一个tk84.dll 文件。把它放在/ruby/lib 目录下就行了。我这里提供了一个。测试一下。Ruby/Tk 版的"Hello, World!"require tkroot = TkRoot.new() { title "Hello, world!" }Tk.mainloop() Tk 有一个叫root 的顶级容器。第二句就是给它赋个t原创 2009-02-20 19:53:00 · 1347 阅读 · 0 评论 -
GIF 文件格式探索
最近,我们cute 的数字图像处理老师让我们看看GIF 的文件格式,然后实现一个均衡化算法。我准备用Ruby 做一个,但Ruby 对位的操作不如C。还好找到了bit-struct,一个用string 来存储二进制数据的库。我们会在后面对左图分析。与针对相片影像而设计的JPEG 不同,GIF 由于采用了8位压缩,最多只能处理256种颜色(至少标准是这样),故不宜于显示真彩图片。其原创 2009-02-24 14:22:00 · 2871 阅读 · 2 评论 -
Shoes,Ruby GUI!
Tk 总是报错,让我很不爽。>ruby shoes.rbe:/ruby/lib/ruby/1.8/tk.rb:1557: [BUG] Segmentation faultruby 1.8.6 (2007-09-24) [i386-mswin32]This application has requested the Runtime to terminate it in an unu原创 2009-02-28 19:36:00 · 5551 阅读 · 1 评论 -
推荐几本Ruby 的书
The Ruby Way,以前推荐过的。我放在这里了。我结识Ruby 仅仅是因为偶然在图书馆看到Ruby on Rails,很好奇Ruby 是一种什么语言。Hal Fulton 不仅是一位Ruby 大师,写的程序也很耐人寻味。比如8.1.9 计算集合的幂集那个程序,我看了好久,又写了一个递归版本的才弄清楚。《Ruby 之道》写的很全,也很深入。我只读了前半部分,到第十一章讲OOP 就看不懂了。原创 2009-02-28 13:52:00 · 11135 阅读 · 1 评论 -
重新拾起ACM
马上就要初赛了,可我已经半年没有动过C 了。今天看了道Find 7 Faster Than John Von Neumann,果然没感觉,只好用Ruby 蛮力解恨一下。ary = readline.split(//s/)k, m = ary[0].to_i, ary[1].to_in = 0prod = 1while true prod *= m n += 1原创 2009-03-06 00:25:00 · 903 阅读 · 0 评论 -
Ruby 的矩阵
最近为了做近似匹配,编了一个用动态规划计算edit distance 的程序。没优化过的动态规划一般要借助矩阵。于是,我找到了Ruby 的标准库matrix。但用起来不顺手,就自己编了一个:class Matrix def initialize(m, n) @m, @n = m, n @ary = Array.new(@m*@n) end def原创 2009-03-07 12:24:00 · 1451 阅读 · 0 评论 -
Discrete Fourier Transform
这次的数字图像处理作业是用C/C++ 实现离散Fourier 变换和FFT。我偷了个大懒,花了两小时用Ruby 实现了一个。首先是O(n2)的离散Fourier 变换。其实都很简单。require complexa = [1, 0, -1, 0]def fourier_transform(ary) n = ary.size a = Array.new(n) a原创 2009-03-07 14:55:00 · 1095 阅读 · 0 评论 -
追寻单纯形法的几何直观
先上代码:require 'pp'require 'set'DEBUG = falseclass String def to_terms() self.gsub("-", "+-").split(/\s*\+/).select{|e| e != ""} end def to_pair r = / ( (\-)? (\d+(\.\d+)?)? ) # e.g. -3原创 2013-11-17 16:14:41 · 2804 阅读 · 2 评论