make 10

車のナンバープレートとかの4つの数字に四則演算を行なって10を作るっていうゲームがありますよね.名前は”Make 10″っていうらしいです.

で,この間,話の流れでどのくらいの割合のナンバープレートで10が作れるのだろうかという話題になりました.経験論では半分以上は作れるだろう,という人が多かったのですが実際はどうなのかはっきりとはわかりませんでした.
ちょっと気になったので”Make 10″を解くプログラムを書いてみました.
makeTenSrc.zip

大した計算量にはならなさそうだったので,総当りでごり押しする方向で作りました.
また,分数も扱えるようにしたかったのでboost::rationalクラスを使用してみました.

numbers が問題となる数字列で,solution が解答です.
解答はポーランド的な記法ですが,コーディング上の事情で一番右の2つの数字が,左辺と右辺で逆になってます.
(例えば numbers : 1919 の solution : * 9 + 1 / 9 1 は (((1/9) + 1 ) * 9) と解いている)
直そうかと思いましたが,面倒だったので放置です.

それで結局,何割のナンバープレートで10が作れるかというと…

… 7680 / 9999 !!
だいたい77%,思ってたよりだいぶ大きな値です.びっくりしました.


ざっと見た感じでは間違った解答はなかったと思いますが,もしかしたら間違いがあるかもしれません.
需要があるかわかりませんが下が解答一覧です.
makeTenSolution.zip
解答に間違いがありましたらコメントかなんかで連絡ください.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください