ひょんな事から次のような問題(いわゆるパズル問題ですね)を発見し、面白そうだと思ったのでPythonでやってみました。
中学生にも解けるパズルを解くのに向いたプログラミング言語は? – Yahoo!知恵袋
リンク先ではなるべく実行が速く、なるべくコードが短いという点が 評価軸になっているようですが、極めて個人的な趣味によりその辺りは無視し(おいw)読み易さを優先して書いたので、ここで公開します。
あと、リンク先の問題文が分かりづらかったので、私なりに書きなおしたものも置いておきます。
4つの一桁の数値に対する四則演算の結果が 分数の計算をちゃんとやれば本当は10になるのに 整数演算だと誤った結果になる例を全て出力。
例: (((1 / 2) * 5) * 4) = 10 (0)
一番右のカッコ内は整数で演算したときの誤った答え。
問題(1)の浮動小数点数版。
peta-okechan/calc-error-detection
まず4つの数値の組を総当りで生成(再帰yield)しつつ、
さらにその数値の組で可能な式の組み合わせを総当りで生成(再帰yield)し、
その式を評価して問題の条件を満たす場合表示、となります。
式(と演算の優先順位)の表現にツリーを用いています。
(Binomialがノード、Constantがリーフに相当)
あと、分数を扱うためにFractionクラスを実装しましたが、
これはPython 2.6から標準ライブラリとなったfractionsモジュールのFractionクラスにそのまま置き換え可能です。
(標準ライブラリのFractionクラスは高機能なのでちょっと遅いですけど)
柔軟性もそれなりに持たせつつ、そしてPythonらしくすっきりと記述出来た気がします。
だいたい最初のイメージどおりのコードで解けたのでちょっと気分が良いです。
最近のコメント
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
peta_okechan
針金みたいなパーツを引っ張ると外れます。 他の方の…
虎徹ファン交換
虎徹の標準ファンを外す際に、どのようにして外されま…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…