mmouhib

8 reines probleme

Oct 25th, 2021 (edited)
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.67 KB | None | 0 0
  1. import os
  2. import random
  3. import time
  4.  
  5.  
  6. class bcolors:
  7.     WARNING = '\033[93m'
  8.     ENDC = '\033[0m'
  9.  
  10.  
  11. def clrscr():
  12.     if os.name == 'posix':
  13.         os.system('clear')
  14.     else:
  15.         os.system('cls')
  16.  
  17.  
  18. def init_board():
  19.     board = []
  20.     for i in range(8):
  21.         sub_board = []
  22.         for j in range(8):
  23.             sub_board.append('-')
  24.         board.append(sub_board)
  25.     #board[0][0] = 'R'
  26.     #queen_spacer(board, 0, 0)
  27.     return board
  28.  
  29.  
  30. def board_printer(board):
  31.     print('-' * 27)
  32.     start = 1
  33.     for sub_board_one in board:
  34.         for sub_board_two in sub_board_one:
  35.             if start:
  36.                 if sub_board_two == 'R':
  37.                     print('|', bcolors.WARNING + sub_board_two +
  38.                           bcolors.ENDC, ' ', end='')
  39.                 else:
  40.                     print('|', sub_board_two, ' ', end='')
  41.                 start = 0
  42.             else:
  43.                 if sub_board_two == 'R':
  44.                     print(bcolors.WARNING + sub_board_two +
  45.                           bcolors.ENDC, ' ', end='')
  46.                 else:
  47.                     print(sub_board_two, ' ', end='')
  48.         print('|')
  49.         start = 1
  50.     print('-' * 27)
  51.  
  52.  
  53. def checker(board, l, c):
  54.  
  55.     # colonnes plus
  56.     for i in range(0, 8):
  57.         if not i == c:
  58.             if board[l][i] == 'R':
  59.                 return False
  60.  
  61.     # lignes plus
  62.     for i in range(0, 8):
  63.         if not i == l:
  64.             if board[i][c] == 'R':
  65.                 return False
  66.  
  67.     # top left
  68.     l1, c1 = l-1, c-1
  69.     while l1 >= 0 and c1 >= 0:
  70.         if board[l1][c1] == 'R':
  71.             return False
  72.         l1 -= 1
  73.         c1 -= 1
  74.  
  75.     # right down
  76.     l1, c1 = l+1, c+1
  77.     while l1 < 8 and c1 < 8:
  78.         if board[l1][c1] == 'R':
  79.             return False
  80.         l1 += 1
  81.         c1 += 1
  82.  
  83.     # top right
  84.     l1, c1 = l-1, c+1
  85.     while l1 >= 0 and c1 < 8:
  86.         if board[l1][c1] == 'R':
  87.             return False
  88.         l1 -= 1
  89.         c1 += 1
  90.  
  91.     # down left
  92.     l1, c1 = l+1, c-1
  93.     while l1 < 8 and c1 >= 0:
  94.         if board[l1][c1] == 'R':
  95.             return False
  96.         l1 += 1
  97.         c1 -= 1
  98.  
  99.     return True
  100.  
  101.  
  102. def queen_spacer(board, l, c):
  103.  
  104.     # colonnes plus
  105.     for i in range(0, 8):
  106.         if not i == c:
  107.             board[l][i] = 'X'
  108.  
  109.     # lignes plus
  110.     for i in range(0, 8):
  111.         if not i == l:
  112.             board[i][c] = 'X'
  113.  
  114.     # top left
  115.     l1, c1 = l-1, c-1
  116.     while l1 >= 0 and c1 >= 0:
  117.         board[l1][c1] = 'X'
  118.         l1 -= 1
  119.         c1 -= 1
  120.  
  121.     # right down
  122.     l1, c1 = l+1, c+1
  123.     while l1 < 8 and c1 < 8:
  124.         board[l1][c1] = 'X'
  125.         l1 += 1
  126.         c1 += 1
  127.  
  128.     # top right
  129.     l1, c1 = l-1, c+1
  130.     while l1 >= 0 and c1 < 8:
  131.         board[l1][c1] = 'X'
  132.         l1 -= 1
  133.         c1 += 1
  134.  
  135.     # down left
  136.     l1, c1 = l+1, c-1
  137.     while l1 < 8 and c1 >= 0:
  138.         board[l1][c1] = 'X'
  139.         l1 += 1
  140.         c1 -= 1
  141.  
  142.  
  143. def filled(board):
  144.     for l in board:
  145.         if not 'R' in l:
  146.             return False
  147.     return True
  148.  
  149.  
  150. def main():
  151.     clrscr()
  152.     while 1:
  153.         board = init_board()
  154.         for l in range(8):
  155.             c = random.randint(0, 7)
  156.             r = 0
  157.             while checker(board, l, c) == False and r < 20:
  158.                 c = random.randint(0, 7)
  159.                 r += 1
  160.             board[l][c] = "R"
  161.             queen_spacer(board, l, c)
  162.         if filled(board):
  163.             board_printer(board)
  164.             break
  165.  
  166.  
  167. if __name__ == '__main__':
  168.     start_time = time.time()
  169.     main()
  170.     exec_time = time.time() - start_time
  171.     print(f"temp d'execution = {round(exec_time,3)} Secondes.")
  172.     print()
  173.  
Add Comment
Please, Sign In to add comment