パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Python3で数独の9行の簡易ソルバー

2019-10-22 | python入門(すぐさまマスター)

内包表記をガシガシつかっています。

 

1〜3 問題の設定

4 指定位置x,yの数字が特定できれば設定する関数 

5 指定位置の縦、横、そして数独の太枠の9つの値を重複なく取得

6 5行目で作成した中に存在していない1〜9の値を取得

7 6行目で値が1つならば(特定)数字を設定

8 10回ほど盤面を全検索

9 結果表示

 

 

ubuntu18.04に入っていたGNOME数独の初級問題を解いています。

中級には歯が立ちません。

 

テキスト

box=[['7', ' ', '1', ' ', ' ', ' ', '6', ' ', '8'], [' ', ' ', ' ', '2', '1', ' ', '7', ' ', ' '], ['3', '9', ' ', ' ', ' ', '8', ' ', ' ', '4'],\
     [' ', ' ', '3', ' ', '8', ' ', ' ', '1', ' '], [' ', '6', ' ', '9', ' ', '1', ' ', '4', ' '], [' ', '1', ' ', ' ', '4', ' ', '8', ' ', ' '],\
     ['9', ' ', ' ', '6', ' ', ' ', ' ', '8', '1'], [' ', ' ', '6', ' ', '3', '9', ' ', ' ', ' '], ['1', ' ', '2', ' ', ' ', ' ', '9', ' ', '3']]
def putPoint(x,y):
  a=set([box[y][x] for y in range(9)]+box[y]+[box[y//3*3+ly][x//3*3+lx] for lx in range(3) for ly in range(3)])
  b=[i for i in "123456789" if not(i in a)]
  if len(b)==1:box[y][x]=b[0]
[putPoint(x,y) for i in range(10) for y in range(9) for x in range(9) if box[y][x]==" "]
for y in range(9):print(box[y])

 

 


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。