突然ですが、以下の間違った式からマッチ棒を一本だけ動かして正しい式にしてください。なお ≠ (not equal)記号は使えないものとします:



正解は下にスクロールして確認してください:

 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓

模範解答はこちらです:



いかがですか? 意外と難しかったでしょうか? 「一本だけ」動かして成立させる、というルールが絶妙で、また色々なマッチ棒の使い方や可能性があったりして、時間制限によっては僕も解けなかったりします。結構盛り上がる遊びです。 ちなみに BSフジで放送中の「クイズ!脳ベル SHOW」の中のミニクイズの1つでもあったりします。

で、今回のブログエントリで紹介するのは、このマッチ棒クイズを自動的に解くプログラムです。デモサイトはこちらです(スマホで見る場合は画面を横長にしてください):
https://dotnsf.github.io/matchbo/

2020041200


赤字で「問題」と書かれたフィールドに初期状態の(問題文となる正しくない)式を入力します(掛け算は * 、割り算は /)。するとそのすぐ下に入力式がマッチ棒に変換されて表示されます:
2020041201


これが出題です。この 4+3=5+9 は解くのにトリッキーなワザが必要な出題例ですが、答はわかりますか? 答がわかったか、或いはギブアップする場合は次に進んでください。

ここで入力した問題の答をコンピュータに解かせることで答の一例を確認できます。コンピュータに解かせるには、問題フィールドが入力状態になっている時に Enter を押します(要は Submit します)。するとクイズの答となりえるものを探して下部に表示してくれます。

 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓
 ↓

2020041203

※わかりますか? 4から一本動かして 11 にして式を成立させています。こういう所に気づかないといけなかったりして、意外と奥の深いクイズだったりします。

なお、問題や解答として識別可能な文字はクイズ!脳ベル SHOW のルールに従って以下の通りとします(記号も掛け算割り算以外は変更が加わる可能性があることに注意が必要です):
2020041202


上記以外の文字表記は使えないものとします。また掛け算・割り算は足し算・引き算よりも優先されます。また最終的に成立していればですが、イコール記号は2つ以上使っても構いません、という番組ルールにのっとって判断されます。

また解がない(一本動かしただけでは成立しない)とコンピュータが判断した場合はその旨のメッセージが表示されます。本当は解が存在しているのにこのメッセージが出た場合は僕の作ったアルゴリズムが未熟なせい、ということにしてください:
2020041204



クイズとしても面白いのですが、解いていくうちに、自分の頭の中よりも効率的な解法アルゴリズムを思いついて、試しに実装してみたらなかなかの出来だったので公開します。なおソースコードも公開するので、興味ある方は中身も御覧ください。僕の独自アルゴリズムなので、もっと効率的な方法が存在している可能性大ですけど:
https://github.com/dotnsf/matchbo