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

スポンサーリンク

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

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

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

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

思いついた戦略

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

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

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

書いた回答コード

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

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

スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
 
スポンサーリンク

Leave Your Message!