#Puzzling.SE: http://p...content-available-to-author-only...e.com/a/40442/1766
Q = 1
N = 2
VALS = ' QN'
def initBoard():
return [[0 for c in range(8)] for r in range(8)]
def place(board, piece, r, c):
board[r][c] = piece
def dominated(board, r, c, justTruth=True):
if board[r][c]:
return True
for d in range(1,8):
if board[r-d][c] == Q or board[r][c-d] == Q or board[r-d][c-d] == Q or board[(r+d)%8][c-d] == Q:
return justTruth or 'q'
for rd, cds in ((-2,(-1, 1)), (-1,(-2, 2)), (1,(-2, 2)), (2,(-1, 1))):
for cd in cds:
if board[(r+rd)%8][(c+cd)%8] == N:
return justTruth or 'n'
if justTruth:
return False
return '.'
def printBoard(board):
s = ''
for r in range(8):
for c in range(8):
if board[r][c]:
s += VALS[board[r][c]] + ' '
else:
s += dominated(board, r, c, False) + ' '
s += '\n'
print(s)
def main():
print("8x8 Chessboard in form of a Toroid!\n Let's begin, shall we...")
b = initBoard()
place(b, Q, 0, 0)
printBoard(b)
place(b, Q, 1, 4)
printBoard(b)
place(b, Q, 4, 3)
printBoard(b)
place(b, Q, 5, 7)
printBoard(b)
print("It is done...")
'''
from itertools import combinations
rcs = [(r, c) for r in range(8) for c in range(8)]
m = 0
for locs in combinations(rcs, 3):
b = initBoard()
for r, c in locs:
place(b, Q, r, c)
d = sum(dominated(b, r, c) for r in range(8) for c in range(8))
if d > m:
m = d
printBoard(b)
print(d)
print()
'''
if __name__=='__main__':
main()
I1B1enpsaW5nLlNFOiBodHRwOi8vcC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5jb20vYS80MDQ0Mi8xNzY2ClEgPSAxCk4gPSAyClZBTFMgPSAnIFFOJwoKZGVmIGluaXRCb2FyZCgpOgogICAgcmV0dXJuIFtbMCBmb3IgYyBpbiByYW5nZSg4KV0gZm9yIHIgaW4gcmFuZ2UoOCldCgpkZWYgcGxhY2UoYm9hcmQsIHBpZWNlLCByLCBjKToKICAgIGJvYXJkW3JdW2NdID0gcGllY2UKCmRlZiBkb21pbmF0ZWQoYm9hcmQsIHIsIGMsIGp1c3RUcnV0aD1UcnVlKToKICAgIGlmIGJvYXJkW3JdW2NdOgogICAgICAgIHJldHVybiBUcnVlCiAgICBmb3IgZCBpbiByYW5nZSgxLDgpOgogICAgICAgIGlmIGJvYXJkW3ItZF1bY10gPT0gUSBvciBib2FyZFtyXVtjLWRdID09IFEgb3IgYm9hcmRbci1kXVtjLWRdID09IFEgb3IgYm9hcmRbKHIrZCklOF1bYy1kXSA9PSBROgogICAgICAgICAgICByZXR1cm4ganVzdFRydXRoIG9yICdxJwogICAgZm9yIHJkLCBjZHMgaW4gKCgtMiwoLTEsIDEpKSwgKC0xLCgtMiwgMikpLCAoMSwoLTIsIDIpKSwgKDIsKC0xLCAxKSkpOgogICAgICAgIGZvciBjZCBpbiBjZHM6CiAgICAgICAgICAgIGlmIGJvYXJkWyhyK3JkKSU4XVsoYytjZCklOF0gPT0gTjoKICAgICAgICAgICAgICAgIHJldHVybiBqdXN0VHJ1dGggb3IgJ24nCiAgICBpZiBqdXN0VHJ1dGg6CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICByZXR1cm4gJy4nCgpkZWYgcHJpbnRCb2FyZChib2FyZCk6CiAgICBzID0gJycKICAgIGZvciByIGluIHJhbmdlKDgpOgogICAgICAgIGZvciBjIGluIHJhbmdlKDgpOgogICAgICAgICAgICBpZiBib2FyZFtyXVtjXToKICAgICAgICAgICAgICAgIHMgKz0gVkFMU1tib2FyZFtyXVtjXV0gKyAnICcKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHMgKz0gZG9taW5hdGVkKGJvYXJkLCByLCBjLCBGYWxzZSkgKyAnICcKICAgICAgICBzICs9ICdcbicKICAgIHByaW50KHMpCiAgICAKZGVmIG1haW4oKToKCXByaW50KCI4eDggQ2hlc3Nib2FyZCBpbiBmb3JtIG9mIGEgVG9yb2lkIVxuIExldCdzIGJlZ2luLCBzaGFsbCB3ZS4uLiIpCgliID0gaW5pdEJvYXJkKCkKCXBsYWNlKGIsIFEsIDAsIDApCglwcmludEJvYXJkKGIpCgkKCXBsYWNlKGIsIFEsIDEsIDQpCglwcmludEJvYXJkKGIpCgoJcGxhY2UoYiwgUSwgNCwgMykKCXByaW50Qm9hcmQoYikKCglwbGFjZShiLCBRLCA1LCA3KQoJcHJpbnRCb2FyZChiKQoJCglwcmludCgiSXQgaXMgZG9uZS4uLiIpCicnJwkKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNvbWJpbmF0aW9ucwpyY3MgPSBbKHIsIGMpIGZvciByIGluIHJhbmdlKDgpIGZvciBjIGluIHJhbmdlKDgpXQptID0gMApmb3IgbG9jcyBpbiBjb21iaW5hdGlvbnMocmNzLCAzKToKCWIgPSBpbml0Qm9hcmQoKQoJZm9yIHIsIGMgaW4gbG9jczoKCQlwbGFjZShiLCBRLCByLCBjKQoJZCA9IHN1bShkb21pbmF0ZWQoYiwgciwgYykgZm9yIHIgaW4gcmFuZ2UoOCkgZm9yIGMgaW4gcmFuZ2UoOCkpCglpZiBkID4gbToKCQltID0gZAoJCXByaW50Qm9hcmQoYikKCQlwcmludChkKQoJCXByaW50KCkKJycnCQkKaWYgX19uYW1lX189PSdfX21haW5fXyc6CgltYWluKCk=