開発環境
- macOS Mojave - Apple
- Emacs (Text Editor)
- Python 3.7 (プログラミング言語)
問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考 (Srini Devadas (著)、黒川 利明 (翻訳)、オライリージャパン)の4章(女王たちを一緒にするな)、練習問題(問題3)を取り組んでみる。
コード(Emacs)
Python 3
#!/usr/bin/env python3
''' 問題1 '''
def no_conflicts(board, current, queen_index, n):
for j in range(current):
if board[queen_index][j] == 1:
return False
k = 1
while queen_index - k >= 0 and current - k >= 0:
if board[queen_index - k][current - k] == 1:
return False
k += 1
k = 1
while queen_index + k < n and current - k >= 0:
if board[queen_index + k][current - k] == 1:
return False
k += 1
return True
def print_board(board, n=4):
def set_queen(i, j):
if board[i][j] == 1:
return 'Q'
return ' '
board_nn = [[set_queen(i, j) for j in range(n)]
for i in range(n)]
for row in board_nn:
print('-' * (2 * n + 1))
print(f'|{"|".join(row)}|')
print('-' * (2 * n + 1))
print()
def four_queens(n=4):
board = [[0 for _ in range(n)]
for _ in range(n)]
for i in range(n):
board[i][0] = 1
for j in range(n):
board[j][1] = 1
if not no_conflicts(board, 1, j, n):
board[j][1] = 0
continue
for k in range(n):
board[k][2] = 1
if not no_conflicts(board, 2, k, n):
board[k][2] = 0
continue
for m in range(n):
board[m][3] = 1
if not no_conflicts(board, 3, m, n):
board[m][3] = 0
continue
print_board(board)
board[m][3] = 0
board[k][2] = 0
board[j][1] = 0
board[i][0] = 0
return
if __name__ == '__main__':
four_queens()
入出力結果(Terminal, Jupyter(IPython))
$ ./sample3.py --------- | | |Q| | --------- |Q| | | | --------- | | | |Q| --------- | |Q| | | --------- --------- | |Q| | | --------- | | | |Q| --------- |Q| | | | --------- | | |Q| | --------- $
0 コメント:
コメントを投稿