enfoce min word length 3
This commit is contained in:
66
tests/test_grid_min4.py
Normal file
66
tests/test_grid_min4.py
Normal file
@ -0,0 +1,66 @@
|
||||
from multiplayer_crosswords.crossword_algorithm import generate_grid_template
|
||||
import pytest
|
||||
|
||||
def test_generate_grid_template_min_length_4_strict():
|
||||
width = 15
|
||||
height = 15
|
||||
min_len = 4 # STRICTER
|
||||
|
||||
def get_len_at(grid, r, c, dr, dc):
|
||||
# Scan backward
|
||||
curr_r, curr_c = r, c
|
||||
while curr_r >= 0 and curr_c >= 0 and grid[curr_r][curr_c] != '#':
|
||||
curr_r -= dr
|
||||
curr_c -= dc
|
||||
start_r, start_c = curr_r + dr, curr_c + dc
|
||||
|
||||
# Scan forward
|
||||
curr_r, curr_c = r, c
|
||||
while curr_r < height and curr_c < width and grid[curr_r][curr_c] != '#':
|
||||
curr_r += dr
|
||||
curr_c += dc
|
||||
end_r, end_c = curr_r - dr, curr_c - dc
|
||||
|
||||
if dr == 0: # Horizontal
|
||||
return end_c - start_c + 1
|
||||
else: # Vertical
|
||||
return end_r - start_r + 1
|
||||
|
||||
# Run multiple times
|
||||
for seed in range(50):
|
||||
grid = generate_grid_template(width=width, height=height, block_ratio=0.25, seed=seed, min_slot_length=min_len)
|
||||
|
||||
failed_cells = []
|
||||
for r in range(height):
|
||||
for c in range(width):
|
||||
if grid[r][c] == '':
|
||||
h_len = get_len_at(grid, r, c, 0, 1)
|
||||
v_len = get_len_at(grid, r, c, 1, 0)
|
||||
|
||||
if h_len < min_len and v_len < min_len:
|
||||
failed_cells.append((r, c, h_len, v_len))
|
||||
|
||||
if failed_cells:
|
||||
print(f"Seed {seed} failed. Invalid cells found:")
|
||||
# Only print first few
|
||||
for cell in failed_cells[:5]:
|
||||
print(f"Cell ({cell[0]}, {cell[1]}) has h_len={cell[2]} and v_len={cell[3]}")
|
||||
|
||||
# Print grid heavily
|
||||
print("\nFAILED GRID:")
|
||||
for r in range(height):
|
||||
row_str = ""
|
||||
for c in range(width):
|
||||
if grid[r][c] == '#':
|
||||
row_str += "# "
|
||||
else:
|
||||
# check if this cell is failed
|
||||
is_failed = False
|
||||
for fc in failed_cells:
|
||||
if fc[0] == r and fc[1] == c:
|
||||
is_failed = True
|
||||
break
|
||||
row_str += "X " if is_failed else ". "
|
||||
print(row_str)
|
||||
|
||||
assert len(failed_cells) == 0, f"Found {len(failed_cells)} invalid cells for seed {seed}"
|
||||
Reference in New Issue
Block a user