last lab
This commit is contained in:
8
labPython/lab20/maze.txt
Normal file
8
labPython/lab20/maze.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
M
|
||||
|
||||
M M M
|
||||
M M M
|
||||
M M M
|
||||
MM
|
||||
MMM MMMM
|
||||
|
||||
65
labPython/lab20/task_1.py
Normal file
65
labPython/lab20/task_1.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import random
|
||||
|
||||
|
||||
def create_file():
|
||||
n = random.randint(5, 10)
|
||||
maze = []
|
||||
for _ in range(n):
|
||||
row = "".join(["M" if random.random() < 0.3 else " " for _ in range(n)])
|
||||
maze.append(row)
|
||||
with open("maze.txt", "w") as f:
|
||||
for row in maze:
|
||||
f.write(row + "\n")
|
||||
return n
|
||||
|
||||
|
||||
def read_maze():
|
||||
with open("maze.txt") as f:
|
||||
maze = [list(line.rstrip("\n")) for line in f]
|
||||
return maze
|
||||
|
||||
|
||||
def solve(maze, x, y, xc, yc, visited, length, best):
|
||||
n = len(maze)
|
||||
if x < 0 or y < 0 or x >= n or y >= n:
|
||||
return
|
||||
if maze[x][y] == "M" or visited[x][y]:
|
||||
return
|
||||
if length >= best[0]:
|
||||
return
|
||||
if x == xc and y == yc:
|
||||
best[0] = min(best[0], length)
|
||||
return
|
||||
visited[x][y] = True
|
||||
solve(maze, x + 1, y, xc, yc, visited, length + 1, best)
|
||||
solve(maze, x - 1, y, xc, yc, visited, length + 1, best)
|
||||
solve(maze, x, y + 1, xc, yc, visited, length + 1, best)
|
||||
solve(maze, x, y - 1, xc, yc, visited, length + 1, best)
|
||||
visited[x][y] = False
|
||||
|
||||
|
||||
while True:
|
||||
print("\n1 - создать лабиринт\n2 - решить\n0 - выход")
|
||||
try:
|
||||
c = input("Выбор: ")
|
||||
if c == "1":
|
||||
n = create_file()
|
||||
print("Файл создан. Размер:", n)
|
||||
elif c == "2":
|
||||
maze = read_maze()
|
||||
n = len(maze)
|
||||
x = int(input("Старт X: "))
|
||||
y = int(input("Старт Y: "))
|
||||
xc = int(input("Сыр X: "))
|
||||
yc = int(input("Сыр Y: "))
|
||||
visited = [[False] * n for _ in range(n)]
|
||||
best = [10**9]
|
||||
solve(maze, x, y, xc, yc, visited, 0, best)
|
||||
if best[0] == 10**9:
|
||||
print("Путь не найден")
|
||||
else:
|
||||
print("Кратчайший путь:", best[0])
|
||||
elif c == "0":
|
||||
break
|
||||
except:
|
||||
print("Ошибка ввода")
|
||||
37
labPython/lab20/task_2.py
Normal file
37
labPython/lab20/task_2.py
Normal file
@@ -0,0 +1,37 @@
|
||||
print("task: 6r\nВставка + и - между цифрами для получения числа N")
|
||||
|
||||
|
||||
def generate(s, pos, expr, target, results):
|
||||
if pos == len(s):
|
||||
try:
|
||||
if eval(expr) == target:
|
||||
results.append(expr + "=" + str(target))
|
||||
except:
|
||||
pass
|
||||
return
|
||||
generate(s, pos + 1, expr + "+" + s[pos], target, results)
|
||||
generate(s, pos + 1, expr + "-" + s[pos], target, results)
|
||||
generate(s, pos + 1, expr + s[pos], target, results)
|
||||
|
||||
|
||||
while True:
|
||||
print("\n1 - решить\n0 - выход")
|
||||
try:
|
||||
c = input("Выбор: ")
|
||||
if c == "1":
|
||||
s, target = input("Введите число и N: ").split()
|
||||
target = int(target)
|
||||
results = []
|
||||
generate(s, 1, s[0], target, results)
|
||||
with open("result.txt", "w") as f:
|
||||
if results:
|
||||
for r in results:
|
||||
print(r)
|
||||
f.write(r + "\n")
|
||||
else:
|
||||
print("Решение не существует")
|
||||
f.write("Решение не существует")
|
||||
elif c == "0":
|
||||
break
|
||||
except:
|
||||
print("Ошибка ввода")
|
||||
Reference in New Issue
Block a user