1から9までの4桁の数字と四則演算で10を作る遊びを知っていますか?
小学生からできる遊びですが、以外に楽しめます。
車のナンバー、時間、切符等、わりと巷には4桁の数字があります。
道を歩いていると暇なので、車を見かける度にやっているのですが、
ちょっとプログラムを作って解いてみました。
この問題のサイズは、高々9^4x4^3 = 419,904 なので、Brute Force で十分です。
実際に遊ぶ場合は数字の並び順は任意なので、重複組合せとなり 495 通りです。
そのうち解を持たない(10にならないの)は、62個なので、62/495=12.5%となります。
解けないことは少ないと感じてたのですが 12.5% とは、以外に解けないなぁと思います。
10台の車をみたとしたら、そのうち1台のナンバーははずれ。
また、1通りしか解を持たないのは 42個で、除算を含むのは 28個あります。
除算は分数の計算をする必要があって 3577のように1を作るもの以外は、
中々、思いつきません。
以下に、解が1個で除算が必要な数字を書いておきます。
頭が固くなっているなと感じたら、試してみてください。
頭が柔らかくなるかもです。
ちなみに、プログラムは C# で書いて、669行になりました(コメントはほとんど無し。)
結果を infix notation にしたり、Ratio arithmetics を実装したり、Enumerator を作ったりと、
余計なことをしているからかもしれません。
Lisp だったら、prefix notation で ratio もあるので、もっと短かったはずですが、
今回は、現在、作成中のVMのサンプルにするために、C#にしました。
Enjoy!
1 1 6 7
1 1 9 9
1 3 3 7
1 4 4 5
1 4 7 9
1 4 8 9
1 5 5 5
1 5 6 6
1 5 9 9
2 2 8 9
2 3 9 9
2 6 6 6
3 4 7 8
3 4 8 8
3 5 7 7
3 5 8 8
4 4 4 8
4 4 6 6
4 8 8 8
5 7 7 7
5 8 8 8
5 8 8 9
5 9 9 9
6 6 7 8
6 7 7 9
6 7 8 8
6 7 9 9
9 9 9 9
P.S.
* C++ STL に next_permuation と言う関数があるのを初めて知った。
* STL は、見慣れない indentation を使っているので、リーフォーマットしないと読み図来。Hard Tab 使っているし。:-<
小学生からできる遊びですが、以外に楽しめます。
車のナンバー、時間、切符等、わりと巷には4桁の数字があります。
道を歩いていると暇なので、車を見かける度にやっているのですが、
ちょっとプログラムを作って解いてみました。
この問題のサイズは、高々9^4x4^3 = 419,904 なので、Brute Force で十分です。
実際に遊ぶ場合は数字の並び順は任意なので、重複組合せとなり 495 通りです。
そのうち解を持たない(10にならないの)は、62個なので、62/495=12.5%となります。
解けないことは少ないと感じてたのですが 12.5% とは、以外に解けないなぁと思います。
10台の車をみたとしたら、そのうち1台のナンバーははずれ。
また、1通りしか解を持たないのは 42個で、除算を含むのは 28個あります。
除算は分数の計算をする必要があって 3577のように1を作るもの以外は、
中々、思いつきません。
以下に、解が1個で除算が必要な数字を書いておきます。
頭が固くなっているなと感じたら、試してみてください。
頭が柔らかくなるかもです。
ちなみに、プログラムは C# で書いて、669行になりました(コメントはほとんど無し。)
結果を infix notation にしたり、Ratio arithmetics を実装したり、Enumerator を作ったりと、
余計なことをしているからかもしれません。
Lisp だったら、prefix notation で ratio もあるので、もっと短かったはずですが、
今回は、現在、作成中のVMのサンプルにするために、C#にしました。
Enjoy!
1 1 6 7
1 1 9 9
1 3 3 7
1 4 4 5
1 4 7 9
1 4 8 9
1 5 5 5
1 5 6 6
1 5 9 9
2 2 8 9
2 3 9 9
2 6 6 6
3 4 7 8
3 4 8 8
3 5 7 7
3 5 8 8
4 4 4 8
4 4 6 6
4 8 8 8
5 7 7 7
5 8 8 8
5 8 8 9
5 9 9 9
6 6 7 8
6 7 7 9
6 7 8 8
6 7 9 9
9 9 9 9
P.S.
* C++ STL に next_permuation と言う関数があるのを初めて知った。
* STL は、見慣れない indentation を使っているので、リーフォーマットしないと読み図来。Hard Tab 使っているし。:-<










