import random class Field: def __init__(self, init_state=None): self.state = [] if init_state is None: for i in range(8): self.state.append(random.randint(1,8)) # row number (0:8] => [1:8] else: self.state = init_state.copy() def print_field(self): print(" ┌───┬───┬───┬───┬───┬───┬───┬───┐") for row in range(8,0,-1): # (0:8] row_string = "" for line in range(8): if row is self.state[line]: # is there a Queen in this line (spalte) in this row row_string += "Q │ " else: row_string += " │ " print(f"{row} | {row_string}") if row > 1 : print(" ├───┼───┼───┼───┼───┼───┼───┼───┤") print(" └───┴───┴───┴───┴───┴───┴───┴───┘") print(" A B C D E F G H ") print(self.state) def get_state(self): return self.state def collisions(self, current_state): # wagerechte haben die gleiche zahl stehe # diagonale haben einen wert der um den abstand gemindert ist => gleichseitiges rechtwinkliges Dreieck # Beachte die Spalten/ Linien Nr ist um eins verringert [0, 1, ...,7] collisions = 0 for i, row_i in enumerate(current_state): for j, row_j in enumerate(current_state): if j is not i: # horizontal diagonal in both directions and counting twice if row_i == row_j or row_j == (row_i + (j-i)) or row_j == (row_i - (j-i)): collisions += 1 return collisions def main(): new_field = Field() new_field.print_field() print(new_field.collisions(new_field.get_state())) main()