プログラミング/ruby/遠い世界の数学 のバックアップ差分(No.1)

更新


  • 追加された行はこの色です。
  • 削除された行はこの色です。
[[公開メモ]]

* 概要 [#ma132a96]

こちらで紹介されていた、

http://qiita.com/cielavenir/items/cadbc5e24525b6a86cf8

このお題について。

http://nabetani.sakura.ne.jp/kanagawa.rb/evalex/

* まず思いついた普通のやり方 [#t102675d]

 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

* 正規表現で手抜きをする [#qb461a1a]

 LANG:ruby
 def calc2(expr)
   eval expr.gsub(/[^\*\(\)]+/,'(\\0)')
            .gsub(/[^\*\+\(\)]+/,'(\\0)')
            .gsub(/[^\*\+\&\(\)]+/,'(\\0)')
 end

* コードゴルフ的な何か [#ecb8c47b]

 LANG:ruby
 def calc3(s)
   eval s.gsub(/[^*]+/){"(#{$&.gsub(/[^+]+/){"(#{$&.gsub(/[^&]+/,'(\\0)')})"}})"}
 end

* 質問・コメント [#m332a2d2]

#article_kcaptcha


Counter: 5309 (from 2010/06/03), today: 2, yesterday: 0