From 2d2133f66387f5c23021657fcf9236ea7af94140 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Sat, 20 Dec 2025 18:21:33 +0300 Subject: [PATCH 1/2] Create fastest_queens.py with Pep8 --- src/hw_pep8/fastest_queens.py | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/hw_pep8/fastest_queens.py diff --git a/src/hw_pep8/fastest_queens.py b/src/hw_pep8/fastest_queens.py new file mode 100644 index 0000000..8934900 --- /dev/null +++ b/src/hw_pep8/fastest_queens.py @@ -0,0 +1,39 @@ +def queens_counter(board_size): + # Множества для отслеживания занятых позиций - столбцы и диагонали (/ и \) + columns = set() + diag1 = set() + diag2 = set() + + # Рекурсивно размещает ферзей построчно, используя метод возврата. + def backtrack(row): + # Базовый случай: все строки успешно заполнены + if row == board_size: + return 1 + count = 0 + + # Перебираем все возможные столбцы в текущей строке + for col in range(board_size): + # Проверяем, атакует ли текущая позиция уже размещенных ферзей + if col in columns or (row + col) in diag1 or (row - col) in diag2: + continue + + # Размещаем ферзя в текущей позиции + columns.add(col) + diag1.add(row + col) + diag2.add(row - col) + + # Рекурсивно размещаем ферзей в следующих строках + count += backtrack(row + 1) + + # Убираем ферзя для проверки других позиций (backtracking) + columns.remove(col) + diag1.remove(row + col) + diag2.remove(row - col) + return count + + # Начинаем рекурсивный поиск с первой строки (индекс 0) + return backtrack(0) + +n = int(input("Введите n до 14 включительно: ")) +result = queens_counter(n) +print(f"Количество расстановок {n} ферзей: {result}") From 7fd65b6cd25474359cabbd5a01fc50ac58b41419 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Sat, 20 Dec 2025 18:30:56 +0300 Subject: [PATCH 2/2] Update fastest_queens.py --- src/hw_pep8/fastest_queens.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/hw_pep8/fastest_queens.py b/src/hw_pep8/fastest_queens.py index 8934900..efe5edf 100644 --- a/src/hw_pep8/fastest_queens.py +++ b/src/hw_pep8/fastest_queens.py @@ -1,12 +1,12 @@ def queens_counter(board_size): - # Множества для отслеживания занятых позиций - столбцы и диагонали (/ и \) + # Множества для отслеживания занятых позиций - столбцы и диагонали (восходящие и нисходящие) columns = set() - diag1 = set() - diag2 = set() + rising_diag = set() + descending_diag = set() - # Рекурсивно размещает ферзей построчно, используя метод возврата. + # Рекурсивно размещает ферзей построчно, используя метод возврата def backtrack(row): - # Базовый случай: все строки успешно заполнены + # Все строки успешно заполнены if row == board_size: return 1 count = 0 @@ -14,26 +14,27 @@ def backtrack(row): # Перебираем все возможные столбцы в текущей строке for col in range(board_size): # Проверяем, атакует ли текущая позиция уже размещенных ферзей - if col in columns or (row + col) in diag1 or (row - col) in diag2: + if col in columns or (row + col) in rising_diag or (row - col) in descending_diag: continue # Размещаем ферзя в текущей позиции columns.add(col) - diag1.add(row + col) - diag2.add(row - col) + rising_diag.add(row + col) + descending_diag.add(row - col) # Рекурсивно размещаем ферзей в следующих строках count += backtrack(row + 1) # Убираем ферзя для проверки других позиций (backtracking) columns.remove(col) - diag1.remove(row + col) - diag2.remove(row - col) + rising_diag.remove(row + col) + descending_diag.remove(row - col) + return count # Начинаем рекурсивный поиск с первой строки (индекс 0) return backtrack(0) -n = int(input("Введите n до 14 включительно: ")) -result = queens_counter(n) -print(f"Количество расстановок {n} ферзей: {result}") +board_size = int(input("Введите n. (Можно до 14 включительно): ")) +result = queens_counter(board_size) +print(f"Количество расстановок {board_size} ферзей: {result}")