SOLUTION MFSSSSS
This commit is contained in:
parent
0365fe15c4
commit
593444d10b
|
@ -61,8 +61,10 @@ def get_constraints(board: list, border: list, pos: int) -> list:
|
|||
return constraints
|
||||
|
||||
def check_constraint(slice: list, constraint: int) -> bool:
|
||||
constraint = int(constraint)
|
||||
print(f'{slice=}')
|
||||
print(f'0 in slice: {0 in slice}')
|
||||
print(f'{constraint=}')
|
||||
if 0 in slice:
|
||||
return True
|
||||
level = 0
|
||||
|
@ -72,9 +74,11 @@ def check_constraint(slice: list, constraint: int) -> bool:
|
|||
level = tower
|
||||
visible_towers += 1
|
||||
print(f'{visible_towers=} vs {constraint=}')
|
||||
return visible_towers == int(constraint)
|
||||
return visible_towers == constraint
|
||||
|
||||
def is_valid_state(board: list, border: list, next_candidate_index: int) -> bool:
|
||||
print("################################ Calling is_valid_state function")
|
||||
print(f'{next_candidate_index=}')
|
||||
print_board(board, border)
|
||||
row = get_row(board, next_candidate_index)
|
||||
column = get_col(board, next_candidate_index)
|
||||
|
@ -87,6 +91,8 @@ def is_valid_state(board: list, border: list, next_candidate_index: int) -> bool
|
|||
check_constraint(column[::-1], constraints[1])
|
||||
])
|
||||
print(f'{satisfies_constraints=}')
|
||||
print("################################ Finished is_valid_state function")
|
||||
print()
|
||||
return satisfies_constraints
|
||||
|
||||
def print_board(board: list, border: list) -> None:
|
||||
|
@ -118,9 +124,11 @@ def backtrack(board: list, sols: list, border: list) -> None:
|
|||
candidates = get_candidates(board, next_candidate_index)
|
||||
for candidate in candidates:
|
||||
board[next_candidate_index] = candidate
|
||||
print(f'Current candidate: {next_candidate_index}')
|
||||
if is_valid_state(board, border, next_candidate_index):
|
||||
backtrack(board, sols, border)
|
||||
continue
|
||||
print(f"Setting board at {next_candidate_index} to 0")
|
||||
board[next_candidate_index] = 0
|
||||
|
||||
def main(*args, **kwargs) -> None:
|
||||
|
||||
|
@ -146,7 +154,9 @@ def main(*args, **kwargs) -> None:
|
|||
board = [
|
||||
0 for _ in range(board_dim ** 2)
|
||||
]
|
||||
number_of_sols = backtrack(board, [], border)
|
||||
solutions = []
|
||||
backtrack(board, solutions, border)
|
||||
print(solutions)
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main('4 3 2 1 1 2 2 2 4 3 2 1 1 2 2 2'))
|
||||
|
|
Loading…
Reference in New Issue