プログラミング/ruby/遠い世界の数学 の履歴(No.1)
更新概要†
こちらで紹介されていた、
http://qiita.com/cielavenir/items/cadbc5e24525b6a86cf8
このお題について。
まず思いついた普通のやり方†
LANG:ruby
def calc(expr)
expr.split('*', -1).inject(1) do |result, expr|
result * expr.split('+', -1).inject(0) do |result, expr|
result + expr.split('&', -1).inject(0xffffffff) do |result, expr|
result & expr.split('|', -1).inject(0) do |result, expr|
result | expr.to_i
end
end
end
end
end
正規表現で手抜きをする†
LANG:ruby
def calc2(expr)
eval expr.gsub(/[^\*\(\)]+/,'(\\0)')
.gsub(/[^\*\+\(\)]+/,'(\\0)')
.gsub(/[^\*\+\&\(\)]+/,'(\\0)')
end
コードゴルフ的な何か†
LANG:ruby
def calc3(s)
eval s.gsub(/[^*]+/){"(#{$&.gsub(/[^+]+/){"(#{$&.gsub(/[^&]+/,'(\\0)')})"}})"}
end
質問・コメント†
Counter: 6374 (from 2010/06/03),
today: 1,
yesterday: 1