第23回Ruby勉強会@関西の初級者レッスン演習問題の解答例たち
- 第23回 Ruby/Rails勉強会@関西に参加してきた (Kanasansoft Web Lab.)
- ころころ毬藻転がし(RC) 第23回 Ruby/Rails勉強会@関西に関するメモ
- RubyKansai23 - Ruby/Rails勉強会@関西に行ってきた - 風産み日記
- Ruby関西勉強会#23参加 - らいとなひび
- ruby勉強会の演習問題を解いてみた - いつの間にか27歳日記
- Ruby/Rails勉強会@関西 - チナミニ
- 2008-02-17 - ekurodaの日記
- wwwaku » 2008 » 2月 » 17
- Nov's daily? report - DeveloperNews #4 , 第23回 Ruby/Rails勉強会@関西 , 最近の Amazon , tail
ざっとこんなもんかな。時間ある時に勝手に添削する。
# 添削希望のものだけね。
Kanasan の 100 マス計算
趣味も大分入るけど以下のような感じで添削しました。
- 題意を勘違いしてる?
- 演算子もランダムにして欲しかったけどこれはこれでアリなので活かすことにする
- 使える演算子は決まっているので、定数化する
- 入力値のチェックに正規表現を使っていたがこの程度なら文字列比較で十分
- 一度初期化したら変わらない変数は定数にする
- メソッド定義のカッコは省略しない
- るりまのフォーマットに従う方向で。
- exit 1 にしとく
- コマンドの失敗時の戻り値は 1 であることが多いため
- 一文字変数はスコープが短い所で使用する
- 配列の変数名は配列であることが予想できるような名前にする
kanasan's 100マス計算添削後
#! /usr/bin/ruby
OPERATORS = %w[+ - * / %]
DIGIT = 2
SEPARATOR = " "
VERTICAL_LINE = "|"
HORIZONTAL_LINE = "-"
CROSS_LINE = "+"
operator = ARGV[0].to_s
unless OPERATORS.include?(operator)
puts "wrong parameter: operator is only +-*/%"
exit 1
end
def display100Math(xs, ys, operator, display_answer)
print SEPARATOR * (DIGIT - operator.size)
print operator
print SEPARATOR
print VERTICAL_LINE
xs.to_a.each do |x|
print SEPARATOR
print SEPARATOR * (DIGIT - x.to_s.size)
print x
end
puts ""
print HORIZONTAL_LINE * DIGIT
print HORIZONTAL_LINE
print CROSS_LINE
xs.size.times do
print HORIZONTAL_LINE
print HORIZONTAL_LINE * DIGIT
end
puts ""
ys.each do |y|
print SEPARATOR * (DIGIT - y.to_s.size)
print y
print SEPARATOR
print VERTICAL_LINE
if display_answer
xs.each do |x|
answer = y.send(operator, x)
print SEPARATOR
print SEPARATOR * (DIGIT - answer.to_s.size)
print answer
end
end
puts ""
end
end
xs = (1..9).sort_by{rand}
ys = (1..9).sort_by{rand}
display100Math(xs, ys, operator, false)
puts ""
display100Math(xs, ys, operator, true)やらなかったこと
- 100マス化
- 今のは 81 マスしかない
- 短く簡潔にすること
- やっちゃうと大改造になるため(元が残らない)
sixeight さんの 100 マス計算
同じく趣味が入るけどこんな感じ。
- いくつかの変数名/メソッド名を変更した
- 多分、わかりやすくなった?
- initialize に仕事積めすぎなので @header を make_question に移動
- そうするとインスタンス変数である必要がなくなるのでローカル変数にした
- make_matrix は表作成専用にした
適切に仕事を分割することでよりよくなったはず。
sixeight's 100 マス計算添削後
class Hyakumasu
def initialize
@op = [:+, :-, :*, :/][rand(4)]
@row = (0..9).sort_by{ rand }
@col = (0..9).sort_by{ rand }
end
def make_matrix
header = "#{@op} | " + @col.join(' ') + "\n--|" + "---" * @col.length
@row.inject(header){|r, v|
r + "\n#{v} |" + (block_given? ? yield(v) : '')
}
end
def display
puts make_matrix
puts
puts make_matrix{|v|
@row.map {|i|
"%3d" %((@op == :/ && i.zero?) ? 0 : v.send(@op, i))
}.join
}
end
end
Hyakumasu.new.displayPosted in Programming, Ruby | コメントはありません | atom
Trackbacks
Use the following link to trackback from your own site:
http://typo.okkez.net/trackbacks?article_id=KansaiWorkshop23ext&day=23&month=02&year=2008