遠い世界の数式をRubyで解いてみた

はてなブックマークで見つけた、遠い世界の数式という問題を Ruby で解いてみました。Ruby の演算子のうち、優先順位が以下のように変更になったうえで、数式を評価して答えを導き出すのが問題。

↑優先順位高
| ビット or
& ビット and
+ 加算
* 乗算
↓優先順位低

問題の詳細は、リンク先を参照お願いします。

スポンサーリンク

思いついた戦略

とりあえずノーヒントでチャレンジ。考えついた方法は…

1. 数式の文字列を、数値と演算子からなる配列に変換する。
2. 優先順位の高い演算子から順に該当箇所を計算していく。
3. 逆ポーランド記法の計算のような stack の pop と push を使う。

多分誰でも考えつく単純な方法で、Ruby 力低めな回答かもしれない(笑。

書いた回答コード

上の戦略を元に書いたコード。10分位でできましたが、コードを短くするためのリファクタリングとかはしてません。

一応、正しく解けまして一安心。解いた後に、遠い世界の数式 – 実装例を見てみましたが、うーん..なるほどなあ。正規表現使う方法や、演算子をオープンクラスで置換する方法とか、面白いです。チャレンジされてみてください!

スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!