From a94ba3321a2c5b38dd2f692e729e5a11501d5e08 Mon Sep 17 00:00:00 2001 From: volkovim Date: Thu, 30 Apr 2026 16:20:23 +0300 Subject: [PATCH 1/2] [1] trask1 --- volkovim/__init__.py | 0 volkovim/docs/data/Figure_1.png | Bin 0 -> 21331 bytes volkovim/docs/data/Figure_2.png | Bin 0 -> 22010 bytes volkovim/docs/data/Figure_3.png | Bin 0 -> 20240 bytes volkovim/docs/data/results.csv | 91 ++++++++++++++++++++++++ volkovim/docs/report_1.docx | Bin 0 -> 85895 bytes volkovim/task1/__init__.py | 0 volkovim/task1/histograms.py | 45 ++++++++++++ volkovim/task1/main.py | 66 +++++++++++++++++ volkovim/task1/structures/BinaryTree.py | 83 +++++++++++++++++++++ volkovim/task1/structures/HashTable.py | 51 +++++++++++++ volkovim/task1/structures/LinkedList.py | 60 ++++++++++++++++ volkovim/task1/structures/__init__.py | 0 volkovim/task1/util/__init__.py | 0 volkovim/task1/util/randomNames.py | 44 ++++++++++++ volkovim/task1/util/timeTester.py | 30 ++++++++ 16 files changed, 470 insertions(+) create mode 100644 volkovim/__init__.py create mode 100644 volkovim/docs/data/Figure_1.png create mode 100644 volkovim/docs/data/Figure_2.png create mode 100644 volkovim/docs/data/Figure_3.png create mode 100644 volkovim/docs/data/results.csv create mode 100644 volkovim/docs/report_1.docx create mode 100644 volkovim/task1/__init__.py create mode 100644 volkovim/task1/histograms.py create mode 100644 volkovim/task1/main.py create mode 100644 volkovim/task1/structures/BinaryTree.py create mode 100644 volkovim/task1/structures/HashTable.py create mode 100644 volkovim/task1/structures/LinkedList.py create mode 100644 volkovim/task1/structures/__init__.py create mode 100644 volkovim/task1/util/__init__.py create mode 100644 volkovim/task1/util/randomNames.py create mode 100644 volkovim/task1/util/timeTester.py diff --git a/volkovim/__init__.py b/volkovim/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/volkovim/docs/data/Figure_1.png b/volkovim/docs/data/Figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad574f123082bd7f87836503e463ec8cd912448 GIT binary patch literal 21331 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 literal 0 HcmV?d00001 diff --git a/volkovim/docs/data/Figure_2.png b/volkovim/docs/data/Figure_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d9f6590e4039d5477d1c1135397f2c4de4eb8d GIT binary patch literal 22010 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 literal 0 HcmV?d00001 diff --git a/volkovim/docs/data/Figure_3.png b/volkovim/docs/data/Figure_3.png new file mode 100644 index 0000000000000000000000000000000000000000..db5b0dfee1a0f1a3a8411761f8ae6f5e63229636 GIT binary patch literal 20240 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 LU6}%Dv!MS2LD|3A literal 0 HcmV?d00001 diff --git a/volkovim/docs/data/results.csv b/volkovim/docs/data/results.csv new file mode 100644 index 0000000..c909858 --- /dev/null +++ b/volkovim/docs/data/results.csv @@ -0,0 +1,91 @@ +Structure,Order,Operation,Time +LinkedList,random,insert,0.02272110000012617 +LinkedList,random,find,0.00020389999917824753 +LinkedList,random,delete,0.00012740000056510326 +LinkedList,random,insert,0.022962700000789482 +LinkedList,random,find,0.00019210000027669594 +LinkedList,random,delete,0.00013299999955052044 +LinkedList,random,insert,0.023047099999530474 +LinkedList,random,find,0.000189200000022538 +LinkedList,random,delete,0.00013699999908567406 +LinkedList,random,insert,0.0228056000014476 +LinkedList,random,find,0.00019530000099621248 +LinkedList,random,delete,0.0001320000010309741 +LinkedList,random,insert,0.022504299999127397 +LinkedList,random,find,0.0001827000014600344 +LinkedList,random,delete,0.00012650000098801684 +HashTable,random,insert,0.006552200000442099 +HashTable,random,find,6.84000006003771e-05 +HashTable,random,delete,4.3999998524668626e-05 +HashTable,random,insert,0.006576800000402727 +HashTable,random,find,6.790000043110922e-05 +HashTable,random,delete,4.459999945538584e-05 +HashTable,random,insert,0.006557500000781147 +HashTable,random,find,6.779999966965988e-05 +HashTable,random,delete,4.2499999835854396e-05 +HashTable,random,insert,0.006657900001300732 +HashTable,random,find,6.579999899258837e-05 +HashTable,random,delete,3.990000004705507e-05 +HashTable,random,insert,0.0066283999985898845 +HashTable,random,find,6.589999975403771e-05 +HashTable,random,delete,4.270000135875307e-05 +BST,random,insert,0.005961099999694852 +BST,random,find,5.790000068373047e-05 +BST,random,delete,5.5900000006658956e-05 +BST,random,insert,0.005897299999560346 +BST,random,find,5.229999987932388e-05 +BST,random,delete,5.080000119050965e-05 +BST,random,insert,0.005889399999432499 +BST,random,find,5.32000012753997e-05 +BST,random,delete,4.749999970954377e-05 +BST,random,insert,0.006325000000288128 +BST,random,find,5.310000051395036e-05 +BST,random,delete,5.1900000471505336e-05 +BST,random,insert,0.00589380000019446 +BST,random,find,5.149999924469739e-05 +BST,random,delete,5.140000030223746e-05 +LinkedList,sorted,insert,0.021485899998879177 +LinkedList,sorted,find,0.0001861000000644708 +LinkedList,sorted,delete,0.00012830000014218967 +LinkedList,sorted,insert,0.020360300000902498 +LinkedList,sorted,find,0.00017280000065511558 +LinkedList,sorted,delete,0.00010759999895526562 +LinkedList,sorted,insert,0.02137589999983902 +LinkedList,sorted,find,0.00017079999997804407 +LinkedList,sorted,delete,8.949999937613029e-05 +LinkedList,sorted,insert,0.019899599999916973 +LinkedList,sorted,find,0.0001748000013321871 +LinkedList,sorted,delete,0.00011620000077527948 +LinkedList,sorted,insert,0.019986600000265753 +LinkedList,sorted,find,0.0001812999998946907 +LinkedList,sorted,delete,0.00011749999976018444 +HashTable,sorted,insert,0.005906399999730638 +HashTable,sorted,find,6.240000038815197e-05 +HashTable,sorted,delete,3.930000093532726e-05 +HashTable,sorted,insert,0.005912500000704313 +HashTable,sorted,find,6.050000047252979e-05 +HashTable,sorted,delete,3.8800000766059384e-05 +HashTable,sorted,insert,0.005913900000450667 +HashTable,sorted,find,6.050000047252979e-05 +HashTable,sorted,delete,3.96999985241564e-05 +HashTable,sorted,insert,0.005919999999605352 +HashTable,sorted,find,6.190000021888409e-05 +HashTable,sorted,delete,3.749999996216502e-05 +HashTable,sorted,insert,0.005881000000954373 +HashTable,sorted,find,6.089999988034833e-05 +HashTable,sorted,delete,3.7900001188972965e-05 +BST,sorted,insert,0.033791699999710545 +BST,sorted,find,0.000340900000082911 +BST,sorted,delete,0.00026059999981953297 +BST,sorted,insert,0.03474140000071202 +BST,sorted,find,0.0003206999990652548 +BST,sorted,delete,0.0002024000004894333 +BST,sorted,insert,0.03431230000023788 +BST,sorted,find,0.0003130000004603062 +BST,sorted,delete,0.00025209999876096845 +BST,sorted,insert,0.03444429999944987 +BST,sorted,find,0.0003271999994467478 +BST,sorted,delete,0.00017320000006293412 +BST,sorted,insert,0.03425440000137314 +BST,sorted,find,0.0003316999991511693 +BST,sorted,delete,0.00022639999951934442 diff --git a/volkovim/docs/report_1.docx b/volkovim/docs/report_1.docx new file mode 100644 index 0000000000000000000000000000000000000000..08a385ed117e993f8520c5572d3751a3c4f1c7b0 GIT binary patch literal 85895 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 Vz;gl$`auC31|GEnDbTR!e*rAS`9lBz literal 0 HcmV?d00001 diff --git a/volkovim/task1/__init__.py b/volkovim/task1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/volkovim/task1/histograms.py b/volkovim/task1/histograms.py new file mode 100644 index 0000000..7ae1594 --- /dev/null +++ b/volkovim/task1/histograms.py @@ -0,0 +1,45 @@ +import csv +import matplotlib.pyplot as plt +from collections import defaultdict + + +data = defaultdict(list) + +with open("results.csv", "r") as f: + reader = csv.DictReader(f) + + for row in reader: + key = (row["Structure"], row["Order"], row["Operation"]) + data[key].append(float(row["Time"])) + + +def avg(key): + return sum(data[key]) / len(data[key]) + + +structures = ["LinkedList", "HashTable", "BST"] +orders = ["random", "sorted"] +operations = ["insert", "find", "delete"] + + +for op in operations: + plt.figure() + + labels = [] + values = [] + + for struct in structures: + for order in orders: + key = (struct, order, op) + labels.append(f"{struct}\n{order}") + values.append(avg(key)) + + plt.bar(labels, values) + + plt.title(f"{op} (Histogram)") + plt.ylabel("Time (sec)") + plt.xticks(rotation=30) + plt.grid(axis="y") + + plt.tight_layout() + plt.show() \ No newline at end of file diff --git a/volkovim/task1/main.py b/volkovim/task1/main.py new file mode 100644 index 0000000..163dbe5 --- /dev/null +++ b/volkovim/task1/main.py @@ -0,0 +1,66 @@ +import csv + +from structures.LinkedList import ll_insert, ll_find, ll_delete +from structures.HashTable import ht_insert, ht_find, ht_delete +from structures.BinaryTree import bst_insert, bst_find, bst_delete + +from util.randomNames import generate_test_data +from util.timeTester import run_test + + +def main(): + structures = [ + ("LinkedList", ll_insert, ll_find, ll_delete), + ("HashTable", ht_insert, ht_find, ht_delete), + ("BST", bst_insert, bst_find, bst_delete) + ] + + modes = [ + ("random", False), + ("sorted", True) + ] + + results = [] + + N = 10000 + REPEATS = 5 + + for mode_name, is_sorted in modes: + base_records = generate_test_data(N, is_sorted) + + for struct_name, ins, fnd, dele in structures: + for i in range(REPEATS): + + stats = run_test(base_records, ins, fnd, dele) + + results.append([ + struct_name, + mode_name, + "insert", + stats["insert"] + ]) + + results.append([ + struct_name, + mode_name, + "find", + stats["find"] + ]) + + results.append([ + struct_name, + mode_name, + "delete", + stats["delete"] + ]) + + with open("results.csv", "w", newline="") as f: + writer = csv.writer(f) + writer.writerow(["Structure", "Order", "Operation", "Time"]) + writer.writerows(results) + + print("Готово: записано", len(results), "строк") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/volkovim/task1/structures/BinaryTree.py b/volkovim/task1/structures/BinaryTree.py new file mode 100644 index 0000000..b98af00 --- /dev/null +++ b/volkovim/task1/structures/BinaryTree.py @@ -0,0 +1,83 @@ +def bst_insert(root: dict | None, name: str, phone: str) -> dict: + new_node = {'name': name, 'phone': phone, 'left': None, 'right': None} + + if root is None: + return new_node + + current = root + + while True: + if name == current['name']: + current['phone'] = phone + return root + + if name < current['name']: + if current['left'] is None: + current['left'] = new_node + return root + current = current['left'] + else: + if current['right'] is None: + current['right'] = new_node + return root + current = current['right'] + + +def bst_find(root: dict | None, name: str) -> str | None: + current = root + + while current is not None: + if name == current['name']: + return current['phone'] + + if name < current['name']: + current = current['left'] + else: + current = current['right'] + + return None + + +def bst_min(node: dict) -> dict: + while node['left'] is not None: + node = node['left'] + return node + + +def bst_delete(root: dict | None, name: str) -> dict | None: + if root is None: + return None + + if name < root['name']: + root['left'] = bst_delete(root['left'], name) + + elif name > root['name']: + root['right'] = bst_delete(root['right'], name) + + else: + if root['left'] is None: + return root['right'] + + if root['right'] is None: + return root['left'] + + successor = bst_min(root['right']) + root['name'] = successor['name'] + root['phone'] = successor['phone'] + root['right'] = bst_delete(root['right'], successor['name']) + + return root + + +def bst_list_all(root: dict | None) -> list: + result = [] + + def inorder(node): + if node is None: + return + inorder(node['left']) + result.append((node['name'], node['phone'])) + inorder(node['right']) + + inorder(root) + return result \ No newline at end of file diff --git a/volkovim/task1/structures/HashTable.py b/volkovim/task1/structures/HashTable.py new file mode 100644 index 0000000..dd22790 --- /dev/null +++ b/volkovim/task1/structures/HashTable.py @@ -0,0 +1,51 @@ +from structures.LinkedList import * + + +def hash_func(name: str, size: int) -> int: + total = 0 + + for i, ch in enumerate(name): + total += ord(ch) * (i + 1) + + return total % size + + +def ht_insert(buckets: list | None, name: str, phone: str, size: int = 50) -> list: + if buckets is None: + buckets = [None] * size + + index = hash_func(name, len(buckets)) + buckets[index] = ll_insert(buckets[index], name, phone) + + return buckets + + +def ht_find(buckets: list | None, name: str) -> str | None: + if not buckets: + return None + + index = hash_func(name, len(buckets)) + return ll_find(buckets[index], name) + + +def ht_delete(buckets: list | None, name: str) -> list | None: + if not buckets: + return buckets + + index = hash_func(name, len(buckets)) + buckets[index] = ll_delete(buckets[index], name) + + return buckets + + +def ht_list_all(buckets: list | None) -> list: + if not buckets: + return [] + + result = [] + + for bucket in buckets: + if bucket is not None: + result.extend(ll_list_all(bucket)) + + return sorted(result, key=lambda x: x[0]) diff --git a/volkovim/task1/structures/LinkedList.py b/volkovim/task1/structures/LinkedList.py new file mode 100644 index 0000000..091bae4 --- /dev/null +++ b/volkovim/task1/structures/LinkedList.py @@ -0,0 +1,60 @@ +def ll_insert(head: dict | None, name: str, phone: str) -> dict: + if head is None: + return {'name': name, 'phone': phone, 'next': None} + + current = head + + while current is not None: + if current['name'] == name: + current['phone'] = phone + return head + + if current['next'] is None: + break + + current = current['next'] + + current['next'] = {'name': name, 'phone': phone, 'next': None} + return head + + +def ll_find(head: dict | None, name: str) -> str | None: + current = head + + while current is not None: + if current['name'] == name: + return current['phone'] + current = current['next'] + + return None + + +def ll_delete(head: dict | None, name: str) -> dict | None: + if head is None: + return None + + if head['name'] == name: + return head['next'] + + current = head + + while current['next'] is not None: + if current['next']['name'] == name: + current['next'] = current['next']['next'] + return head + + current = current['next'] + + return head + + +def ll_list_all(head: dict | None) -> list: + records = [] + current = head + + while current is not None: + records.append((current['name'], current['phone'])) + current = current['next'] + + records.sort(key=lambda item: item[0]) + return records diff --git a/volkovim/task1/structures/__init__.py b/volkovim/task1/structures/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/volkovim/task1/util/__init__.py b/volkovim/task1/util/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/volkovim/task1/util/randomNames.py b/volkovim/task1/util/randomNames.py new file mode 100644 index 0000000..79ff6d3 --- /dev/null +++ b/volkovim/task1/util/randomNames.py @@ -0,0 +1,44 @@ +import random + + +names_pool = ( + "Иван", "Александр", "Михаил", "Дмитрий", "Сергей", "Андрей", "Алексей", "Николай", "Владимир", "Евгений", +"Павел", "Илья", "Роман", "Артём", "Константин", "Виктор", "Георгий", "Максим", "Василий", "Олег", +"Юрий", "Валерий", "Антон", "Кирилл", "Степан", "Денис", "Тимур", "Григорий", "Леонид", "Фёдор", +"Никита", "Ярослав", "Руслан", "Богдан", "Станислав", "Вячеслав", "Арсений", "Егор", "Захар", "Даниил", +"Матвей", "Тимофей", "Пётр", "Лев", "Семён", "Платон", "Давид", "Глеб", "Родион", "Святослав", +"Владислав", "Елисей", "Анатолий", "Ростислав", "Всеволод", "Мирослав", "Игнат", "Клим", "Евстафий", "Аркадий", +"Игорь", "Лука", "Филипп", "Альберт", "Эдуард", "Роберт", "Артур", "Карл", "Борис", "Вадим", +"Эмиль", "Оскар", "Геннадий", "Марк", "Виталий", "Назар", "Мирон", "Савелий", "Фома", "Еремей", +"Нестор", "Прохор", "Авраам", "Севастьян", "Евдоким", "Трофим", "Кузьма", "Фадей", "Наум", "Аким", +"Лаврентий", "Ипполит", "Панкрат", "Афанасий", "Евдокия", "Прасковья", "Марфа", "Агафья", "Ульяна", "Пелагея", +"Дарья", "Анастасия", "Екатерина", "Ольга", "Татьяна", "Светлана", "Наталья", "Ирина", "Вера", "Людмила", +"Галина", "Любовь", "Надежда", "Анна", "Мария", "Елена", "Юлия", "Ксения", "Полина", "Виктория", +"Алина", "Дарина", "Валерия", "Софья", "Вероника", "Арина", "Кира", "Милана", "Алиса", "Ева", +"Агата", "Злата", "Яна", "Василиса", "Стефания", "Диана", "Карина", "Лидия", "Алла", "Раиса" +) + +non_existent_names = ( + "Ноль", "Целковый", "Полушка", "Четвертушка", "Осьмушка" +) + + +def generate_phone(): + return str(random.randint(10000000000, 99999999999)) + + +def generate_test_data(n=10000, sorted_data=False): + records = [(random.choice(names_pool), generate_phone()) for _ in range(n)] + + if sorted_data: + records.sort(key=lambda x: x[0]) + + return records + + +def generate_find_set(): + return random.sample(names_pool, 100) + list(non_existent_names) + + +def generate_delete_set(): + return random.sample(names_pool, 50) \ No newline at end of file diff --git a/volkovim/task1/util/timeTester.py b/volkovim/task1/util/timeTester.py new file mode 100644 index 0000000..3a321b0 --- /dev/null +++ b/volkovim/task1/util/timeTester.py @@ -0,0 +1,30 @@ +import time +import random +from util.randomNames import names_pool, generate_find_set + + +def run_test(records, insert_func, find_func, delete_func): + structure = None + + start = time.perf_counter() + for name, phone in records: + structure = insert_func(structure, name, phone) + insert_time = time.perf_counter() - start + + find_set = generate_find_set() + + start = time.perf_counter() + for name in find_set: + find_func(structure, name) + find_time = time.perf_counter() - start + + start = time.perf_counter() + for name in random.sample(names_pool, 50): + structure = delete_func(structure, name) + delete_time = time.perf_counter() - start + + return { + "insert": insert_time, + "find": find_time, + "delete": delete_time + } \ No newline at end of file -- 2.43.0 From e6c58ac054fdce6140d097d13650d28ee75a26e5 Mon Sep 17 00:00:00 2001 From: volkovim Date: Sun, 24 May 2026 21:48:59 +0300 Subject: [PATCH 2/2] [2] task2 --- volkovim/task2/builders/maze_builder.py | 8 + volkovim/task2/builders/text_file_builder.py | 102 ++++++++++++ volkovim/task2/command/command.py | 12 ++ volkovim/task2/command/move_command.py | 65 ++++++++ volkovim/task2/command/player.py | 13 ++ volkovim/task2/core/cell.py | 40 +++++ volkovim/task2/core/maze.py | 59 +++++++ volkovim/task2/core/search_stats.py | 22 +++ volkovim/task2/experiments/benchmark.py | 93 +++++++++++ volkovim/task2/experiments/plots.py | 161 +++++++++++++++++++ volkovim/task2/experiments/results.csv | 16 ++ volkovim/task2/main.py | 70 ++++++++ volkovim/task2/mazes/blocked.txt | 3 + volkovim/task2/mazes/empty.txt | 5 + volkovim/task2/mazes/large.txt | 100 ++++++++++++ volkovim/task2/mazes/medium.txt | 50 ++++++ volkovim/task2/mazes/small.txt | 10 ++ volkovim/task2/observer/console_view.py | 64 ++++++++ volkovim/task2/observer/observer.py | 8 + volkovim/task2/report/report_2.docx | Bin 0 -> 126126 bytes volkovim/task2/requirements.txt | 0 volkovim/task2/solver/maze_solver.py | 73 +++++++++ volkovim/task2/solver/search_stats.py | 22 +++ volkovim/task2/strategies/astar.py | 107 ++++++++++++ volkovim/task2/strategies/bfs.py | 51 ++++++ volkovim/task2/strategies/dfs.py | 52 ++++++ volkovim/task2/strategies/dijkstra.py | 0 volkovim/task2/strategies/strategy.py | 8 + 28 files changed, 1214 insertions(+) create mode 100644 volkovim/task2/builders/maze_builder.py create mode 100644 volkovim/task2/builders/text_file_builder.py create mode 100644 volkovim/task2/command/command.py create mode 100644 volkovim/task2/command/move_command.py create mode 100644 volkovim/task2/command/player.py create mode 100644 volkovim/task2/core/cell.py create mode 100644 volkovim/task2/core/maze.py create mode 100644 volkovim/task2/core/search_stats.py create mode 100644 volkovim/task2/experiments/benchmark.py create mode 100644 volkovim/task2/experiments/plots.py create mode 100644 volkovim/task2/experiments/results.csv create mode 100644 volkovim/task2/main.py create mode 100644 volkovim/task2/mazes/blocked.txt create mode 100644 volkovim/task2/mazes/empty.txt create mode 100644 volkovim/task2/mazes/large.txt create mode 100644 volkovim/task2/mazes/medium.txt create mode 100644 volkovim/task2/mazes/small.txt create mode 100644 volkovim/task2/observer/console_view.py create mode 100644 volkovim/task2/observer/observer.py create mode 100644 volkovim/task2/report/report_2.docx create mode 100644 volkovim/task2/requirements.txt create mode 100644 volkovim/task2/solver/maze_solver.py create mode 100644 volkovim/task2/solver/search_stats.py create mode 100644 volkovim/task2/strategies/astar.py create mode 100644 volkovim/task2/strategies/bfs.py create mode 100644 volkovim/task2/strategies/dfs.py create mode 100644 volkovim/task2/strategies/dijkstra.py create mode 100644 volkovim/task2/strategies/strategy.py diff --git a/volkovim/task2/builders/maze_builder.py b/volkovim/task2/builders/maze_builder.py new file mode 100644 index 0000000..b5894f4 --- /dev/null +++ b/volkovim/task2/builders/maze_builder.py @@ -0,0 +1,8 @@ +from abc import ABC, abstractmethod + + +class MazeBuilder(ABC): + + @abstractmethod + def buildFromFile(self, filename): + pass \ No newline at end of file diff --git a/volkovim/task2/builders/text_file_builder.py b/volkovim/task2/builders/text_file_builder.py new file mode 100644 index 0000000..91f6823 --- /dev/null +++ b/volkovim/task2/builders/text_file_builder.py @@ -0,0 +1,102 @@ +from builders.maze_builder import MazeBuilder +from core.cell import Cell +from core.maze import Maze + + +class TextFileMazeBuilder(MazeBuilder): + + def buildFromFile(self, filename): + + with open(filename, "r", encoding="utf-8") as source: + raw_lines = [line.rstrip("\n") for line in source] + + if not raw_lines: + raise ValueError("Maze file is empty") + + expected_width = len(raw_lines[0]) + + blueprint = [] + start_cell = None + exit_cell = None + + for y_index, raw in enumerate(raw_lines): + + if len(raw) != expected_width: + raise ValueError( + f"Broken maze shape at line {y_index + 1}" + ) + + row_pack = [] + + for x_index, symbol in enumerate(raw): + + current = None + + if symbol == "#": + current = Cell( + x_index, + y_index, + isWall=True + ) + + elif symbol == " ": + current = Cell( + x_index, + y_index + ) + + elif symbol == "S": + + if start_cell: + raise ValueError( + "Multiple start cells detected" + ) + + current = Cell( + x_index, + y_index, + isStart=True + ) + + start_cell = current + + elif symbol == "E": + + if exit_cell: + raise ValueError( + "Multiple exit cells detected" + ) + + current = Cell( + x_index, + y_index, + isExit=True + ) + + exit_cell = current + + else: + raise ValueError( + f"Unsupported symbol '{symbol}' " + f"at ({x_index}, {y_index})" + ) + + row_pack.append(current) + + blueprint.append(row_pack) + + if start_cell is None: + raise ValueError( + "Start cell S not found" + ) + + if exit_cell is None: + raise ValueError( + "Exit cell E not found" + ) + + return Maze( + blueprint, + start_cell=start_cell, + exit_cell=exit_cell + ) \ No newline at end of file diff --git a/volkovim/task2/command/command.py b/volkovim/task2/command/command.py new file mode 100644 index 0000000..9dbbf3f --- /dev/null +++ b/volkovim/task2/command/command.py @@ -0,0 +1,12 @@ +from abc import ABC, abstractmethod + + +class Command(ABC): + + @abstractmethod + def execute(self): + pass + + @abstractmethod + def undo(self): + pass \ No newline at end of file diff --git a/volkovim/task2/command/move_command.py b/volkovim/task2/command/move_command.py new file mode 100644 index 0000000..6f96288 --- /dev/null +++ b/volkovim/task2/command/move_command.py @@ -0,0 +1,65 @@ +from command.command import Command + + +class MoveCommand(Command): + + def __init__( + self, + player, + maze, + direction + ): + self.player = player + self.maze = maze + self.direction = direction + self.previous = None + + def _targetCell(self): + + offsets = { + "W": (0, -1), + "S": (0, 1), + "A": (-1, 0), + "D": (1, 0) + } + + dx, dy = offsets.get( + self.direction.upper(), + (0, 0) + ) + + x, y = self.player.getPosition() + + return self.maze.getCell( + x + dx, + y + dy + ) + + def execute(self): + + destination = self._targetCell() + + if destination is None: + return False + + if not destination.isPassable(): + return False + + self.previous = self.player.current + + self.player.place( + destination + ) + + return True + + def undo(self): + + if self.previous is None: + return False + + self.player.place( + self.previous + ) + + return True \ No newline at end of file diff --git a/volkovim/task2/command/player.py b/volkovim/task2/command/player.py new file mode 100644 index 0000000..9f8249b --- /dev/null +++ b/volkovim/task2/command/player.py @@ -0,0 +1,13 @@ +class Player: + def __init__(self, start_cell): + self.current = start_cell + + def place(self, cell): + self.current = cell + + def getPosition(self): + return self.current.getPosition() + + def __str__(self): + x, y = self.getPosition() + return f"Player({x}, {y})" \ No newline at end of file diff --git a/volkovim/task2/core/cell.py b/volkovim/task2/core/cell.py new file mode 100644 index 0000000..d642eda --- /dev/null +++ b/volkovim/task2/core/cell.py @@ -0,0 +1,40 @@ +class Cell: + def __init__( + self, + x: int, + y: int, + isWall: bool = False, + isStart: bool = False, + isExit: bool = False + ): + self.x = x + self.y = y + self.isWall = isWall + self.isStart = isStart + self.isExit = isExit + + def isPassable(self) -> bool: + return self.isWall is False + + def getPosition(self): + return self.x, self.y + + def __str__(self): + if self.isStart: + return "S" + + if self.isExit: + return "E" + + if self.isWall: + return "#" + + return " " + + def __repr__(self): + return ( + f"Cell(x={self.x}, y={self.y}, " + f"wall={self.isWall}, " + f"start={self.isStart}, " + f"exit={self.isExit})" + ) \ No newline at end of file diff --git a/volkovim/task2/core/maze.py b/volkovim/task2/core/maze.py new file mode 100644 index 0000000..6a60931 --- /dev/null +++ b/volkovim/task2/core/maze.py @@ -0,0 +1,59 @@ +from core.cell import Cell + + +class Maze: + def __init__(self, cells_map, start_cell=None, exit_cell=None): + self.cells = cells_map + self.start = start_cell + self.exit = exit_cell + + self.height = len(cells_map) + self.width = len(cells_map[0]) if self.height else 0 + + def getCell(self, x: int, y: int): + if y < 0 or y >= self.height: + return None + + if x < 0 or x >= self.width: + return None + + return self.cells[y][x] + + def getNeighbors(self, current: Cell): + reachable = [] + + top = self.getCell(current.x, current.y - 1) + right = self.getCell(current.x + 1, current.y) + bottom = self.getCell(current.x, current.y + 1) + left = self.getCell(current.x - 1, current.y) + + for candidate in (top, right, bottom, left): + if candidate is None: + continue + + if candidate.isPassable(): + reachable.append(candidate) + + return reachable + + def hasStart(self): + return self.start is not None + + def hasExit(self): + return self.exit is not None + + def size(self): + return self.width, self.height + + def __str__(self): + rows = [] + + for line in self.cells: + visual = "" + + for cell in line: + visual += str(cell) + + rows.append(visual) + + return "\n".join(rows) \ No newline at end of file diff --git a/volkovim/task2/core/search_stats.py b/volkovim/task2/core/search_stats.py new file mode 100644 index 0000000..9407acb --- /dev/null +++ b/volkovim/task2/core/search_stats.py @@ -0,0 +1,22 @@ +class SearchStats: + def __init__( + self, + strategy_name, + elapsed_ms, + visited_cells, + path_length + ): + self.strategy_name = strategy_name + self.elapsed_ms = elapsed_ms + self.visited_cells = visited_cells + self.path_length = path_length + + def __str__(self): + lines = [ + f"Strategy: {self.strategy_name}", + f"Time: {self.elapsed_ms:.3f} ms", + f"Visited: {self.visited_cells}", + f"Path length: {self.path_length}" + ] + + return "\n".join(lines) \ No newline at end of file diff --git a/volkovim/task2/experiments/benchmark.py b/volkovim/task2/experiments/benchmark.py new file mode 100644 index 0000000..e563600 --- /dev/null +++ b/volkovim/task2/experiments/benchmark.py @@ -0,0 +1,93 @@ +import csv + +from solver.maze_solver import MazeSolver + + +class BenchmarkRunner: + + def __init__( + self, + maze, + strategies, + cycles=5 + ): + self.maze = maze + self.strategies = strategies + self.cycles = cycles + + def launch(self): + + report = [] + + for strategy in self.strategies: + + solver = MazeSolver( + self.maze, + strategy + ) + + total_time = 0 + total_visited = 0 + total_path = 0 + + for _ in range(self.cycles): + + _, stats = solver.solve() + + total_time += stats.time_ms + total_visited += stats.visited_cells + total_path += stats.path_length + + report.append( + { + "maze": "", + "strategy": + strategy.__class__.__name__, + "time_ms": + round( + total_time / self.cycles, + 4 + ), + "visited_cells": + round( + total_visited / self.cycles, + 2 + ), + "path_length": + round( + total_path / self.cycles, + 2 + ) + } + ) + + return report + + def exportCSV( + self, + filename, + results + ): + + with open( + filename, + "w", + newline="", + encoding="utf-8" + ) as file: + + writer = csv.DictWriter( + file, + fieldnames=[ + "maze", + "strategy", + "time_ms", + "visited_cells", + "path_length" + ] + ) + + writer.writeheader() + + for row in results: + writer.writerow(row) \ No newline at end of file diff --git a/volkovim/task2/experiments/plots.py b/volkovim/task2/experiments/plots.py new file mode 100644 index 0000000..b0da4d2 --- /dev/null +++ b/volkovim/task2/experiments/plots.py @@ -0,0 +1,161 @@ +import csv +import matplotlib.pyplot as plt + + +class ChartBuilder: + + def __init__( + self, + csv_file + ): + self.csv_file = csv_file + + def _read(self): + + rows = [] + + with open( + self.csv_file, + "r", + encoding="utf-8" + ) as file: + + reader = csv.DictReader(file) + + for row in reader: + rows.append(row) + + return rows + + def buildTimeChart(self): + + rows = self._read() + + labels = [] + values = [] + + for row in rows: + + labels.append( + f"{row['maze']}\n" + f"{row['strategy']}" + ) + + values.append( + float( + row["time_ms"] + ) + ) + + plt.figure() + + plt.bar( + labels, + values + ) + + plt.title( + "Search Time" + ) + + plt.ylabel( + "Milliseconds" + ) + + plt.xticks( + rotation=45 + ) + + plt.tight_layout() + + plt.show() + + def buildVisitedChart(self): + + rows = self._read() + + labels = [] + values = [] + + for row in rows: + + labels.append( + f"{row['maze']}\n" + f"{row['strategy']}" + ) + + values.append( + float( + row[ + "visited_cells" + ] + ) + ) + + plt.figure() + + plt.bar( + labels, + values + ) + + plt.title( + "Visited Cells" + ) + + plt.ylabel( + "Cells" + ) + + plt.xticks( + rotation=45 + ) + + plt.tight_layout() + + plt.show() + + def buildPathChart(self): + + rows = self._read() + + labels = [] + values = [] + + for row in rows: + + labels.append( + f"{row['maze']}\n" + f"{row['strategy']}" + ) + + values.append( + float( + row[ + "path_length" + ] + ) + ) + + plt.figure() + + plt.bar( + labels, + values + ) + + plt.title( + "Path Length" + ) + + plt.ylabel( + "Cells" + ) + + plt.xticks( + rotation=45 + ) + + plt.tight_layout() + + plt.show() \ No newline at end of file diff --git a/volkovim/task2/experiments/results.csv b/volkovim/task2/experiments/results.csv new file mode 100644 index 0000000..230672b --- /dev/null +++ b/volkovim/task2/experiments/results.csv @@ -0,0 +1,16 @@ +maze,strategy,time_ms,visited_cells,path_length +small.txt,BFSStrategy,0.0676,53.0,23.0 +small.txt,DFSStrategy,0.0527,31.0,31.0 +small.txt,AStarStrategy,0.0682,46.0,23.0 +medium.txt,BFSStrategy,0.7144,717.0,431.0 +medium.txt,DFSStrategy,0.6878,737.0,431.0 +medium.txt,AStarStrategy,0.6968,591.0,431.0 +large.txt,BFSStrategy,2.103,2491.0,1171.0 +large.txt,DFSStrategy,2.7719,3019.0,1243.0 +large.txt,AStarStrategy,2.5953,1995.0,1171.0 +empty.txt,BFSStrategy,0.027,19.0,8.0 +empty.txt,DFSStrategy,0.0115,8.0,8.0 +empty.txt,AStarStrategy,0.0151,8.0,8.0 +blocked.txt,BFSStrategy,0.002,1.0,0.0 +blocked.txt,DFSStrategy,0.0013,1.0,0.0 +blocked.txt,AStarStrategy,0.0019,1.0,0.0 diff --git a/volkovim/task2/main.py b/volkovim/task2/main.py new file mode 100644 index 0000000..8f7bb39 --- /dev/null +++ b/volkovim/task2/main.py @@ -0,0 +1,70 @@ +from builders.text_file_builder import TextFileMazeBuilder + +from strategies.bfs import BFSStrategy +from strategies.dfs import DFSStrategy +from strategies.astar import AStarStrategy + +from experiments.benchmark import BenchmarkRunner +from experiments.plots import ChartBuilder + + +builder = TextFileMazeBuilder() + +maze_files = [ + "small.txt", + "medium.txt", + "large.txt", + "empty.txt", + "blocked.txt" +] + +all_results = [] + +for maze_file in maze_files: + + print() + print("Loading:", maze_file) + + maze = builder.buildFromFile( + f"mazes/{maze_file}" + ) + + runner = BenchmarkRunner( + maze, + [ + BFSStrategy(), + DFSStrategy(), + AStarStrategy() + ], + cycles=10 + ) + + results = runner.launch() + + for row in results: + row["maze"] = maze_file + + all_results.extend(results) + +runner.exportCSV( + "experiments/results.csv", + all_results +) + +print() +print("CSV created") + +charts = ChartBuilder( + "experiments/results.csv" +) + +print("Time chart...") +charts.buildTimeChart() + +print("Visited chart...") +charts.buildVisitedChart() + +print("Path chart...") +charts.buildPathChart() + +print("Done") \ No newline at end of file diff --git a/volkovim/task2/mazes/blocked.txt b/volkovim/task2/mazes/blocked.txt new file mode 100644 index 0000000..179e497 --- /dev/null +++ b/volkovim/task2/mazes/blocked.txt @@ -0,0 +1,3 @@ +########## +#S#####E## +########## \ No newline at end of file diff --git a/volkovim/task2/mazes/empty.txt b/volkovim/task2/mazes/empty.txt new file mode 100644 index 0000000..d502d43 --- /dev/null +++ b/volkovim/task2/mazes/empty.txt @@ -0,0 +1,5 @@ +########## +#S E# +# # +# # +########## \ No newline at end of file diff --git a/volkovim/task2/mazes/large.txt b/volkovim/task2/mazes/large.txt new file mode 100644 index 0000000..0ce5102 --- /dev/null +++ b/volkovim/task2/mazes/large.txt @@ -0,0 +1,100 @@ +S # # # # # # # # # # # # # # + # # ####### ### # ##### # # # # # # # # ### # # ### # # ### # ##### # ##### ### ### ### ######### # + # # # # # # # # # # # # # # # # # # # # # # # # # # + # ##### ##### ### ### ##### ##### ####### # ##### ####### # # # ####### ##### # ######### ### ### # + # # # # # # # # # # # # # # # # # # # # # # # # # + # # ##### # # ##### # # ####### # ### ##### # # # # ### ### ######### ##### # ##### # # ### ### # # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + ##### # # # ### ### ####### # # ### ######### ### ### ### ### # # # # # ### ##### # # ### # # # # # + # # # # # # # # # # # # # # # # # # # # # # # # # # + ### # ### # ##### ##### ######### ######### # ##### ### # ####### # ##### ### ####### # ### # ### # + # # # # # # # # # # # # # # # # # # # # # + # ################# # ### # # # # # ########### ############# # ##### ##### ##### # ##### ### # ### + # # # # # # # # # # # # # # # # # # # # # # + ### # ### # ### ####### # ##### ######### ### # ### ### # ####### # ### ####### ##### # ### # # # # + # # # # # # # # # # # # # # # # # # # # # # # + ######### ### ### # ### # ####### ##### # # # ####### ##### ####### # ########### ####### ######### + # # # # # # # # # # # # # # # # # # # # # +## # ####### ### ##### # ####### ### # # # # ##### ### ########### # # # ### # ##### # # ### ##### # + # # # # # # # # # # # # # # # # # # # # # # # # # + ### # # ########### ######### # ### # # ### ### ####### ### # # # # ##### # ### ##### # # ### ### # + # # # # # # # # # # # # # # # # # # # # # # # # # # # +## ##### # # # # # ### # ### ##### # # # ##### # ### # ### # # # # # # # ##### ### ####### # ### ### + # # # # # # # # # # # # # # # # # # # # # # # # # # # # + ##### ### # # # # # ######### ### ### ### # ##### ##### ### # ##### # ######### ############# ### # + # # # # # # # # # # # # # # # # # # # # # # # # + # ##### # # ### ### ##### # ### ### ##### # # ### # ##### ##### ### ### # ##### ### # # ### # # ### + # # # # # # # # # # # # # # # # # # # # # # # # # # + # # # ####### ####### ### ### ######### ### # # ##### # ### ########### ### # ### ####### ### # # # + # # # # # # # # # # # # # # # # # # # # # # + ################### # # # # ### # # # ######### # # ### ############### # ### ##### ### ### ##### # + # # # # # # # # # # # # # # # # # # # # # + ##### # # ### # # ### # ####### # # ##### # # ### ##### # ####### # # # ######### # ######### ##### + # # # # # # # # # # # # # # # # # # # # # # # # # # # # +#### # # ### # # ### # ### ####### ##### # # ### # # ##### # # ####### # # # ##### ### # # ####### # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +## # # # # ### ### # ### ### # # # ### # ####### ### # ########### # ##### ##### # # ### ### ##### # + # # # # # # # # # # # # # # # # # # # # # # # # # # + ########### # # ########### ### # # # # # ### # # ### # ####### # ######### # # ### # ######### ### + # # # # # # # # # # # # # # # # # # # # # # # # +######## # # # ### # ########### # # ####### ### # # # ####### ### # # # ### # ### ######### # # # # + # # # # # # # # # # # # # # # # # # # # # # # + ##### ##### ### # # # ####### ### ### # # # # ############# # ##### # ### ##### ######### ### ### # + # # # # # # # # # # # # # # # # # # # # # # # # # + ### ### # ### # ##### # # # ### # # # ### # ### ### # # # # ########### ####### # ##### ####### ### + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +## ####### # ##### # ### ### # # # # # # # ####### ### # # # # # # # # ### # # ##### # # # # ##### # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + ### # # # ##### ####### # ### # ### ### ####### # # ### ####### ### ####### # ### ####### # # # # # + # # # # # # # # # # # # # # # # # # # # # # # # + # ##### ##### # # ### ### # ######### ### ### ### ### ####### ##### # ######### ##### # ### # ### # + # # # # # # # # # # # # # # # # # # # # # # # # # + # # ####### # ##### ### # # # # # ### ### # ### ### ######### # ####### # ####### ### ######### ### + # # # # # # # # # # # # # # # # # # # # # # # # # # # + ######### # ### ### # # # # # # ####### ##### ### # # ##### # ### # # ####### # # # ### # # # # # # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # +## # # # ### ##### # ######### # # ####### ### ### # ##### ######### # # # ####### ### # # # # ### # + # # # # # # # # # # # # # # # # # # # # # # # + ### ######### ####### # # ######### # # ### ### ### ##### ### # ########### ######### # # # ### ### + # # # # # # # # # # # # # # # # # # # # # # # # +## ######### # ### # ####### ### # ### ### # # ####### # ### ##### ### # # ### # ### ##### # # ### # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + # # ### ### ### # # # ##### # ### # ### ### # # # ####### ##### ### ### # ##### # ##### # ### # # # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + # # # ### ### # ### # ######### # ######### # ### # # # ### ##### ### # ### # # ### # ##### ##### # + # # # # # # # # # # # # # # # # # # # # # # # # # # + ##### # ### ##### ####### ### # ##### # # # ### ### # ##### # # ### # ####### ##### # # # ### # # # + # # # # # # # # # # # # # # # # # # # # # # # # # # + ### # ### ######### # ##### ### # ### # # # ############# ### ### # ##### # ### ######### # ### # # + # # # # # # # # # # # # # # # # # # # # # # # # +## # # # ### ##### # ##### # ### ### # # # ### # # ######### # # ##### ### ####### ### # ######### # + # # # # # # # # # # # # # # # # # # # # # # # # # # # + # ############### ### ####### ### # ### ####### # # # # ######### # ### # # # ##### ##### # # ##### + # # # # # # # # # # # # # # # # # # # # # # + ##### # # ### # ### ######### # ######### # # ### # # ####### # ########### # # # ##### ####### # # + # # # # # # # # # # # # # # # # # # # # # # # +## # ####### ### # # # ############# ### ### ### ### ##### # # ### ########### ##### # ### ### # # # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # + ### ### # # # ##### ### # # ##### ####### # # ### ### # # ##### # # ####### ##### # # # # # ##### # + # # # # # # # # # # # # # # # # # # # # # # # # # # # +###### ##### ### # ### ### # # ########### # # # ##### # ### ##### # # ### ######### ### ##### # ### + # # # # # # # # # # # # # # # # # # # # # # # + # # # # # ### ####### ######### # # ######### ### # ##### ##### ##### ### # # # # # # ### ####### # + # # # # # # # # # # # # # # # # # # # # # # # # +#### # ##### # # # ##### ### # ### # ##### ### # ##### ### ######### ### ### ########### # # ##### # + # # # # # # # # # # # # # # # # # # # # # # # # # # # + ######### ##### # ####### # # # ##### # ### # # # # ####### ##### # # ### ### # # # # ### # # ### # + # # # # # # # # # # # # # # # # # # # # # # # # # # + # ### # ##### # # # ############### ### ######### ### # ##### # # ######### # ### # ### # # # # ### + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + # # # ####### # ### # ##### ##### # # ### # ### # # ##### # ### # # # ####### # ##### # # # ### # # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # + ##### # ### # # # ##### ##### # # # ### ### # # # # ######### # ########### # # ##### ####### # # # + # # # # # # # # # # # # # # # # # # # # # # # # # # # +## # # # # ##### # ### ####### ########### ### # # ####### # # ##### # # # ### ##### ##### # ##### # + # # # # # # # # # # # # # # # # # # # # # # + ### ##### ########### # ### # # ####### # # # ############# # ### ### # ### ######### # ### ### # # + # # # # # # # # # # # # # # # # # # # # # # # # # + ##### # # # ##### ####### # ### # # ##### # ### ####### ######### # ########### ### # ######### # # + # # # # # # # # # +################################################################################################## E \ No newline at end of file diff --git a/volkovim/task2/mazes/medium.txt b/volkovim/task2/mazes/medium.txt new file mode 100644 index 0000000..6eba40a --- /dev/null +++ b/volkovim/task2/mazes/medium.txt @@ -0,0 +1,50 @@ +S # # # # + ####### ### # # ########### ##### # ##### ##### # + # # # # # # # # # # +## # # ### ####### ##### ####### # ### ######### # + # # # # # # # # # # # # # + ####### # # # # ### ##### # ### ### # # # # ### # + # # # # # # # # # # # # # # # # # + # ### # ### # ### ### # # ### ### ####### # # ### + # # # # # # # # # # # # # # + # # ############# # ### ### # ######### # # ### # + # # # # # # # # # + ########### ########### # ##### ### ### # # # ### + # # # # # # # # # # # # # # + # # ####### # ### # ##### ### ### ### ### # # # # + # # # # # # # # # # # # # # # # +###### ### ### # # # # # # # ### ### ##### # # # # + # # # # # # # # # # # # # # # + ### # # ######### ### # # # # ####### ##### # # # + # # # # # # # # # # # # # # + ### ### # ##### # # ######### # # # # ##### # # # + # # # # # # # # # # # # +## # ######### # # ### ### # ### ######### ##### # + # # # # # # # # # # # # + ##### # ### # ### ##### # # # ####### ##### # # # + # # # # # # # # # # # # # # # +## # ##### # # ##### ##### ### ### # ### # # # ### + # # # # # # # # # # # # # + ##### # ### # # ##### ### # ### ######### # ##### + # # # # # # # # # # # + # ####### ######### ### ####### # # ####### ### # + # # # # # # # # # # # # # # + # # ####### # # ##### # # ### ### # # # # ##### # + # # # # # # # # # # # # # # # # + # ##### # ####### # # # # # ### # ### # # # ### # + # # # # # # # # # # # # # # # + # ########### # ### ####### ### # ### # # # # # # + # # # # # # # # # # # # # + # # ####### ##### ########### ##### # # ##### # # + # # # # # # # # # # # + ### ### ### # ############### # # # ##### ### ### + # # # # # # # # # # # # # # + # ### ### # ### ##### # # # # # ##### # ### # # # + # # # # # # # # # # # # # # + # # ####### # ### ######### ######### ### # # # # + # # # # # # # # # # # # # # # + ##### # ####### # # # ### # # # # # ### ### # # # + # # # # # # # # # # # # # # # +## ### ##### ####### ### # # ### ##### # ### ### # + # # # # +################################################ E \ No newline at end of file diff --git a/volkovim/task2/mazes/small.txt b/volkovim/task2/mazes/small.txt new file mode 100644 index 0000000..439365c --- /dev/null +++ b/volkovim/task2/mazes/small.txt @@ -0,0 +1,10 @@ +S # + ### ### # + # # # +## # # ### + # # # + ####### # + # # +## # ##### + +######## E \ No newline at end of file diff --git a/volkovim/task2/observer/console_view.py b/volkovim/task2/observer/console_view.py new file mode 100644 index 0000000..05f31fc --- /dev/null +++ b/volkovim/task2/observer/console_view.py @@ -0,0 +1,64 @@ +from observer.observer import Observer + + +class ConsoleView(Observer): + + def update(self, event): + + event_type = event.get("type") + + if event_type == "maze_loaded": + print("[VIEW] Maze loaded") + + elif event_type == "search_started": + print("[VIEW] Search started") + + elif event_type == "search_finished": + print("[VIEW] Search completed") + + elif event_type == "path_found": + print( + f"[VIEW] Path length: " + f"{event.get('length')}" + ) + + def render( + self, + maze, + path=None + ): + route_marks = set() + + if path: + for cell in path: + route_marks.add( + cell.getPosition() + ) + + screen = [] + + for row in maze.cells: + + visual_row = "" + + for cell in row: + + position = cell.getPosition() + + if ( + position in route_marks + and not cell.isStart + and not cell.isExit + ): + visual_row += "*" + + else: + visual_row += str(cell) + + screen.append( + visual_row + ) + + print( + "\n".join(screen) + ) \ No newline at end of file diff --git a/volkovim/task2/observer/observer.py b/volkovim/task2/observer/observer.py new file mode 100644 index 0000000..3a8886f --- /dev/null +++ b/volkovim/task2/observer/observer.py @@ -0,0 +1,8 @@ +from abc import ABC, abstractmethod + + +class Observer(ABC): + + @abstractmethod + def update(self, event): + pass \ No newline at end of file diff --git a/volkovim/task2/report/report_2.docx b/volkovim/task2/report/report_2.docx new file mode 100644 index 0000000000000000000000000000000000000000..1143cd7601c18256407683097ed246eb363a90c8 GIT binary patch literal 126126 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 |x*{zT%=lEwBk8R$iJU-u>Im=r!| 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 literal 0 HcmV?d00001 diff --git a/volkovim/task2/requirements.txt b/volkovim/task2/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/volkovim/task2/solver/maze_solver.py b/volkovim/task2/solver/maze_solver.py new file mode 100644 index 0000000..cbee4ca --- /dev/null +++ b/volkovim/task2/solver/maze_solver.py @@ -0,0 +1,73 @@ +import time + +from solver.search_stats import SearchStats + + +class MazeSolver: + + def __init__( + self, + maze, + strategy + ): + self.maze = maze + self.strategy = strategy + self.observers = [] + + def addObserver( + self, + observer + ): + self.observers.append( + observer + ) + + def notify( + self, + event + ): + for observer in self.observers: + observer.update(event) + + def setStrategy( + self, + strategy + ): + self.strategy = strategy + + def solve(self): + + self.notify( + "search_started" + ) + + start_time = time.perf_counter() + + path, visited_cells = ( + self.strategy.findPath( + self.maze, + self.maze.start, + self.maze.exit + ) + ) + + finish_time = ( + time.perf_counter() + ) + + elapsed_ms = ( + finish_time + - start_time + ) * 1000 + + stats = SearchStats( + elapsed_ms, + visited_cells, + len(path) + ) + + self.notify( + "search_finished" + ) + + return path, stats \ No newline at end of file diff --git a/volkovim/task2/solver/search_stats.py b/volkovim/task2/solver/search_stats.py new file mode 100644 index 0000000..9553063 --- /dev/null +++ b/volkovim/task2/solver/search_stats.py @@ -0,0 +1,22 @@ +class SearchStats: + + def __init__( + self, + time_ms, + visited_cells, + path_length + ): + self.time_ms = time_ms + self.visited_cells = visited_cells + self.path_length = path_length + + def __str__(self): + + return ( + f"Time: " + f"{self.time_ms:.4f} ms | " + f"Visited: " + f"{self.visited_cells} | " + f"Path length: " + f"{self.path_length}" + ) \ No newline at end of file diff --git a/volkovim/task2/strategies/astar.py b/volkovim/task2/strategies/astar.py new file mode 100644 index 0000000..0907a75 --- /dev/null +++ b/volkovim/task2/strategies/astar.py @@ -0,0 +1,107 @@ +import heapq +from itertools import count +from strategies.strategy import PathFindingStrategy + + +class AStarStrategy(PathFindingStrategy): + + def _estimate(self, current, target): + return ( + abs(current.x - target.x) + + abs(current.y - target.y) + ) + + def findPath(self, maze, start, exit): + + frontier = [] + + sequence = count() + + heapq.heappush( + frontier, + ( + self._estimate(start, exit), + next(sequence), + 0, + start + ) + ) + + ancestry = {} + + travel_cost = { + start.getPosition(): 0 + } + + explored = set() + + explored_count = 0 + + while frontier: + + _, _, spent, current = heapq.heappop( + frontier + ) + + current_mark = current.getPosition() + + if current_mark in explored: + continue + + explored.add(current_mark) + explored_count += 1 + + if current == exit: + break + + for neighbor in maze.getNeighbors(current): + + mark = neighbor.getPosition() + + new_cost = spent + 1 + + if ( + mark not in travel_cost + or new_cost < travel_cost[mark] + ): + + travel_cost[mark] = new_cost + ancestry[mark] = current + + priority = ( + new_cost + + self._estimate( + neighbor, + exit + ) + ) + + heapq.heappush( + frontier, + ( + priority, + next(sequence), + new_cost, + neighbor + ) + ) + + if ( + exit.getPosition() not in ancestry + and exit != start + ): + return [], explored_count + + route = [] + cursor = exit + + while cursor != start: + route.append(cursor) + cursor = ancestry[ + cursor.getPosition() + ] + + route.append(start) + route.reverse() + + return route, explored_count \ No newline at end of file diff --git a/volkovim/task2/strategies/bfs.py b/volkovim/task2/strategies/bfs.py new file mode 100644 index 0000000..0860126 --- /dev/null +++ b/volkovim/task2/strategies/bfs.py @@ -0,0 +1,51 @@ +from collections import deque +from strategies.strategy import PathFindingStrategy + + +class BFSStrategy(PathFindingStrategy): + + def findPath(self, maze, start, exit): + + frontier = deque([start]) + + visited = { + start.getPosition() + } + + ancestry = {} + + explored_count = 0 + + while frontier: + + current = frontier.popleft() + explored_count += 1 + + if current == exit: + break + + for neighbor in maze.getNeighbors(current): + + mark = neighbor.getPosition() + + if mark in visited: + continue + + visited.add(mark) + ancestry[mark] = current + frontier.append(neighbor) + + if exit.getPosition() not in visited: + return [], explored_count + + route = [] + cursor = exit + + while cursor != start: + route.append(cursor) + cursor = ancestry[cursor.getPosition()] + + route.append(start) + route.reverse() + + return route, explored_count \ No newline at end of file diff --git a/volkovim/task2/strategies/dfs.py b/volkovim/task2/strategies/dfs.py new file mode 100644 index 0000000..3b12bdb --- /dev/null +++ b/volkovim/task2/strategies/dfs.py @@ -0,0 +1,52 @@ +from strategies.strategy import PathFindingStrategy + + +class DFSStrategy(PathFindingStrategy): + + def findPath(self, maze, start, exit): + + frontier = [start] + + visited = { + start.getPosition() + } + + ancestry = {} + + explored_count = 0 + + while frontier: + + current = frontier.pop() + explored_count += 1 + + if current == exit: + break + + neighbors = maze.getNeighbors(current) + + for neighbor in reversed(neighbors): + + point = neighbor.getPosition() + + if point in visited: + continue + + visited.add(point) + ancestry[point] = current + frontier.append(neighbor) + + if exit.getPosition() not in visited: + return [], explored_count + + route = [] + cursor = exit + + while cursor != start: + route.append(cursor) + cursor = ancestry[cursor.getPosition()] + + route.append(start) + route.reverse() + + return route, explored_count \ No newline at end of file diff --git a/volkovim/task2/strategies/dijkstra.py b/volkovim/task2/strategies/dijkstra.py new file mode 100644 index 0000000..e69de29 diff --git a/volkovim/task2/strategies/strategy.py b/volkovim/task2/strategies/strategy.py new file mode 100644 index 0000000..ef3376e --- /dev/null +++ b/volkovim/task2/strategies/strategy.py @@ -0,0 +1,8 @@ +from abc import ABC, abstractmethod + + +class PathFindingStrategy(ABC): + + @abstractmethod + def findPath(self, maze, start, exit): + pass \ No newline at end of file -- 2.43.0