2010年09月12日

Triangle15パズル

   このエントリーをはてなブックマークに追加 Clip to Evernote
久しぶりに、Gushwell's C# Programming Pageの「C#プログラム小品集」にプログラムをアップしました。

「横に並んだ2つの数の差(正数)をその下の○に入れる」という条件を満たして、○を組み合わせた逆三角形に1~nまでの数字を配置するというパズルを解くプログラムです。

Triangle15パズルというのは、僕が勝手に付けた名前です。正式な名前はわかりません。

Solveボタンを押すと、解の探索を開始し、解答を表示します。


解は2つありますが、その一つだけを表示しています。興味がある方は自力で解いてみてください。

順列を求める応用でこの問題を解いています。 ソースコードは、こちらに掲載しています。


この記事へのコメント
初めまして。
ネットを検索していて辿り着きました。
これからも拝見させて頂こうと思います。

無機質なPCにパズルを解かせるのは面白いですね。

早速ですが、ソースを拝見させて頂いた際に一点気になったので
質問させて下さい。
(見当違いでしたら恥ずかしいです。。。。)
順列の作成についてです。
この問題の場合だと、15(最大値)は何かと引き算して
求める事が出来ないので、必ず一番上に格納される
事になります。
15*14*13*12*11

5*14*13*12*11
になるので計算量が1/3に出来るのでは?と思いました。
Posted by 剣帝 at 2010年09月13日 04:44
剣帝さん

はじめまして。
ご指摘ありがとうございます。確かに、1/3に減らすことができますね。
順列を作ってから、チェックするのか、順列を作る時に 15 が必ず入るようにするか、どちらかの方法で対応できそうですが、実装としては、前者の方が修正が少なくて済みそうですね。

後者だと、1-14のなかから、4つを選ぶ順列を作り、15 をそれぞれの場所に配置するというやり方になるのかな?

Posted by Gushwell at 2010年09月13日 21:33
回答ありがとうございます。
指摘など、とんでもないです。

私が改造させて頂いた時はソースを汚したくなかったので
前半を適用しました。
所詮この手の問題の解答は枝を切っても無限に見ることが
出来ないのが悲しいところですね。
それでも少しでも早くと考えている時が楽しくもあるの
ですが。

本サイトの他有用な情報も別途参考にさせて頂きます。
特にデザインパターンを確認予定です。

今後の面白い記事も楽しみにさせて頂きます。
Posted by 剣帝 at 2010年09月17日 12:14
実際に、ソースを修正されたとのこと。
ソースを公開した甲斐がありました。
少しでも有用なページになるよう、がんばります。

Posted by Gushwell at 2010年09月17日 22:28
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52068187
この記事へのトラックバック
【F#】Triangle15パズル
Triangle15パズル【BLUEPIXY日記】at 2010年09月13日 21:07