rubyco(るびこ)の日記 2006年5月~12月
このコンテンツに含まれるページ一覧
メソッド名自動生成
Danさんからお題が出ていたのでRubyで書いてみました。(Danさんのこのエントリ、なぜかトラックバックもコメントもできない…)直っていました。
class AsciiChar
...
Rubyist Hotlinks
角谷さんの好きなメソッド嫌いなメソッドを読んで。
Object#extend
Module#includeはクラスへのMixinで、Object#extendはインスタンスへのMixin。
module Rubycolify
def rubyco
p self.to_s
end...
二次元配列を縦に足す
二次元配列を列方向に処理を読んで作ったプログラム。
ar = Array.new
DATA.each { |line|
line.chomp!.split(/,/).each_with_index { |item, i|
ar[i] or ar[i] = Array.new
ar[i] << item.to_i
}
...
Officeのイルカを動かすRubyスクリプトCommentsAdd Star
カイルっていう名前のイルカを動かすRubyスクリプトだそうです。楽しい。
* イルカと遊ぼう
ちなみに、DOLPHINをSAEKOにすると冴子...
マルチリンガルなシソーラス検索
たとえば、
HaskellのChar.isUpper関数に相当するRubyのメソッドは何だろう
Schemeのstring->list関数に対応するRubyのメソッドは何だろう
Rubyのsplitメソッ...
injectを使ったパスカルの三角形
id:epicsさんの続・パスカルの三角形を読んで「injectかっこいい」と思い、まねっこします。ただまねっこだとつまらないので、nil.coerceして、変数...
パスカルの三角形、もう少し
epicsさんの続・パスカルの三角形の下の方に「挫折した方法」というのがあったので、そこから発展させてみました。ちょっと発想を変えまして…。...
yieldとProc#call
MatzさんのyieldとProc#callを読んで。
Matzさんが書いていた、
Proc#yieldメソッドを導入
nil.yieldメソッドも用意。これが「no block given」のメッセージを出す
という二点は、...
zipWithの自作
id:omochistさんのzipWithを読んで、私も書いてみました。。
対称的じゃないので、きれいじゃないけど、dupしないというメリットはあります。
def zipWith(xs, ys, &block)
zipped ...
すべてのクラスを調べる
ObjectSpace.each_object(Class)で全クラスをvisitできます。
ObjectSpace.each_object(Class) do |o|
p o
end
全クラスではなくExceptionクラスの子孫クラスだけを調べたいならば...
100までの整数から素数を列挙せよ
普通に実装。(追記:不等号、間違っていたので直しました)。
def prime(n = 100, &block)
is_prime = Array.new(n + 1, true)
is_prime[0] = false
is_prime[1] = false
(2..n).each...
10000までの完全数を列挙せよ
エラトステネスの篩もよいけれど、別の問題もやろうよ。ということで「完全数」です。
def perfect(n = 100, &block)
sum = Array.new(n + 1, 1)
(2..n).each do |i|
if i =...
冴子先生で素数
id:kkkkkkkkさんとartonさんのを見て「冴子先生で素数」を作りました。作ったといっても大半はartonさんのを写しただけですけれど…。
http://d.hatena.ne.jp/kkkkkkkk/20060620/...
Rubyのキラーアプリケーション
ええと、RubyのキラーアプリケーションとしてはtDiaryが有名だけれど、近年それにRuby on Railsが加わったという理解でよいでしょうか。>識者のみなさ...
青木さんによるTropy添削
http://jp.rubyist.net/magazine/?0015-CodeReview
るびま0015号の「あなたの Ruby コードを添削します」は、Tropyの添削です。
添削されるのは、rubycoの中の人(hyuki)で、添...
Colorize Test::Unit result
http://subtech.g.hatena.ne.jp/youpy/20060818/p1
コンソール版のTestRunnerに色を付ける。コマンドラインなあなたにもグリーンバーを。
ところで、このプログラムを説明す...
Rubyを勉強しようとしている方CommentsAdd Star
* http://d.hatena.ne.jp/mailishmaid/
Rubyを勉強しようとしている方のようですが、まとめ方が初心者っぽくない…。
トラックバックにてエールを...
Gems版ReFeインストールのまとめCommentsAdd Star
Windowsマシンをリニューアルしたらrefeがどっかいっちゃったので再インストール。
以下の手順でインストールができました。
* 1. ActiveSc...
何が表示されるか?
何が表示されるか?
ObjectSpace.each_object(Object) {|o|
if o == o.class
p o
end
}
Permalink | コメント(0)
methods
methodsメソッドで、そのオブジェクトのメソッド名のリストが得られます。
puts 1.methods.sort
実行結果です。
%
&
*
**
(略)
__id__
__send__
abs
between?
ceil
chr
class
clone
coerce
(略)
to_s
to_sym...
Array#&で集合の積
配列同士の & をとると、集合の積になります。refe "Array#&" 参照。
以下では2の倍数twosと3の倍数threesの積をとって、6の倍数を得ています。
twos = []
threes = []
(0..10).e...
メソッドがどこで定義されているか
putsはどこで定義されているかを踏まえて、メソッドがどこで定義されているかを無理矢理求めてみます。
class Method
def where
to_s =~ /#<Method: (\w+)(...
擬似変数__FILE__
擬似変数__FILE__は現在のソースファイル名です。
「__FILE__と$0との比較」を「このスクリプトが直接実行されたかどうか」の判断に使うというイディオムがありま...
String#count
String#countで指定した文字数をカウントします。
require 'pathname'
p "Hello, Rubyco!".count('o') #=> 2 ('o'は2個ある)
p 'こんにちは, るびこさん.'.count('こ') #=> 12 (日本語う...
平均値
ときどきの雑記帖 リターンズを見て、私も書いてみました。
srand(314159)
data = Array.new(10) {|k| rand(100) }
p data
average = data.inject(0.0) {|sum, item| sum + item } / data.length
puts "average = #{av...
コンマ区切りの文字列を逆順に
コンマ区切りの文字列を逆順にします。splitしてreverseしてjoinすればよいですかね。最後のコンマはなくなります。
s = "Alice,Bobby,,David,Elmo,"
p s.split(/...
superを使わずにスーパークラスのメソッドを呼び出す
サブクラスから自身がオーバーライドしたスーパークラスのメソッドを呼びたいときを読んで、私もやってみました。
class Mo...
単語の頻度を調べる
class String
def words(pattern=/\w+/)
hash = Hash.new(0)
self.scan pattern do |w|
hash[w] += 1
end
hash
end
end
s = <<"EOD"
We wish you a Merry Christmas,
We wish you a Merry Christmas,
We wish you a Merry Christ...
flattenせずに配列探索
配列をflattenせずに再帰的に探索するメソッドを書いてみました。でもあまり格好良くありません。
a = [ 1, 2, 3, [4, 5, 6], [7, [8, 9, 10]]]
class Array
def recurse_find(x)
se...
インスタンス変数とアクセサ
attr_readerで、インスタンス変数を読むメソッドが自動的に定義されます。attr_accessorでインスタンス変数へ代入するメソッドも定義されます。
class Pers...
実行文
よく思うんですけれど、Rubyのプログラムを読むとき(あるいは文法を理解するとき、でもよいですが)、「classもdefも実行文」と思うととてもよく理解できますね。一見宣言...
スーパーpreでシンタックス・ハイライト
# 2(xy + yz + zx) = 3xyz where x, y, z : positive integer
(1..10).each do |x|
(x..10).each do |y|
(y..10).each do |z|
if x != y or y != z or z != x then
if 2 * (x * y + y * z + z * x) =...
演算子を明示的にメソッド呼び出し
演算子をメソッドっぽく呼び出せます。
p 2.+(3) #=> 5
括弧を付けないと警告が出ます。
p 2.+ 3 # warning: parenthesize argument(s) for future version
う...
グレイコード
何となくグレイコードを出力したくなって。
0.upto(31) do |k|
printf "%05b\n", k ^ (k >> 1)
end
実行結果です。
00000
00001
00011
00010
00110
00111
00101
00100
01100
01101
01111
01110
01010
01011
01...
パスワードの強度
奥村先生のパスワード再考というエントリを読んで、パスワードの強度をビット長で表すプログラムをRubyで書いてみました。
# Base 2 logarithm
module Math
def self.log2(...
フリップフロップ
フリップフロップをRubyでやろうと思ったのですが、何だか汚くなってしまいました。
DATA.each do |s|
if /^3/.match(s)../^5/.match(s)
puts s
end
end
__END__
1111111111
2222222222
33333...
特異クラスの特異クラス
特異クラスの定義中にselfをグローバル変数に保存して、「特異クラスの特異クラスの…」を繰り返してみたくなりました。スーパークラスをたどるよう...
if-elseではまりました
Rubyで5分ほどはまってしまったプログラム(のエッセンス抽出)。以下のプログラムはなぜCを表示するか?
a = false
b = true
if a
puts "A"
elseif b
puts "B"
else
puts "C"
end
#=>...
mathn
mathnモジュールを使うと、Integerの / で割り切れないとき、自動的に結果がRationalになります。つまり、こういうことです。
p 4/2 #=> 2
p 1/2 #=> 0
require 'mathn'
p 4/2 ...
るびこさんは何を見ながらRubyの勉強をしていますか?
この日記を見ている読者さんから「るびこさんは何を見ながらRubyの勉強をしていますか?」という質問をいただきました。
え...
ダウンロードして読めるRubyの入門書(英語)CommentsAdd Star
* http://www.humblelittlerubybook.com/
via Matzさんち