質問編集履歴

1

プログラム追加しました。

2022/06/26 09:43

投稿

hagi
hagi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,50 @@
4
4
  nan = 0です。
5
5
 
6
6
  ```
7
+ nan=0
8
+ def input_helper(str_lines):
9
+ lines=str_lines.split()
10
+ #print(lines)
11
+ grid=[]
12
+ for line in lines:
13
+ grid.append([ int(c) if int(c)>0 else nan for c in list(line)])
14
+ return grid
15
+
16
+ def print_grid(grid):
17
+ str_grid = [ [ ' '+str(e) if e !=nan else ' ' for e in row ] for row in grid ]
18
+ for nth,row in enumerate(str_grid):
19
+ sub_str_list=['[']
20
+ for col in [0,3]:
21
+ sub_str_list.append( ','.join(row[col:col+3])+' | ' )
22
+ sub_str_list.append(','.join(row[6:9])+']')
23
+ line_str = ''.join(sub_str_list)
24
+ print(line_str)
25
+ if nth in [2,5]:
26
+ print('-----------'*3)
27
+ print()
28
+
29
+ #
30
+ grid_str1='''
31
+ 517600034 089004000 306205090
32
+ 600000010 030006047 000000000
33
+ 090000078 703400560 000000000
34
+ '''
35
+ grid_prob1=input_helper(grid_str1)
36
+ print("数独問題1: grid_prob1")
37
+ print_grid(grid_prob1)
38
+
39
+ #
40
+ grid_str2='''
41
+ 530070000 600195000 098000060
42
+ 800060003 400803001 700020006
43
+ 060000280 000419005 000080079
44
+ '''
45
+ grid_prob2=input_helper(grid_str2)
46
+ print("数独問題2: grid_prob2")
47
+ print_grid(grid_prob2)
48
+
49
+
50
+
7
51
  import copy
8
52
 
9
53
 
@@ -89,5 +133,45 @@
89
133
  else:
90
134
  print('[BAD] find_next() does not work')
91
135
 
136
+ backtrack=0
137
+ def solve(grid):
138
+ global backtrack
139
+ i,j = find_next(grid)
140
+ if i<0:
141
+ return True
142
+ for e in range(1,10):
143
+ if isValid(grid,i,j,e):
144
+ grid[i][j]=e
145
+ if solve(grid):
146
+ return True
147
+ backtrack += 1
148
+ grid[i][j]=nan
149
+ return False
150
+
151
+ #---------------
152
+
153
+ def call_solve(grid):
154
+ grid_copy=copy.deepcopy(grid)
155
+ if solve(grid_copy):
156
+ print(f'succeeded in solving [backtrack={backtrack}]')
157
+ print_grid(grid_copy)
158
+ else:
159
+ print('FAIL in solving')
160
+
161
+ # ------
162
+ # 問題を解く
163
+ #
164
+ print('grid_prob1 を解く')
165
+ print_grid(grid_prob1)
166
+ call_solve(grid_prob1)
167
+
168
+ print('grid_prob2 を解く')
169
+ print_grid(grid_prob2)
170
+ call_solve(grid_prob2)
171
+
92
172
 
93
173
  ```
174
+
175
+ 追記
176
+ 間違えて追加修正依頼のところに書いてしまいました。
177
+ すいません。