數獨(Sudoku)是一種智力遊戲, 也是一種學習邏輯的最好工具. 而 Python 則是世界上最好的電腦程式語言之一. 所以如果能夠結合這兩種工具, 來教導小孩或青少年來學習邏輯的話, 那就是最好的組合. 這就是這個專案的緣起, 也是這個專案的目標.
你可以從下列網站取得與學習數獨(sudoku)的相關知識:http://en.wikipedia.org/wiki/Sudoku
下面是一個典型的數獨題目: |
下面是一個典型解出來的數獨: |
|
假如我們開始在位置 (1, 1) 中置放一個數, 那必然是有9個可能的數字讓我們選擇. 然後當我要置放第二個數到位置 (1, 2) 時, 那我們會有8個數字可以選擇. 所以, 以此類推, 從上往下, 從左到右, 我們可以寫下每一個位置可以被選擇的數字:
9! | 6! | 3! | 6! | 3! | 1! | 3! | 1! | 1! |
---|---|---|---|---|---|---|---|---|
9 | 6 | 3 | 6 | 3 | 1 | 3 | 1 | 1 |
8 | 5 | 2 | 5 | 2 | 1 | 2 | 1 | 1 |
7 | 4 | 1 | 4 | 1 | 1 | 1 | 1 | 1 |
6 | 3 | 1 | 3 | 1 | 1 | 1 | 1 | 1 |
5 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | 1 |
4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
所以, 所有的組合就是 9!*6!*3!*6!*3!*1!*3!*1!*1* = 4,514,807,808,000
假如我們使用 python 來計算時:
>>> def n(x):
if x==1:
return 1
else:
return x*n(x-1)
>>> n(9)*n(6)*n(3)*n(6)*n(3)*n(1)*n(3)*n(1)*n(1)
關於數獨的數學知識, 你可以到下列網站來取得, http://en.wikipedia.org/wiki/Mathematics_of_Sudoku