2004-08-20 (Fri)
_ [Ruby] defined?と改行
defined?と引数の間って改行が入ってもいいんだ。
foo = 1 p defined? foo
出力結果:
"local-variable"
parse.yをながめていて気付いた。
しかし、何のために?
_ [Ruby] Linux体験講座
島根大学の縄手先生の講座に、社長やまつもとさん、かずひこさん、その他大勢(失礼)と参加。 細かいところを(小声で、愛をこめて)つっこんだりしていたが、とても興味深かった。
一般の人向けのRubyによるプログラミング入門的な講座だったのだが、自宅の近所の奥さんが来ていたりして、びっくり。 時代は変わったものだ。
最後に演習の時間があったのだが、講座で説明された機能しか使っては いけないという縛りがあったので、会社のみんなもけっこう苦労していた。 中でも、
Loto6のような1から48までの数を6個作るスクリプトを考えましょう.やはり rand を使います.
ヒントと手順
* ループでくり返し乱数発生させます.
* 作った乱数は配列に順次格納します.
* もし前に出た数と同じものが出ると破棄します.
* 数が6個できあがったら出力します.
[Samplesより引用]
というのが曲者で、「えー、Array#include?も使っちゃだめなのかよ」という声多数。 まあ、Rubyだと思わなければ簡単なんですが。
縛りがないなら解はいろいろありそう。
candidates = (1..48).to_a
ary = (1..6).collect {
candidates.delete_at(rand(candidates.length))
}
p ary
とか、
rand_stream = Object.new
def rand_stream.each
loop do
yield(rand(48) + 1)
end
end
rand_stream.extend(Enumerable)
ary = []
6.times do
ary.push(rand_stream.detect { |j| !ary.include?(j) })
end
とか。
まつもとさんはワンライナーでredoを使って書いていたようだ。
[TrackBack URL: http://shugo.net/jit/tb.rb/20040820]
本日のリンク元
- http://www.rubyist.net/~matz/ ×278
- http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=v... ×71
- http://www.dm4lab.to/~usa/ruby/d/ ×35
- http://www.rubyist.net/~matz/20040820.html ×21
- http://d.hatena.ne.jp/sumim/ ×19
- http://eto.com/d/0408.html ×16
- http://www.rubyist.net/~matz/200408.html ×11
- http://bloger.x0.com/result/パワプロ/パワプロ くん ×10
- http://www.dm4lab.to/~usa/ruby/d/200501a.html ×10
- http://mixi.jp/home.pl ×8
- http://www.rubyist.net/~matz/20040818.html ×8
- http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=v... ×8
- http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=v... ×7
- http://eto.com/d/ ×7
- http://sbs.mobile.yahoo.co.jp/union/search?p=かぼちゃの... ×6
- http://sbs.mobile.yahoo.co.jp/union/search ×6
- http://f34.aaacafe.ne.jp/~nuwth/linux.html ×6
- http://www.saiyasuweb.com/2/c/フランスパン ×5
- http://mixi.jp/new_friend_diary.pl ×5
- http://eto.com/d/index.html ×5
- http://erokey.ddo.jp/diary2/一般/一般 公開/20070901.html... ×5
- http://search.live.com/results.aspx?q=yahoo&mrt=en... ×4
- http://sbs.mobile.yahoo.co.jp/union/search?p=近所の奥さ... ×3
- http://www.rubyist.net/~matz/0820.html ×3
- http://blog.chew.jp/result/パワプロ/パワプロ くん ×3
- http://www.myprofile.ne.jp/blog/archive/FFF/18 ×3
- http://sbs.mobile.yahoo.co.jp/union/search?fr=m_to... ×3
- http://sbs.mobile.yahoo.co.jp/union/search?p=前田 ふむ... ×3
- http://search.live.com/results.aspx?q=yahoo&form=Q... ×3
- http://images.search.yahoo.co.jp/bin/query?p=かぼちゃス... ×3
- http://search.live.com/results.aspx?q=yahoo ×2
- http://sbs.mobile.yahoo.co.jp/p/sbs/mobilesite/sea... ×2
- http://pub.cozmixng.org/~the-rwiki/?cmd=view;name=... ×2
- http://sbs.mobile.yahoo.co.jp/union/search?p=かぼちゃ ... ×2
- http://d.hatena.ne.jp/sumim/?of=5 ×2
- http://www.rubyist.net/~matz/? ×2
- http://sbs.mobile.yahoo.co.jp/union/search?p=フランスパ... ×2
- tDiary.Net[kazuhiko] ×2 : 1, 1
- http://image-search.yahoo.co.jp/search?p=ミキサー食&ei=... ×2
- http://s.luna.tv/search.aspx?client=lunascape&s=0&... ×2
- http://www.j96.org/~kouji/diary/?date=20060225 ×1
- http://www.j96.org/~kouji/diary/?date=20040819 ×1
- http://arika.org/diary/ ×1
- http://kodou.net/diary/ ×1
- http://www.netfort.gr.jp/~yabuki/diary/0114.html ×1
- http://d.hatena.ne.jp/sumim/200408 ×1
- http://search.live.com/results.aspx?q=COBOL乱数&firs... ×1
- http://www.rubyist.net/~matz/20040819.html ×1
- http://wiki.fdiary.net/.RubiMa/ ×1
- http://www.kodou.net/d/ ×1
- http://sbs.mobile.yahoo.co.jp/union/search?fr=m_to... ×1
- http://blog.good-day.net/~yabuki/diary/200601.html... ×1
- http://search.live.com/results.aspx?srch=105&FORM=... ×1
- http://www.j96.org/~kouji/diary/ ×1
- http://images.search.yahoo.co.jp/bin/query?p=洋風スープ... ×1
- http://image-search.yahoo.co.jp/search?p=フランスパン&se... ×1
- http://gw.mobile.goo.ne.jp/gw/top/search_i.jsp;jse... ×1
- http://image-search.yahoo.co.jp/search?p=ミキサー食&ei=... ×1
- http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=v... ×1
- http://sbs.mobile.yahoo.co.jp/union/search?p=かぼちゃス... ×1
- http://blog.good-day.net/~yabuki/diary/20060331.ht... ×1
- http://search.live.com/results.aspx?q=loto6 0408&f... ×1
- http://crooz.jp/k/proxy_i.jsp?url=http://shugo.net... ×1
- http://d.hatena.ne.jp/sumim/20040822/p2 ×1
- http://mixi.jp/ ×1
- http://blog.good-day.net/~yabuki/diary/ ×1
- http://blog.chew.jp/result/パワプロ/パワプロ君 ×1
- http://sbs.mobile.yahoo.co.jp/union/search?fr=m_to... ×1
- http://sbs.mobile.yahoo.co.jp/union/search?fr=m_to... ×1
- http://www.chuo-u.ac.jp/chuo-u/d_annai/song.html ×1
- http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=v... ×1
- http://sbs.mobile.yahoo.co.jp/union/search?fr=m_to... ×1
- http://sbs.mobile.yahoo.co.jp/p/sbs/mobilesite/sea... ×1
- http://sbs.mobile.yahoo.co.jp/p/sbs/union/search?p... ×1
- http://image-search.yahoo.co.jp/search?p= ミキサー食&ei... ×1
- http://seo-cms.sub.jp/data/島根大学/index.html ×1
- http://sheepman.parfait.ne.jp/wiki/LightweightLang... ×1
- http://sbs.mobile.yahoo.co.jp/p/sbs/mobilesite/sea... ×1
- http://sbs.mobile.yahoo.co.jp/p/sbs/mobilesite/sea... ×1
- http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=v... ×1
- http://crooz.jp/ex/xv_mailmag/k/search.jsp?query=K... ×1
- http://sbs.mobile.yahoo.co.jp/union/search?fr=m_to... ×1
- http://search.live.com/results.aspx?q=search ×1
- http://bloglines.com/citations?url=http://blog.bul... ×1
- http://www.eto.com/d/index.html ×1
- http://search.live.com/results.aspx?q=search&mrt=e... ×1
- http://pub.cozmixng.org/~the-rwiki/index.rb?cmd=vi... ×1
- http://64.233.179.104/translate_c?hl=en&u=http://s... ×1
- http://sbs.mobile.yahoo.co.jp/union/search?fr=m_to... ×1
- http://www.saiyasuweb.com/2/c/スープ ×1
- http://blog.good-day.net/~yabuki/diary/20040820.ht... ×1
- http://sbs.mobile.yahoo.co.jp/p/sbs/mobilesite/sea... ×1
- http://www.myprofile.ne.jp/FFF blog 2004 01 4 ×1




私のはこんな感じ
a=[]; 6.times{n=rand(48)+1; redo if a.include? n; a.push n}; puts a
しかし、やっぱ使う機能に制限がつくととたんにRuby的じゃなくなりますねえ。
だいたい想像通りでした。
> しかし、やっぱ使う機能に制限がつくととたんにRuby的じゃなくなりますねえ。
はい、defも.も一つもないとRubyに見えないですね。
ヒントと違うけど珠玉のプログラミングかプログラミング作法で読んだやつはこんな雰囲気でした。
a=[]; 48.times {|n| a.push(n+1) if rand(48-n) < (6-a.size)}; puts a
結果がソート済みです(^^
へー、そんなやり方もあるんですね。
Loto6って順番は関係ないんですね。知らなかった...。
puts((1..48).sort_by{rand}[0...6])
ここから最短競争が始まる予感
でもこれ以上短いのは無理かな?
[0,6]にするとかを除くと。
Loto6は順番に関係なく6つの数字を選ぶだけですが、Numbersは順番が関係するストレートと無関係なボックスの両方があります。
ふむふむ。おとなしく年末ジャンボにしときます。