How it works

プログラミング関連の雑記

Make 10

2011-04-19 23:48:00 | Programming
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 使っているし。:-<


ジャンル:
ウェブログ
コメント (1) |  トラックバック (0) |  この記事についてブログを書く
Messenger この記事をはてなブックマークに追加 mixiチェック シェア
« HDD がぶっ壊れた... | トップ | Gigabeat U408 が... »

コメント

コメント日が  古い順  |   新しい順

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。
※文字化け等の原因になりますので、顔文字の利用はお控えください。
下記数字4桁を入力し、投稿ボタンを押してください。この数字を読み取っていただくことで自動化されたプログラムによる投稿でないことを確認させていただいております。
数字4桁

トラックバック

この記事のトラックバック  Ping-URL

あわせて読む