Files
KI/P2.py
2025-06-17 19:08:34 +02:00

52 lines
2.0 KiB
Python

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()