This commit is contained in:
Timo Schmidt 2023-03-25 19:34:39 +01:00
parent 801fe8fd73
commit 6c35fae822
1 changed files with 24 additions and 1 deletions

View File

@ -60,13 +60,34 @@ def get_constraints(board: list, border: list, pos: int) -> list:
constraints = [colup, coldown, rowleft, rowright]
return constraints
def check_constraint(slice: list, constraint: int) -> bool:
print(f'{slice=}')
print(f'0 in slice: {0 in slice}')
if 0 in slice:
return True
level = 0
visible_towers = 0
for tower in slice:
if tower > level:
level = tower
visible_towers += 1
print(f'{visible_towers=} vs {constraint=}')
return visible_towers == int(constraint)
def is_valid_state(board: list, border: list, next_candidate_index: int) -> bool:
print_board(board, border)
row = get_row(board, next_candidate_index)
column = get_col(board, next_candidate_index)
constraints = get_constraints(board, border, next_candidate_index)
print(f'{constraints=}, {row=}, {column=}')
return True
satisfies_constraints = all([
check_constraint(row, constraints[2]),
check_constraint(row[::-1], constraints[3]),
check_constraint(column, constraints[0]),
check_constraint(column[::-1], constraints[1])
])
print(f'{satisfies_constraints=}')
return satisfies_constraints
def print_board(board: list, border: list) -> None:
padding = ' ' * PADDING
@ -84,6 +105,8 @@ def print_board(board: list, border: list) -> None:
print(' '.join(border[board_dim:board_dim * 2]))
print()
# 2D board initialized with 0's, dependent on n
# params: rec-depth, n, **board, **border
def backtrack(board: list, sols: list, border: list) -> None:
if board.count(0) == 0:
sols.append(board)