プログラミング/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: 5901 (from 2010/06/03),
today: 3,
yesterday: 2