Conversation
Godrik0
left a comment
There was a problem hiding this comment.
Уберите лишние файлы из PR и сделайте что-то с тестами, подробнее -- в комментариях.
src/homework3-sort/bubble_sort.py
Outdated
There was a problem hiding this comment.
Этот файл не относится к этому заданию, уберите его из PR
There was a problem hiding this comment.
Этот файл тоже не относится к этому заданию, уберите его из PR
| count = 0 | ||
| # Доступные позиции в текущей строке | ||
| available_positions = ((1 << n) - 1) & ~(columns | diagonals1 | diagonals2) | ||
|
|
||
| while available_positions: | ||
| # Берем самую правую доступную позицию | ||
| position = available_positions & -available_positions | ||
| # Убираем ее из доступных | ||
| available_positions -= position | ||
|
|
||
| count += backtrack( | ||
| row + 1, | ||
| columns | position, | ||
| (diagonals1 | position) << 1, | ||
| (diagonals2 | position) >> 1, | ||
| ) |
There was a problem hiding this comment.
Всю эту логику стоит пояснить подробнее.
Например, что происходит в этих строчках?
columns | position,
(diagonals1 | position) << 1,
(diagonals2 | position) >> 1
Вернувшись к ним через время вы уже и не сможете точно вспомнить.
| def test_bitmask_basic(): | ||
| """Тест оптимизированного решения (bitmask)""" | ||
| print("ТЕСТИРОВАНИЕ BITMASK РЕШЕНИЯ") | ||
| print("=" * 50) | ||
|
|
||
| # Известные значения для N ферзей | ||
| test_cases = [ | ||
| (1, 1), # [0] | ||
| (2, 0), # нет решений | ||
| (3, 0), # нет решений | ||
| (4, 2), # 2 решения | ||
| (5, 10), # 10 решений | ||
| (6, 4), # 4 решения | ||
| (7, 40), # 40 решений | ||
| (8, 92), # 92 решения | ||
| (9, 352), # 352 решения | ||
| (10, 724), # 724 решения | ||
| ] | ||
|
|
||
| all_passed = True | ||
|
|
||
| for n, expected in test_cases: | ||
| result = n_queens_bitmask(n) | ||
|
|
||
| if result == expected: | ||
| print(f"✓ N={n}: {result} (ожидалось {expected})") | ||
| else: | ||
| print(f"✗ N={n}: {result} (ожидалось {expected})") | ||
| all_passed = False | ||
|
|
||
| print("=" * 50) | ||
| print(f"РЕЗУЛЬТАТ: {'Все тесты пройдены' if all_passed else 'Есть ошибки'}") | ||
|
|
||
| return all_passed |
There was a problem hiding this comment.
Тесты в этом задании не предполагались, тем более тут они очень захардкожены через print. Лучше либо уберите их, либо перепишите, используя pytest.
| if count is None: | ||
| count = [0] |
There was a problem hiding this comment.
Зачем тут передавать список count? Можно было бы сделать так, чтобы функция возвращала количество решений из своей ветки, а в основной ветке они суммировались.
Решения задачи о расстановке ферзей