<< 2029 年 4 月 >>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5


 トップ > プログラミング > Sudoku  ナンバープレイスを課題にしたプログラム作りです。

2010/07/29
1. 数独

数独のルールは非常に単純です。そのため、プログラミングの入門用課題として、非常に適していると考えます。私自身、数独の問題を鉛筆片手に解くだけでなく、PCに解かせてみたくなりました。

2010/08/02
2. 数独の解法

数独の単純なルールから、数独の解法を導いてみました。

2010/08/07
3. 数独解法手順1の記述

数独パズルを解くための最初の手順を PHP プログラムで記述しました。

2010/08/10
4. マス目の状態の確認

手順2の記述に入る前に、81個のマス目の状態を確認するためのコードを書き加えてみます。

2010/08/12
5. マス目に初期値を与える

例題では、いくつかのマス目には、最初から確定した数字が入っています。マス目には候補値の組だけでなく、確定値も設定することで、初期状態を記述します。

2010/08/15
6. 数独解法手順2、3の記述

数独の解法手順2、3の記述です。プログラムにより作業が自動化されますが、鉛筆を持って実際に解いている感覚がしないこともありません。

2010/08/17
7. 数独解法手順4の記述

解法手順4をコード化しました。例題を実行させたところ、5つのマス目に入る数字が確定しました。

2010/08/19
8. 解法手順の繰り返し

解法の手順を一度実行するだけでは、すべてのマス目が確定するわけではありません。一つでもマス目に確定値が見つかったら、再度手順を実行することで、新たな確定値を探します。

2010/08/23
9. 難易度の高い数独の問題

数独の解法手順を単純に適用するだけでは解けない、難易度の高い問題もあります。解くには、ひと工夫が必要になります。

2010/08/26
10. マス目の数字を仮に定める(1)

難易度の高い問題では、候補値から選んだ数字を仮の確定値として解法を適用することで、解答を探します。まずはソースコードを見てみましょう。

2010/08/29
11. マス目の数字を仮に定める(2)

ソースコードの解説です。関数の再帰的呼出しがややこしいかも知れませんが、慣れると簡便な記述です。

2010/08/31
12. 難易度の高い例題を解くプログラムの実行結果

マス目に入る数字を仮に設定することで難易度の高い例題を解いてみました。プログラムの実行結果です。途中経過も表示されていますので、プログラムに記述されている手順を理解するための助けとなるでしょう。

2010/09/02
13. JavaScriptでの実装例

数独解法プログラムをJavaScriptで実装しました。