私は Python で 4x4 数独ソルバーを作成しようとしています (私は初心者です!)。関数を定義してコードをクリーンアップしようとしているときに、よくわからない奇妙な動作に出くわしました。どうやら、これには違いがあります:
sudoku = "0200140000230040"
sudoku = map(lambda x: '1234' if x=='0' else x, list(sudoku))
for i in range(16):
for j in range(4):
if sudoku[i] == str(j+1):
for k in range(4):
if len(sudoku[i/4*4+k]) > 1:
sudoku[i/4*4+k] = sudoku[i/4*4+k].translate(None, str(j+1))
for k in range(4):
if len(sudoku[4*k+i%4]) > 1:
sudoku[4*k+i%4] = sudoku[4*k+i%4].translate(None, str(j+1))
そしてこれ:
sudoku = "0200140000230040"
def sd(l):
for k in range(4):
if len(sudoku[l]) > 1:
sudoku[l] = sudoku[l].translate(None, str(j+1))
sudoku = map(lambda x: '1234' if x=='0' else x, list(sudoku))
for i in range(16):
for j in range(4):
if sudoku[i] == str(j+1):
sd(i/4*4+k)
sd(4*k+i%4)
奇妙な式は、行と列をチェックするためのものです (ボックスはまだ完成していません)。この種の質問が既にある場合は、時間を無駄にして申し訳ありませんが、両方のコード スニペットを実行して、得られるさまざまな結果を観察してみてください。前もって感謝します。
(怒られそうな変な予感がするな。はぁ)