Add 16
This commit is contained in:
949
16/16.ipynb
Normal file
949
16/16.ipynb
Normal file
@@ -0,0 +1,949 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 10,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"([(1, 13),\n",
|
||||||
|
" (1, 12),\n",
|
||||||
|
" (1, 11),\n",
|
||||||
|
" (2, 11),\n",
|
||||||
|
" (3, 11),\n",
|
||||||
|
" (4, 11),\n",
|
||||||
|
" (5, 11),\n",
|
||||||
|
" (5, 10),\n",
|
||||||
|
" (5, 9),\n",
|
||||||
|
" (5, 8),\n",
|
||||||
|
" (5, 7),\n",
|
||||||
|
" (6, 7),\n",
|
||||||
|
" (7, 7),\n",
|
||||||
|
" (8, 7),\n",
|
||||||
|
" (9, 7),\n",
|
||||||
|
" (9, 6),\n",
|
||||||
|
" (9, 5),\n",
|
||||||
|
" (10, 5),\n",
|
||||||
|
" (11, 5),\n",
|
||||||
|
" (11, 4),\n",
|
||||||
|
" (11, 3),\n",
|
||||||
|
" (10, 3),\n",
|
||||||
|
" (9, 3),\n",
|
||||||
|
" (9, 2),\n",
|
||||||
|
" (9, 1),\n",
|
||||||
|
" (10, 1),\n",
|
||||||
|
" (11, 1),\n",
|
||||||
|
" (12, 1),\n",
|
||||||
|
" (13, 1)],\n",
|
||||||
|
" 28)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 10,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# Rechecking the imports and retrying the execution\n",
|
||||||
|
"\n",
|
||||||
|
"# Importing NetworkX again to ensure proper initialization\n",
|
||||||
|
"import networkx as nx\n",
|
||||||
|
"\n",
|
||||||
|
"# Retry defining and executing the code\n",
|
||||||
|
"with open('testinput','r') as infile:\n",
|
||||||
|
" ascii_map = infile.read()\n",
|
||||||
|
"\n",
|
||||||
|
"def parse_ascii_map(ascii_map):\n",
|
||||||
|
" graph = nx.DiGraph() # Directed graph for flexibility with edge weights\n",
|
||||||
|
" rows = ascii_map.strip().split(\"\\n\")\n",
|
||||||
|
" height, width = len(rows), len(rows[0])\n",
|
||||||
|
" directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] # Up, Down, Left, Right\n",
|
||||||
|
"\n",
|
||||||
|
" start, end = None, None\n",
|
||||||
|
" for y, row in enumerate(rows):\n",
|
||||||
|
" for x, char in enumerate(row):\n",
|
||||||
|
" if char != '#': # Not a wall\n",
|
||||||
|
" graph.add_node((x, y))\n",
|
||||||
|
" if char == 'S':\n",
|
||||||
|
" start = (x, y)\n",
|
||||||
|
" elif char == 'E':\n",
|
||||||
|
" end = (x, y)\n",
|
||||||
|
"\n",
|
||||||
|
" # Add edges for neighbors\n",
|
||||||
|
" for dx, dy in directions:\n",
|
||||||
|
" nx_new, ny_new = x + dx, y + dy\n",
|
||||||
|
" if 0 <= nx_new < width and 0 <= ny_new < height and rows[ny_new][nx_new] != '#':\n",
|
||||||
|
" graph.add_edge((x, y), (nx_new, ny_new), weight=1)\n",
|
||||||
|
" return graph, start, end\n",
|
||||||
|
"\n",
|
||||||
|
"def find_shortest_path(graph, start, end):\n",
|
||||||
|
" try:\n",
|
||||||
|
" path = nx.shortest_path(graph, source=start, target=end, weight='weight')\n",
|
||||||
|
" cost = nx.shortest_path_length(graph, source=start, target=end, weight='weight')\n",
|
||||||
|
" return path, cost\n",
|
||||||
|
" except nx.NetworkXNoPath:\n",
|
||||||
|
" return None, float('inf')\n",
|
||||||
|
"\n",
|
||||||
|
"# Parse and solve\n",
|
||||||
|
"graph, start, end = parse_ascii_map(ascii_map)\n",
|
||||||
|
"path, cost = find_shortest_path(graph, start, end)\n",
|
||||||
|
"\n",
|
||||||
|
"path, cost\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 12,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"([(1, 139, 'E'),\n",
|
||||||
|
" (2, 139, 'E'),\n",
|
||||||
|
" (3, 139, 'E'),\n",
|
||||||
|
" (3, 139, 'N'),\n",
|
||||||
|
" (3, 138, 'N'),\n",
|
||||||
|
" (3, 137, 'N'),\n",
|
||||||
|
" (3, 137, 'E'),\n",
|
||||||
|
" (4, 137, 'E'),\n",
|
||||||
|
" (5, 137, 'E'),\n",
|
||||||
|
" (5, 137, 'S'),\n",
|
||||||
|
" (5, 138, 'S'),\n",
|
||||||
|
" (5, 139, 'S'),\n",
|
||||||
|
" (5, 139, 'E'),\n",
|
||||||
|
" (6, 139, 'E'),\n",
|
||||||
|
" (7, 139, 'E'),\n",
|
||||||
|
" (7, 139, 'N'),\n",
|
||||||
|
" (7, 138, 'N'),\n",
|
||||||
|
" (7, 137, 'N'),\n",
|
||||||
|
" (7, 137, 'E'),\n",
|
||||||
|
" (8, 137, 'E'),\n",
|
||||||
|
" (9, 137, 'E'),\n",
|
||||||
|
" (10, 137, 'E'),\n",
|
||||||
|
" (11, 137, 'E'),\n",
|
||||||
|
" (11, 137, 'S'),\n",
|
||||||
|
" (11, 138, 'S'),\n",
|
||||||
|
" (11, 139, 'S'),\n",
|
||||||
|
" (11, 139, 'E'),\n",
|
||||||
|
" (12, 139, 'E'),\n",
|
||||||
|
" (13, 139, 'E'),\n",
|
||||||
|
" (13, 139, 'N'),\n",
|
||||||
|
" (13, 138, 'N'),\n",
|
||||||
|
" (13, 137, 'N'),\n",
|
||||||
|
" (13, 137, 'E'),\n",
|
||||||
|
" (14, 137, 'E'),\n",
|
||||||
|
" (15, 137, 'E'),\n",
|
||||||
|
" (15, 137, 'S'),\n",
|
||||||
|
" (15, 138, 'S'),\n",
|
||||||
|
" (15, 139, 'S'),\n",
|
||||||
|
" (15, 139, 'E'),\n",
|
||||||
|
" (16, 139, 'E'),\n",
|
||||||
|
" (17, 139, 'E'),\n",
|
||||||
|
" (17, 139, 'N'),\n",
|
||||||
|
" (17, 138, 'N'),\n",
|
||||||
|
" (17, 137, 'N'),\n",
|
||||||
|
" (17, 136, 'N'),\n",
|
||||||
|
" (17, 135, 'N'),\n",
|
||||||
|
" (17, 134, 'N'),\n",
|
||||||
|
" (17, 133, 'N'),\n",
|
||||||
|
" (17, 133, 'E'),\n",
|
||||||
|
" (18, 133, 'E'),\n",
|
||||||
|
" (19, 133, 'E'),\n",
|
||||||
|
" (20, 133, 'E'),\n",
|
||||||
|
" (21, 133, 'E'),\n",
|
||||||
|
" (22, 133, 'E'),\n",
|
||||||
|
" (23, 133, 'E'),\n",
|
||||||
|
" (24, 133, 'E'),\n",
|
||||||
|
" (25, 133, 'E'),\n",
|
||||||
|
" (26, 133, 'E'),\n",
|
||||||
|
" (27, 133, 'E'),\n",
|
||||||
|
" (28, 133, 'E'),\n",
|
||||||
|
" (29, 133, 'E'),\n",
|
||||||
|
" (30, 133, 'E'),\n",
|
||||||
|
" (31, 133, 'E'),\n",
|
||||||
|
" (32, 133, 'E'),\n",
|
||||||
|
" (33, 133, 'E'),\n",
|
||||||
|
" (34, 133, 'E'),\n",
|
||||||
|
" (35, 133, 'E'),\n",
|
||||||
|
" (35, 133, 'S'),\n",
|
||||||
|
" (35, 134, 'S'),\n",
|
||||||
|
" (35, 135, 'S'),\n",
|
||||||
|
" (35, 136, 'S'),\n",
|
||||||
|
" (35, 137, 'S'),\n",
|
||||||
|
" (35, 138, 'S'),\n",
|
||||||
|
" (35, 139, 'S'),\n",
|
||||||
|
" (35, 139, 'E'),\n",
|
||||||
|
" (36, 139, 'E'),\n",
|
||||||
|
" (37, 139, 'E'),\n",
|
||||||
|
" (37, 139, 'N'),\n",
|
||||||
|
" (37, 138, 'N'),\n",
|
||||||
|
" (37, 137, 'N'),\n",
|
||||||
|
" (37, 137, 'E'),\n",
|
||||||
|
" (38, 137, 'E'),\n",
|
||||||
|
" (39, 137, 'E'),\n",
|
||||||
|
" (39, 137, 'N'),\n",
|
||||||
|
" (39, 136, 'N'),\n",
|
||||||
|
" (39, 135, 'N'),\n",
|
||||||
|
" (39, 134, 'N'),\n",
|
||||||
|
" (39, 133, 'N'),\n",
|
||||||
|
" (39, 133, 'E'),\n",
|
||||||
|
" (40, 133, 'E'),\n",
|
||||||
|
" (41, 133, 'E'),\n",
|
||||||
|
" (41, 133, 'S'),\n",
|
||||||
|
" (41, 134, 'S'),\n",
|
||||||
|
" (41, 135, 'S'),\n",
|
||||||
|
" (41, 136, 'S'),\n",
|
||||||
|
" (41, 137, 'S'),\n",
|
||||||
|
" (41, 138, 'S'),\n",
|
||||||
|
" (41, 139, 'S'),\n",
|
||||||
|
" (41, 139, 'E'),\n",
|
||||||
|
" (42, 139, 'E'),\n",
|
||||||
|
" (43, 139, 'E'),\n",
|
||||||
|
" (44, 139, 'E'),\n",
|
||||||
|
" (45, 139, 'E'),\n",
|
||||||
|
" (45, 139, 'N'),\n",
|
||||||
|
" (45, 138, 'N'),\n",
|
||||||
|
" (45, 137, 'N'),\n",
|
||||||
|
" (45, 137, 'E'),\n",
|
||||||
|
" (46, 137, 'E'),\n",
|
||||||
|
" (47, 137, 'E'),\n",
|
||||||
|
" (48, 137, 'E'),\n",
|
||||||
|
" (49, 137, 'E'),\n",
|
||||||
|
" (49, 137, 'N'),\n",
|
||||||
|
" (49, 136, 'N'),\n",
|
||||||
|
" (49, 135, 'N'),\n",
|
||||||
|
" (49, 134, 'N'),\n",
|
||||||
|
" (49, 133, 'N'),\n",
|
||||||
|
" (49, 133, 'E'),\n",
|
||||||
|
" (50, 133, 'E'),\n",
|
||||||
|
" (51, 133, 'E'),\n",
|
||||||
|
" (52, 133, 'E'),\n",
|
||||||
|
" (53, 133, 'E'),\n",
|
||||||
|
" (53, 133, 'S'),\n",
|
||||||
|
" (53, 134, 'S'),\n",
|
||||||
|
" (53, 135, 'S'),\n",
|
||||||
|
" (53, 136, 'S'),\n",
|
||||||
|
" (53, 137, 'S'),\n",
|
||||||
|
" (53, 138, 'S'),\n",
|
||||||
|
" (53, 139, 'S'),\n",
|
||||||
|
" (53, 139, 'E'),\n",
|
||||||
|
" (54, 139, 'E'),\n",
|
||||||
|
" (55, 139, 'E'),\n",
|
||||||
|
" (56, 139, 'E'),\n",
|
||||||
|
" (57, 139, 'E'),\n",
|
||||||
|
" (57, 139, 'N'),\n",
|
||||||
|
" (57, 138, 'N'),\n",
|
||||||
|
" (57, 137, 'N'),\n",
|
||||||
|
" (57, 136, 'N'),\n",
|
||||||
|
" (57, 135, 'N'),\n",
|
||||||
|
" (57, 135, 'E'),\n",
|
||||||
|
" (58, 135, 'E'),\n",
|
||||||
|
" (59, 135, 'E'),\n",
|
||||||
|
" (60, 135, 'E'),\n",
|
||||||
|
" (61, 135, 'E'),\n",
|
||||||
|
" (61, 135, 'S'),\n",
|
||||||
|
" (61, 136, 'S'),\n",
|
||||||
|
" (61, 137, 'S'),\n",
|
||||||
|
" (61, 137, 'W'),\n",
|
||||||
|
" (60, 137, 'W'),\n",
|
||||||
|
" (59, 137, 'W'),\n",
|
||||||
|
" (59, 137, 'S'),\n",
|
||||||
|
" (59, 138, 'S'),\n",
|
||||||
|
" (59, 139, 'S'),\n",
|
||||||
|
" (59, 139, 'E'),\n",
|
||||||
|
" (60, 139, 'E'),\n",
|
||||||
|
" (61, 139, 'E'),\n",
|
||||||
|
" (62, 139, 'E'),\n",
|
||||||
|
" (63, 139, 'E'),\n",
|
||||||
|
" (64, 139, 'E'),\n",
|
||||||
|
" (65, 139, 'E'),\n",
|
||||||
|
" (66, 139, 'E'),\n",
|
||||||
|
" (67, 139, 'E'),\n",
|
||||||
|
" (68, 139, 'E'),\n",
|
||||||
|
" (69, 139, 'E'),\n",
|
||||||
|
" (69, 139, 'N'),\n",
|
||||||
|
" (69, 138, 'N'),\n",
|
||||||
|
" (69, 137, 'N'),\n",
|
||||||
|
" (69, 137, 'E'),\n",
|
||||||
|
" (70, 137, 'E'),\n",
|
||||||
|
" (71, 137, 'E'),\n",
|
||||||
|
" (72, 137, 'E'),\n",
|
||||||
|
" (73, 137, 'E'),\n",
|
||||||
|
" (74, 137, 'E'),\n",
|
||||||
|
" (75, 137, 'E'),\n",
|
||||||
|
" (76, 137, 'E'),\n",
|
||||||
|
" (77, 137, 'E'),\n",
|
||||||
|
" (78, 137, 'E'),\n",
|
||||||
|
" (79, 137, 'E'),\n",
|
||||||
|
" (79, 137, 'S'),\n",
|
||||||
|
" (79, 138, 'S'),\n",
|
||||||
|
" (79, 139, 'S'),\n",
|
||||||
|
" (79, 139, 'E'),\n",
|
||||||
|
" (80, 139, 'E'),\n",
|
||||||
|
" (81, 139, 'E'),\n",
|
||||||
|
" (82, 139, 'E'),\n",
|
||||||
|
" (83, 139, 'E'),\n",
|
||||||
|
" (84, 139, 'E'),\n",
|
||||||
|
" (85, 139, 'E'),\n",
|
||||||
|
" (86, 139, 'E'),\n",
|
||||||
|
" (87, 139, 'E'),\n",
|
||||||
|
" (88, 139, 'E'),\n",
|
||||||
|
" (89, 139, 'E'),\n",
|
||||||
|
" (90, 139, 'E'),\n",
|
||||||
|
" (91, 139, 'E'),\n",
|
||||||
|
" (92, 139, 'E'),\n",
|
||||||
|
" (93, 139, 'E'),\n",
|
||||||
|
" (94, 139, 'E'),\n",
|
||||||
|
" (95, 139, 'E'),\n",
|
||||||
|
" (96, 139, 'E'),\n",
|
||||||
|
" (97, 139, 'E'),\n",
|
||||||
|
" (98, 139, 'E'),\n",
|
||||||
|
" (99, 139, 'E'),\n",
|
||||||
|
" (100, 139, 'E'),\n",
|
||||||
|
" (101, 139, 'E'),\n",
|
||||||
|
" (102, 139, 'E'),\n",
|
||||||
|
" (103, 139, 'E'),\n",
|
||||||
|
" (104, 139, 'E'),\n",
|
||||||
|
" (105, 139, 'E'),\n",
|
||||||
|
" (106, 139, 'E'),\n",
|
||||||
|
" (107, 139, 'E'),\n",
|
||||||
|
" (108, 139, 'E'),\n",
|
||||||
|
" (109, 139, 'E'),\n",
|
||||||
|
" (110, 139, 'E'),\n",
|
||||||
|
" (111, 139, 'E'),\n",
|
||||||
|
" (112, 139, 'E'),\n",
|
||||||
|
" (113, 139, 'E'),\n",
|
||||||
|
" (113, 139, 'N'),\n",
|
||||||
|
" (113, 138, 'N'),\n",
|
||||||
|
" (113, 137, 'N'),\n",
|
||||||
|
" (113, 136, 'N'),\n",
|
||||||
|
" (113, 135, 'N'),\n",
|
||||||
|
" (113, 134, 'N'),\n",
|
||||||
|
" (113, 133, 'N'),\n",
|
||||||
|
" (113, 132, 'N'),\n",
|
||||||
|
" (113, 131, 'N'),\n",
|
||||||
|
" (113, 130, 'N'),\n",
|
||||||
|
" (113, 129, 'N'),\n",
|
||||||
|
" (113, 128, 'N'),\n",
|
||||||
|
" (113, 127, 'N'),\n",
|
||||||
|
" (113, 126, 'N'),\n",
|
||||||
|
" (113, 125, 'N'),\n",
|
||||||
|
" (113, 124, 'N'),\n",
|
||||||
|
" (113, 123, 'N'),\n",
|
||||||
|
" (113, 123, 'E'),\n",
|
||||||
|
" (114, 123, 'E'),\n",
|
||||||
|
" (115, 123, 'E'),\n",
|
||||||
|
" (115, 123, 'N'),\n",
|
||||||
|
" (115, 122, 'N'),\n",
|
||||||
|
" (115, 121, 'N'),\n",
|
||||||
|
" (115, 121, 'E'),\n",
|
||||||
|
" (116, 121, 'E'),\n",
|
||||||
|
" (117, 121, 'E'),\n",
|
||||||
|
" (118, 121, 'E'),\n",
|
||||||
|
" (119, 121, 'E'),\n",
|
||||||
|
" (120, 121, 'E'),\n",
|
||||||
|
" (121, 121, 'E'),\n",
|
||||||
|
" (121, 121, 'N'),\n",
|
||||||
|
" (121, 120, 'N'),\n",
|
||||||
|
" (121, 119, 'N'),\n",
|
||||||
|
" (121, 119, 'E'),\n",
|
||||||
|
" (122, 119, 'E'),\n",
|
||||||
|
" (123, 119, 'E'),\n",
|
||||||
|
" (123, 119, 'N'),\n",
|
||||||
|
" (123, 118, 'N'),\n",
|
||||||
|
" (123, 117, 'N'),\n",
|
||||||
|
" (123, 116, 'N'),\n",
|
||||||
|
" (123, 115, 'N'),\n",
|
||||||
|
" (123, 115, 'W'),\n",
|
||||||
|
" (122, 115, 'W'),\n",
|
||||||
|
" (121, 115, 'W'),\n",
|
||||||
|
" (121, 115, 'N'),\n",
|
||||||
|
" (121, 114, 'N'),\n",
|
||||||
|
" (121, 113, 'N'),\n",
|
||||||
|
" (121, 112, 'N'),\n",
|
||||||
|
" (121, 111, 'N'),\n",
|
||||||
|
" (121, 110, 'N'),\n",
|
||||||
|
" (121, 109, 'N'),\n",
|
||||||
|
" (121, 108, 'N'),\n",
|
||||||
|
" (121, 107, 'N'),\n",
|
||||||
|
" (121, 107, 'W'),\n",
|
||||||
|
" (120, 107, 'W'),\n",
|
||||||
|
" (119, 107, 'W'),\n",
|
||||||
|
" (119, 107, 'N'),\n",
|
||||||
|
" (119, 106, 'N'),\n",
|
||||||
|
" (119, 105, 'N'),\n",
|
||||||
|
" (119, 104, 'N'),\n",
|
||||||
|
" (119, 103, 'N'),\n",
|
||||||
|
" (119, 103, 'W'),\n",
|
||||||
|
" (118, 103, 'W'),\n",
|
||||||
|
" (117, 103, 'W'),\n",
|
||||||
|
" (117, 103, 'S'),\n",
|
||||||
|
" (117, 104, 'S'),\n",
|
||||||
|
" (117, 105, 'S'),\n",
|
||||||
|
" (117, 105, 'W'),\n",
|
||||||
|
" (116, 105, 'W'),\n",
|
||||||
|
" (115, 105, 'W'),\n",
|
||||||
|
" (115, 105, 'N'),\n",
|
||||||
|
" (115, 104, 'N'),\n",
|
||||||
|
" (115, 103, 'N'),\n",
|
||||||
|
" (115, 102, 'N'),\n",
|
||||||
|
" (115, 101, 'N'),\n",
|
||||||
|
" (115, 100, 'N'),\n",
|
||||||
|
" (115, 99, 'N'),\n",
|
||||||
|
" (115, 99, 'W'),\n",
|
||||||
|
" (114, 99, 'W'),\n",
|
||||||
|
" (113, 99, 'W'),\n",
|
||||||
|
" (113, 99, 'N'),\n",
|
||||||
|
" (113, 98, 'N'),\n",
|
||||||
|
" (113, 97, 'N'),\n",
|
||||||
|
" (113, 97, 'W'),\n",
|
||||||
|
" (112, 97, 'W'),\n",
|
||||||
|
" (111, 97, 'W'),\n",
|
||||||
|
" (111, 97, 'N'),\n",
|
||||||
|
" (111, 96, 'N'),\n",
|
||||||
|
" (111, 95, 'N'),\n",
|
||||||
|
" (111, 95, 'E'),\n",
|
||||||
|
" (112, 95, 'E'),\n",
|
||||||
|
" (113, 95, 'E'),\n",
|
||||||
|
" (113, 95, 'N'),\n",
|
||||||
|
" (113, 94, 'N'),\n",
|
||||||
|
" (113, 93, 'N'),\n",
|
||||||
|
" (113, 92, 'N'),\n",
|
||||||
|
" (113, 91, 'N'),\n",
|
||||||
|
" (113, 90, 'N'),\n",
|
||||||
|
" (113, 89, 'N'),\n",
|
||||||
|
" (113, 89, 'E'),\n",
|
||||||
|
" (114, 89, 'E'),\n",
|
||||||
|
" (115, 89, 'E'),\n",
|
||||||
|
" (116, 89, 'E'),\n",
|
||||||
|
" (117, 89, 'E'),\n",
|
||||||
|
" (117, 89, 'S'),\n",
|
||||||
|
" (117, 90, 'S'),\n",
|
||||||
|
" (117, 91, 'S'),\n",
|
||||||
|
" (117, 91, 'E'),\n",
|
||||||
|
" (118, 91, 'E'),\n",
|
||||||
|
" (119, 91, 'E'),\n",
|
||||||
|
" (119, 91, 'N'),\n",
|
||||||
|
" (119, 90, 'N'),\n",
|
||||||
|
" (119, 89, 'N'),\n",
|
||||||
|
" (119, 89, 'E'),\n",
|
||||||
|
" (120, 89, 'E'),\n",
|
||||||
|
" (121, 89, 'E'),\n",
|
||||||
|
" (122, 89, 'E'),\n",
|
||||||
|
" (123, 89, 'E'),\n",
|
||||||
|
" (123, 89, 'N'),\n",
|
||||||
|
" (123, 88, 'N'),\n",
|
||||||
|
" (123, 87, 'N'),\n",
|
||||||
|
" (123, 86, 'N'),\n",
|
||||||
|
" (123, 85, 'N'),\n",
|
||||||
|
" (123, 84, 'N'),\n",
|
||||||
|
" (123, 83, 'N'),\n",
|
||||||
|
" (123, 82, 'N'),\n",
|
||||||
|
" (123, 81, 'N'),\n",
|
||||||
|
" (123, 81, 'E'),\n",
|
||||||
|
" (124, 81, 'E'),\n",
|
||||||
|
" (125, 81, 'E'),\n",
|
||||||
|
" (125, 81, 'S'),\n",
|
||||||
|
" (125, 82, 'S'),\n",
|
||||||
|
" (125, 83, 'S'),\n",
|
||||||
|
" (125, 83, 'E'),\n",
|
||||||
|
" (126, 83, 'E'),\n",
|
||||||
|
" (127, 83, 'E'),\n",
|
||||||
|
" (127, 83, 'N'),\n",
|
||||||
|
" (127, 82, 'N'),\n",
|
||||||
|
" (127, 81, 'N'),\n",
|
||||||
|
" (127, 80, 'N'),\n",
|
||||||
|
" (127, 79, 'N'),\n",
|
||||||
|
" (127, 79, 'E'),\n",
|
||||||
|
" (128, 79, 'E'),\n",
|
||||||
|
" (129, 79, 'E'),\n",
|
||||||
|
" (129, 79, 'N'),\n",
|
||||||
|
" (129, 78, 'N'),\n",
|
||||||
|
" (129, 77, 'N'),\n",
|
||||||
|
" (129, 77, 'W'),\n",
|
||||||
|
" (128, 77, 'W'),\n",
|
||||||
|
" (127, 77, 'W'),\n",
|
||||||
|
" (126, 77, 'W'),\n",
|
||||||
|
" (125, 77, 'W'),\n",
|
||||||
|
" (124, 77, 'W'),\n",
|
||||||
|
" (123, 77, 'W'),\n",
|
||||||
|
" (123, 77, 'S'),\n",
|
||||||
|
" (123, 78, 'S'),\n",
|
||||||
|
" (123, 79, 'S'),\n",
|
||||||
|
" (123, 79, 'W'),\n",
|
||||||
|
" (122, 79, 'W'),\n",
|
||||||
|
" (121, 79, 'W'),\n",
|
||||||
|
" (121, 79, 'N'),\n",
|
||||||
|
" (121, 78, 'N'),\n",
|
||||||
|
" (121, 77, 'N'),\n",
|
||||||
|
" (121, 76, 'N'),\n",
|
||||||
|
" (121, 75, 'N'),\n",
|
||||||
|
" (121, 75, 'E'),\n",
|
||||||
|
" (122, 75, 'E'),\n",
|
||||||
|
" (123, 75, 'E'),\n",
|
||||||
|
" (124, 75, 'E'),\n",
|
||||||
|
" (125, 75, 'E'),\n",
|
||||||
|
" (125, 75, 'N'),\n",
|
||||||
|
" (125, 74, 'N'),\n",
|
||||||
|
" (125, 73, 'N'),\n",
|
||||||
|
" (125, 73, 'W'),\n",
|
||||||
|
" (124, 73, 'W'),\n",
|
||||||
|
" (123, 73, 'W'),\n",
|
||||||
|
" (123, 73, 'N'),\n",
|
||||||
|
" (123, 72, 'N'),\n",
|
||||||
|
" (123, 71, 'N'),\n",
|
||||||
|
" (123, 71, 'E'),\n",
|
||||||
|
" (124, 71, 'E'),\n",
|
||||||
|
" (125, 71, 'E'),\n",
|
||||||
|
" (126, 71, 'E'),\n",
|
||||||
|
" (127, 71, 'E'),\n",
|
||||||
|
" (128, 71, 'E'),\n",
|
||||||
|
" (129, 71, 'E'),\n",
|
||||||
|
" (129, 71, 'N'),\n",
|
||||||
|
" (129, 70, 'N'),\n",
|
||||||
|
" (129, 69, 'N'),\n",
|
||||||
|
" (129, 69, 'E'),\n",
|
||||||
|
" (130, 69, 'E'),\n",
|
||||||
|
" (131, 69, 'E'),\n",
|
||||||
|
" (131, 69, 'S'),\n",
|
||||||
|
" (131, 70, 'S'),\n",
|
||||||
|
" (131, 71, 'S'),\n",
|
||||||
|
" (131, 72, 'S'),\n",
|
||||||
|
" (131, 73, 'S'),\n",
|
||||||
|
" (131, 74, 'S'),\n",
|
||||||
|
" (131, 75, 'S'),\n",
|
||||||
|
" (131, 75, 'E'),\n",
|
||||||
|
" (132, 75, 'E'),\n",
|
||||||
|
" (133, 75, 'E'),\n",
|
||||||
|
" (134, 75, 'E'),\n",
|
||||||
|
" (135, 75, 'E'),\n",
|
||||||
|
" (136, 75, 'E'),\n",
|
||||||
|
" (137, 75, 'E'),\n",
|
||||||
|
" (138, 75, 'E'),\n",
|
||||||
|
" (139, 75, 'E'),\n",
|
||||||
|
" (139, 75, 'N'),\n",
|
||||||
|
" (139, 74, 'N'),\n",
|
||||||
|
" (139, 73, 'N'),\n",
|
||||||
|
" (139, 73, 'W'),\n",
|
||||||
|
" (138, 73, 'W'),\n",
|
||||||
|
" (137, 73, 'W'),\n",
|
||||||
|
" (137, 73, 'N'),\n",
|
||||||
|
" (137, 72, 'N'),\n",
|
||||||
|
" (137, 71, 'N'),\n",
|
||||||
|
" (137, 71, 'W'),\n",
|
||||||
|
" (136, 71, 'W'),\n",
|
||||||
|
" (135, 71, 'W'),\n",
|
||||||
|
" (134, 71, 'W'),\n",
|
||||||
|
" (133, 71, 'W'),\n",
|
||||||
|
" (133, 71, 'N'),\n",
|
||||||
|
" (133, 70, 'N'),\n",
|
||||||
|
" (133, 69, 'N'),\n",
|
||||||
|
" (133, 68, 'N'),\n",
|
||||||
|
" (133, 67, 'N'),\n",
|
||||||
|
" (133, 67, 'W'),\n",
|
||||||
|
" (132, 67, 'W'),\n",
|
||||||
|
" (131, 67, 'W'),\n",
|
||||||
|
" (131, 67, 'N'),\n",
|
||||||
|
" (131, 66, 'N'),\n",
|
||||||
|
" (131, 65, 'N'),\n",
|
||||||
|
" (131, 65, 'E'),\n",
|
||||||
|
" (132, 65, 'E'),\n",
|
||||||
|
" (133, 65, 'E'),\n",
|
||||||
|
" (133, 65, 'N'),\n",
|
||||||
|
" (133, 64, 'N'),\n",
|
||||||
|
" (133, 63, 'N'),\n",
|
||||||
|
" (133, 63, 'W'),\n",
|
||||||
|
" (132, 63, 'W'),\n",
|
||||||
|
" (131, 63, 'W'),\n",
|
||||||
|
" (131, 63, 'N'),\n",
|
||||||
|
" (131, 62, 'N'),\n",
|
||||||
|
" (131, 61, 'N'),\n",
|
||||||
|
" (131, 61, 'W'),\n",
|
||||||
|
" (130, 61, 'W'),\n",
|
||||||
|
" (129, 61, 'W'),\n",
|
||||||
|
" (128, 61, 'W'),\n",
|
||||||
|
" (127, 61, 'W'),\n",
|
||||||
|
" (127, 61, 'S'),\n",
|
||||||
|
" (127, 62, 'S'),\n",
|
||||||
|
" (127, 63, 'S'),\n",
|
||||||
|
" (127, 64, 'S'),\n",
|
||||||
|
" (127, 65, 'S'),\n",
|
||||||
|
" (127, 65, 'E'),\n",
|
||||||
|
" (128, 65, 'E'),\n",
|
||||||
|
" (129, 65, 'E'),\n",
|
||||||
|
" (129, 65, 'S'),\n",
|
||||||
|
" (129, 66, 'S'),\n",
|
||||||
|
" (129, 67, 'S'),\n",
|
||||||
|
" (129, 67, 'W'),\n",
|
||||||
|
" (128, 67, 'W'),\n",
|
||||||
|
" (127, 67, 'W'),\n",
|
||||||
|
" (127, 67, 'S'),\n",
|
||||||
|
" (127, 68, 'S'),\n",
|
||||||
|
" (127, 69, 'S'),\n",
|
||||||
|
" (127, 69, 'W'),\n",
|
||||||
|
" (126, 69, 'W'),\n",
|
||||||
|
" (125, 69, 'W'),\n",
|
||||||
|
" (124, 69, 'W'),\n",
|
||||||
|
" (123, 69, 'W'),\n",
|
||||||
|
" (122, 69, 'W'),\n",
|
||||||
|
" (121, 69, 'W'),\n",
|
||||||
|
" (121, 69, 'N'),\n",
|
||||||
|
" (121, 68, 'N'),\n",
|
||||||
|
" (121, 67, 'N'),\n",
|
||||||
|
" (121, 66, 'N'),\n",
|
||||||
|
" (121, 65, 'N'),\n",
|
||||||
|
" (121, 64, 'N'),\n",
|
||||||
|
" (121, 63, 'N'),\n",
|
||||||
|
" (121, 63, 'W'),\n",
|
||||||
|
" (120, 63, 'W'),\n",
|
||||||
|
" (119, 63, 'W'),\n",
|
||||||
|
" (119, 63, 'N'),\n",
|
||||||
|
" (119, 62, 'N'),\n",
|
||||||
|
" (119, 61, 'N'),\n",
|
||||||
|
" (119, 61, 'E'),\n",
|
||||||
|
" (120, 61, 'E'),\n",
|
||||||
|
" (121, 61, 'E'),\n",
|
||||||
|
" (121, 61, 'N'),\n",
|
||||||
|
" (121, 60, 'N'),\n",
|
||||||
|
" (121, 59, 'N'),\n",
|
||||||
|
" (121, 58, 'N'),\n",
|
||||||
|
" (121, 57, 'N'),\n",
|
||||||
|
" (121, 56, 'N'),\n",
|
||||||
|
" (121, 55, 'N'),\n",
|
||||||
|
" (121, 54, 'N'),\n",
|
||||||
|
" (121, 53, 'N'),\n",
|
||||||
|
" (121, 53, 'W'),\n",
|
||||||
|
" (120, 53, 'W'),\n",
|
||||||
|
" (119, 53, 'W'),\n",
|
||||||
|
" (118, 53, 'W'),\n",
|
||||||
|
" (117, 53, 'W'),\n",
|
||||||
|
" (117, 53, 'N'),\n",
|
||||||
|
" (117, 52, 'N'),\n",
|
||||||
|
" (117, 51, 'N'),\n",
|
||||||
|
" (117, 51, 'E'),\n",
|
||||||
|
" (118, 51, 'E'),\n",
|
||||||
|
" (119, 51, 'E'),\n",
|
||||||
|
" (119, 51, 'N'),\n",
|
||||||
|
" (119, 50, 'N'),\n",
|
||||||
|
" (119, 49, 'N'),\n",
|
||||||
|
" (119, 49, 'W'),\n",
|
||||||
|
" (118, 49, 'W'),\n",
|
||||||
|
" (117, 49, 'W'),\n",
|
||||||
|
" (117, 49, 'N'),\n",
|
||||||
|
" (117, 48, 'N'),\n",
|
||||||
|
" (117, 47, 'N'),\n",
|
||||||
|
" (117, 47, 'E'),\n",
|
||||||
|
" (118, 47, 'E'),\n",
|
||||||
|
" (119, 47, 'E'),\n",
|
||||||
|
" (120, 47, 'E'),\n",
|
||||||
|
" (121, 47, 'E'),\n",
|
||||||
|
" (121, 47, 'N'),\n",
|
||||||
|
" (121, 46, 'N'),\n",
|
||||||
|
" (121, 45, 'N'),\n",
|
||||||
|
" (121, 44, 'N'),\n",
|
||||||
|
" (121, 43, 'N'),\n",
|
||||||
|
" (121, 42, 'N'),\n",
|
||||||
|
" (121, 41, 'N'),\n",
|
||||||
|
" (121, 40, 'N'),\n",
|
||||||
|
" (121, 39, 'N'),\n",
|
||||||
|
" (121, 38, 'N'),\n",
|
||||||
|
" (121, 37, 'N'),\n",
|
||||||
|
" (121, 37, 'E'),\n",
|
||||||
|
" (122, 37, 'E'),\n",
|
||||||
|
" (123, 37, 'E'),\n",
|
||||||
|
" (124, 37, 'E'),\n",
|
||||||
|
" (125, 37, 'E'),\n",
|
||||||
|
" (125, 37, 'N'),\n",
|
||||||
|
" (125, 36, 'N'),\n",
|
||||||
|
" (125, 35, 'N'),\n",
|
||||||
|
" (125, 35, 'E'),\n",
|
||||||
|
" (126, 35, 'E'),\n",
|
||||||
|
" (127, 35, 'E'),\n",
|
||||||
|
" (127, 35, 'N'),\n",
|
||||||
|
" (127, 34, 'N'),\n",
|
||||||
|
" (127, 33, 'N'),\n",
|
||||||
|
" (127, 33, 'E'),\n",
|
||||||
|
" (128, 33, 'E'),\n",
|
||||||
|
" (129, 33, 'E'),\n",
|
||||||
|
" (130, 33, 'E'),\n",
|
||||||
|
" (131, 33, 'E'),\n",
|
||||||
|
" (132, 33, 'E'),\n",
|
||||||
|
" (133, 33, 'E'),\n",
|
||||||
|
" (134, 33, 'E'),\n",
|
||||||
|
" (135, 33, 'E'),\n",
|
||||||
|
" (136, 33, 'E'),\n",
|
||||||
|
" (137, 33, 'E'),\n",
|
||||||
|
" (138, 33, 'E'),\n",
|
||||||
|
" (139, 33, 'E'),\n",
|
||||||
|
" (139, 33, 'N'),\n",
|
||||||
|
" (139, 32, 'N'),\n",
|
||||||
|
" (139, 31, 'N'),\n",
|
||||||
|
" (139, 31, 'W'),\n",
|
||||||
|
" (138, 31, 'W'),\n",
|
||||||
|
" (137, 31, 'W'),\n",
|
||||||
|
" (137, 31, 'N'),\n",
|
||||||
|
" (137, 30, 'N'),\n",
|
||||||
|
" (137, 29, 'N'),\n",
|
||||||
|
" (137, 28, 'N'),\n",
|
||||||
|
" (137, 27, 'N'),\n",
|
||||||
|
" (137, 27, 'E'),\n",
|
||||||
|
" (138, 27, 'E'),\n",
|
||||||
|
" (139, 27, 'E'),\n",
|
||||||
|
" (139, 27, 'N'),\n",
|
||||||
|
" (139, 26, 'N'),\n",
|
||||||
|
" (139, 25, 'N'),\n",
|
||||||
|
" (139, 24, 'N'),\n",
|
||||||
|
" (139, 23, 'N'),\n",
|
||||||
|
" (139, 22, 'N'),\n",
|
||||||
|
" (139, 21, 'N'),\n",
|
||||||
|
" (139, 21, 'W'),\n",
|
||||||
|
" (138, 21, 'W'),\n",
|
||||||
|
" (137, 21, 'W'),\n",
|
||||||
|
" (137, 21, 'S'),\n",
|
||||||
|
" (137, 22, 'S'),\n",
|
||||||
|
" (137, 23, 'S'),\n",
|
||||||
|
" (137, 24, 'S'),\n",
|
||||||
|
" (137, 25, 'S'),\n",
|
||||||
|
" (137, 25, 'W'),\n",
|
||||||
|
" (136, 25, 'W'),\n",
|
||||||
|
" (135, 25, 'W'),\n",
|
||||||
|
" (135, 25, 'N'),\n",
|
||||||
|
" (135, 24, 'N'),\n",
|
||||||
|
" (135, 23, 'N'),\n",
|
||||||
|
" (135, 22, 'N'),\n",
|
||||||
|
" (135, 21, 'N'),\n",
|
||||||
|
" (135, 20, 'N'),\n",
|
||||||
|
" (135, 19, 'N'),\n",
|
||||||
|
" (135, 19, 'E'),\n",
|
||||||
|
" (136, 19, 'E'),\n",
|
||||||
|
" (137, 19, 'E'),\n",
|
||||||
|
" (138, 19, 'E'),\n",
|
||||||
|
" (139, 19, 'E'),\n",
|
||||||
|
" (139, 19, 'N'),\n",
|
||||||
|
" (139, 18, 'N'),\n",
|
||||||
|
" (139, 17, 'N'),\n",
|
||||||
|
" (139, 16, 'N'),\n",
|
||||||
|
" (139, 15, 'N'),\n",
|
||||||
|
" (139, 14, 'N'),\n",
|
||||||
|
" (139, 13, 'N'),\n",
|
||||||
|
" (139, 12, 'N'),\n",
|
||||||
|
" (139, 11, 'N'),\n",
|
||||||
|
" (139, 10, 'N'),\n",
|
||||||
|
" (139, 9, 'N'),\n",
|
||||||
|
" (139, 8, 'N'),\n",
|
||||||
|
" (139, 7, 'N'),\n",
|
||||||
|
" (139, 7, 'W'),\n",
|
||||||
|
" (138, 7, 'W'),\n",
|
||||||
|
" (137, 7, 'W'),\n",
|
||||||
|
" (137, 7, 'N'),\n",
|
||||||
|
" (137, 6, 'N'),\n",
|
||||||
|
" (137, 5, 'N'),\n",
|
||||||
|
" (137, 5, 'E'),\n",
|
||||||
|
" (138, 5, 'E'),\n",
|
||||||
|
" (139, 5, 'E'),\n",
|
||||||
|
" (139, 5, 'N'),\n",
|
||||||
|
" (139, 4, 'N'),\n",
|
||||||
|
" (139, 3, 'N'),\n",
|
||||||
|
" (139, 2, 'N'),\n",
|
||||||
|
" (139, 1, 'N')],\n",
|
||||||
|
" 135512)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 12,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"import networkx as nx\n",
|
||||||
|
"\n",
|
||||||
|
"# Define directions and corresponding movements\n",
|
||||||
|
"DIRECTIONS = ['N', 'E', 'S', 'W']\n",
|
||||||
|
"MOVEMENTS = {\n",
|
||||||
|
" 'N': (0, -1), # Move up\n",
|
||||||
|
" 'E': (1, 0), # Move right\n",
|
||||||
|
" 'S': (0, 1), # Move down\n",
|
||||||
|
" 'W': (-1, 0) # Move left\n",
|
||||||
|
"}\n",
|
||||||
|
"\n",
|
||||||
|
"# Parse the ASCII map into a graph with movement and turning costs\n",
|
||||||
|
"def parse_ascii_map_with_costs(ascii_map):\n",
|
||||||
|
" graph = nx.DiGraph() # Directed graph for handling edge weights\n",
|
||||||
|
" rows = ascii_map.strip().split(\"\\n\")\n",
|
||||||
|
" height, width = len(rows), len(rows[0])\n",
|
||||||
|
"\n",
|
||||||
|
" start, end = None, None\n",
|
||||||
|
" for y, row in enumerate(rows):\n",
|
||||||
|
" for x, char in enumerate(row):\n",
|
||||||
|
" if char != '#': # Walkable space\n",
|
||||||
|
" for direction in DIRECTIONS: # Add a node for each direction\n",
|
||||||
|
" graph.add_node((x, y, direction))\n",
|
||||||
|
" if char == 'S': # Starting point\n",
|
||||||
|
" start = (x, y, 'E') # Assume starting direction is North\n",
|
||||||
|
" elif char == 'E': # Ending point\n",
|
||||||
|
" end = (x, y)\n",
|
||||||
|
"\n",
|
||||||
|
" # Add edges for moving forward\n",
|
||||||
|
" for direction in DIRECTIONS:\n",
|
||||||
|
" dx, dy = MOVEMENTS[direction]\n",
|
||||||
|
" nx_new, ny_new = x + dx, y + dy\n",
|
||||||
|
" if 0 <= nx_new < width and 0 <= ny_new < height and rows[ny_new][nx_new] != '#':\n",
|
||||||
|
" graph.add_edge((x, y, direction), (nx_new, ny_new, direction), weight=1)\n",
|
||||||
|
"\n",
|
||||||
|
" # Add edges for turning (clockwise and counterclockwise)\n",
|
||||||
|
" for i, direction in enumerate(DIRECTIONS):\n",
|
||||||
|
" next_dir = DIRECTIONS[(i + 1) % 4] # Clockwise\n",
|
||||||
|
" prev_dir = DIRECTIONS[(i - 1) % 4] # Counterclockwise\n",
|
||||||
|
" graph.add_edge((x, y, direction), (x, y, next_dir), weight=1000)\n",
|
||||||
|
" graph.add_edge((x, y, direction), (x, y, prev_dir), weight=1000)\n",
|
||||||
|
" return graph, start, end\n",
|
||||||
|
"\n",
|
||||||
|
"# Find the shortest path with the new graph\n",
|
||||||
|
"def find_shortest_path_with_costs(graph, start, end):\n",
|
||||||
|
" try:\n",
|
||||||
|
" # Extract all possible end states (any direction at the endpoint)\n",
|
||||||
|
" end_nodes = [(end[0], end[1], d) for d in DIRECTIONS]\n",
|
||||||
|
" shortest_cost = float('inf')\n",
|
||||||
|
" best_path = None\n",
|
||||||
|
"\n",
|
||||||
|
" # Evaluate paths to all possible orientations at the endpoint\n",
|
||||||
|
" for end_node in end_nodes:\n",
|
||||||
|
" try:\n",
|
||||||
|
" path = nx.shortest_path(graph, source=start, target=end_node, weight='weight')\n",
|
||||||
|
" cost = nx.shortest_path_length(graph, source=start, target=end_node, weight='weight')\n",
|
||||||
|
" if cost < shortest_cost:\n",
|
||||||
|
" shortest_cost = cost\n",
|
||||||
|
" best_path = path\n",
|
||||||
|
" except nx.NetworkXNoPath:\n",
|
||||||
|
" continue\n",
|
||||||
|
" return best_path, shortest_cost\n",
|
||||||
|
" except nx.NetworkXNoPath:\n",
|
||||||
|
" return None, float('inf')\n",
|
||||||
|
"\n",
|
||||||
|
"# Example ASCII map\n",
|
||||||
|
"with open('input','r') as infile:\n",
|
||||||
|
" ascii_map = infile.read()\n",
|
||||||
|
"\n",
|
||||||
|
"# Parse the map and solve\n",
|
||||||
|
"graph, start, end = parse_ascii_map_with_costs(ascii_map)\n",
|
||||||
|
"path, cost = find_shortest_path_with_costs(graph, start, end)\n",
|
||||||
|
"\n",
|
||||||
|
"# Output the results\n",
|
||||||
|
"path, cost\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 13,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Minimum Cost to Reach the End: 135512\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"import heapq\n",
|
||||||
|
"\n",
|
||||||
|
"# Define directions and corresponding movements\n",
|
||||||
|
"DIRECTIONS = ['N', 'E', 'S', 'W']\n",
|
||||||
|
"MOVEMENTS = {\n",
|
||||||
|
" 'N': (0, -1), # Move up\n",
|
||||||
|
" 'E': (1, 0), # Move right\n",
|
||||||
|
" 'S': (0, 1), # Move down\n",
|
||||||
|
" 'W': (-1, 0) # Move left\n",
|
||||||
|
"}\n",
|
||||||
|
"\n",
|
||||||
|
"def solve_maze_with_costs(ascii_map):\n",
|
||||||
|
" rows = ascii_map.strip().split(\"\\n\")\n",
|
||||||
|
" height, width = len(rows), len(rows[0])\n",
|
||||||
|
"\n",
|
||||||
|
" # Find start and end positions\n",
|
||||||
|
" start, end = None, None\n",
|
||||||
|
" for y, row in enumerate(rows):\n",
|
||||||
|
" for x, char in enumerate(row):\n",
|
||||||
|
" if char == 'S':\n",
|
||||||
|
" start = (x, y, 'E') # Start facing North\n",
|
||||||
|
" elif char == 'E':\n",
|
||||||
|
" end = (x, y)\n",
|
||||||
|
" \n",
|
||||||
|
" # Priority queue for Dijkstra's algorithm\n",
|
||||||
|
" pq = []\n",
|
||||||
|
" heapq.heappush(pq, (0, start)) # (cost, (x, y, direction))\n",
|
||||||
|
"\n",
|
||||||
|
" # Visited states: {(x, y, direction): cost}\n",
|
||||||
|
" visited = {}\n",
|
||||||
|
"\n",
|
||||||
|
" while pq:\n",
|
||||||
|
" cost, (x, y, direction) = heapq.heappop(pq)\n",
|
||||||
|
"\n",
|
||||||
|
" # Goal check: If we reach the endpoint\n",
|
||||||
|
" if (x, y) == end:\n",
|
||||||
|
" return cost\n",
|
||||||
|
"\n",
|
||||||
|
" # Avoid revisiting with higher cost\n",
|
||||||
|
" if (x, y, direction) in visited and visited[(x, y, direction)] <= cost:\n",
|
||||||
|
" continue\n",
|
||||||
|
" visited[(x, y, direction)] = cost\n",
|
||||||
|
"\n",
|
||||||
|
" # 1. Move forward\n",
|
||||||
|
" dx, dy = MOVEMENTS[direction]\n",
|
||||||
|
" nx, ny = x + dx, y + dy\n",
|
||||||
|
" if 0 <= nx < width and 0 <= ny < height and rows[ny][nx] != '#':\n",
|
||||||
|
" heapq.heappush(pq, (cost + 1, (nx, ny, direction)))\n",
|
||||||
|
"\n",
|
||||||
|
" # 2. Rotate clockwise\n",
|
||||||
|
" next_direction = DIRECTIONS[(DIRECTIONS.index(direction) + 1) % 4]\n",
|
||||||
|
" heapq.heappush(pq, (cost + 1000, (x, y, next_direction)))\n",
|
||||||
|
"\n",
|
||||||
|
" # 3. Rotate counterclockwise\n",
|
||||||
|
" prev_direction = DIRECTIONS[(DIRECTIONS.index(direction) - 1) % 4]\n",
|
||||||
|
" heapq.heappush(pq, (cost + 1000, (x, y, prev_direction)))\n",
|
||||||
|
" \n",
|
||||||
|
" return float('inf') # No path found\n",
|
||||||
|
"\n",
|
||||||
|
"# Example ASCII map\n",
|
||||||
|
"with open('input','r') as infile:\n",
|
||||||
|
" ascii_map = infile.read()\n",
|
||||||
|
"\n",
|
||||||
|
"# Solve the maze\n",
|
||||||
|
"cost = solve_maze_with_costs(ascii_map)\n",
|
||||||
|
"print(\"Minimum Cost to Reach the End:\", cost)\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "pdf",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython3",
|
||||||
|
"version": "3.12.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
||||||
141
16/input
Normal file
141
16/input
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
#############################################################################################################################################
|
||||||
|
#...................#...#...#.......#.........#.......#.........#...#.....#.............#.........#.....#.....#...............#............E#
|
||||||
|
#.#################.#.#.#.#.#.#.###.#.#.#.#####.###.###.#.#####.#.#.###.#.#.#.#########.###.#.###.###.###.###.#.#######.#####.###.#######.#.#
|
||||||
|
#.........#.#.....#.#.#.#.#...#.#.#.#.#.......#.#.#.....#...#.....#.....#...#.#...#...#...#.#.#.#...#.......#...#.#...#.#...#.....#...#...#.#
|
||||||
|
#.#######.#.#.#.###.#.#.#.#####.#.#.#.###.###.#.#.#######.#.#########.#.#####.#.#.#.#.###.###.#.###.#######.###.#.#.#.#.#.#########.###.###.#
|
||||||
|
#.#...#...#.#.#...#.#.#...#.....#.#.#.....#.......................#.#.#...#...#.#...#...#.....#...#.......#.#.....#.#.#.#...................#
|
||||||
|
#.###.#.###.#.###.#.#######.#####.#.#####.#.###.#.#.#############.#.#.###.#.#.#.#######.#########.#######.#.#.###.#.#.#.###.#.#####.#.#.#.###
|
||||||
|
#.#...#...#.#.#...#.........#...........#.#.....#.#.............#.#.#...#...#.....#.#...#...............#.#...#...#.#.#...#.#.......#...#...#
|
||||||
|
#.#.#####.#.#.#.###.###################.#.#.#############.#######.#.###.#####.###.#.#.#####.#.###.#.###.#.#########.#.###.#.#############.#.#
|
||||||
|
#.#.....#.#...#...#.#.................#...#...........#...#...#...#.....#...#...#.#.#.#.....#.#...#...#.#...........#...#.#...#.........#.#.#
|
||||||
|
#.#.#.#.#.#####.#.#.#.###############.###.###########.#.###.#.#.###.#####.#.#.#.#.#.#.#.###.#.#.#####.#.#############.#.#.###.#.#######.###.#
|
||||||
|
#.#.#.#.#.....#.#...#...........#.....#.#.#.....#.....#...#.#...#.#.#.....#...#.#...#.#...#...#.....#.#...#...#...#...#.#.#...#.......#.#...#
|
||||||
|
#.###.#.#####.###.#############.#.#####.#.#.#.###.#.#####.#.#####.#.#.###.#####.#####.#.#.#.#######.#.###.#.#.#.#.#.#.#.#.#.###.#####.#.#.#.#
|
||||||
|
#.....#...#.#...#.#.............#.........................#.#.....#...#.......#.....#.#.#.#...............................#.#.#...#.#.#...#.#
|
||||||
|
#.#######.#.###.#.###.#.#.#.#.#.#.#.#.#.#.#################.#.###.###.#######.#####.#.#.#.#.###########.#.#####.#.#.#.#####.#.###.#.#.#####.#
|
||||||
|
#...#...#.#...#.#.....#.#.#.#...#...#.#.#...................#.#...#...........#...#...#.#.....#...#.#.........#.#...#.....#.#.......#.......#
|
||||||
|
#.#.#.#.#.###.#.#####.#.#.#.#######.#.#.###.#################.#.###.#.###.#####.#.#.#######.#.#.#.#.#.#####.#.###########.#.#.#######.#.#.#.#
|
||||||
|
#.#...#.#.#...#.#.....#.#...#.......#.#...#...........#...#...#.....#...#.......#...#.....#.#...#.#.#.#...............#...#.#.#.......#.#.#.#
|
||||||
|
#.###.###.#.#.#.#####.#.#####.#.#.#######.#.#.#######.###.#.###.#######.###.#.#######.###.#######.#.#.#.#.###########.#.#.#.###.#######.###.#
|
||||||
|
#...........#.#.....#...#.#...#...#.....#.#.#.#.....#.#.....#.........#.......#.........#...#.....#...#.#...#...#...#...#.#.....#.....#.....#
|
||||||
|
#.#####.###.#######.#.#.#.#.#######.###.#.#.#.#.###.#.#.###.#.#########.#######.#.#########.#.#########.###.#.#.#.#.#.###############.#.#####
|
||||||
|
#.....#.#.#.......#...#...#.#.....#...#.#...#.#.#...#.#.......#.......#...#...#...#...#.....#.#...#.......#.#.#...#.#...........#.....#.#...#
|
||||||
|
#.###.#.#.#.###.#.#####.#.#.#.###.###.#.#.###.#.#.#.#.#########.#####.#####.#.###.#.#.#.#####.#.#.#.#######.#.#####.#.#######.#.#.###.#.#.#.#
|
||||||
|
#...#...#...#...#.......#.#.....#.....#.#...#...#...#.........#...#.#.......#.....#.#.#.....#...#.....#...#...#.#...#.#.......#...#...#.#.#.#
|
||||||
|
#.#.#######.#.#####.#####.#########.#.#.#.#########.#########.###.#.###########.###.#.###.#.###.#######.#.###.#.#.#.#.#.#.#########.###.#.#.#
|
||||||
|
#.#.......................#...#.....#...#.......#...#...#...#...#.#.......#...#.#...#...#.#...#.....#...#...#...#.#.#.#...#.....#.#.#.#...#.#
|
||||||
|
#.###.#.#.###.#.###.#######.#.#.###.#.###.#.###.#.###.#.#.#.###.#.#####.###.#.###.###.#.#.###.#####.#.#####.#####.###.#.###.###.#.#.#.#####.#
|
||||||
|
#...#...#...#.#...#.#.....#.#.#.#...#...#.#.#.#.#.#.....#.#...#...#.....#...#.....#.#...#...#.....#.....#.#.....#.....#.........#.#.#...#...#
|
||||||
|
#.#.#######.#####.#.###.#.###.#.###.###.#.#.#.#.#.#####.#.###.#####.#####.#########.#.#########.#.#.###.#.#####.###.#######.#.###.#.#.#.#.###
|
||||||
|
#.#...#...#.......#.....#.....#...#.....#.#.#.#...#...#.....#...........#...#...#.#.......#...#.#.#.#...#.....#.............#...#.#.#.#.#.#.#
|
||||||
|
#.#####.#.###################.###.#######.#.#.###.#.#.#.###############.###.#.#.#.#.###.#.#.#.###.###.###.###.#########.###.###.#.#.###.#.#.#
|
||||||
|
#.#...#.#.....#.................#...#...#.#.#...#...#.#.#.#...............#...#.#.#.....#...#...#.......#.................#...#.#...#...#...#
|
||||||
|
#.#.#.#.###.###.#######.#######.###.#.#.#.#.#.#.###.#.#.#.#.#####.#########.###.#.#############.#######.#.###########.#######.#.#.###.#####.#
|
||||||
|
#...#.....#.....#.....#.#.....#...#.#.#.#.#.#.#.....#.#...#.#...#.....#.........#.....#.......#.....#...#...#.......#.#.....................#
|
||||||
|
#################.###.###.###.#.###.#.###.#.#.#######.#####.#.#.#.#.#.#.#########.###.#.#####.#####.#.#####.#.#####.#.#.#######.#.###.#.#####
|
||||||
|
#.......#...#...#.#.#.#...#.#.#.#...#...#.#.#.....#.........#.#...#.#...#.....#.....#.......#...#...#.#.....#.....#.#.#.#...#...#.....#.#...#
|
||||||
|
#.#####.#.#.#.#.#.#.#.#.###.#.#.#.#####.#.#.#.###.#######.#.###.###.#####.#.#.#.###########.#.#.#.###.#.###.#####.#.#.#.#.###.#.#######.#.###
|
||||||
|
#.#.....#.#.#.#...#.#.#.#.....#.#.....#...#.#...#.....#.#.#...#.#.#.#...#.#.#.........#...#.#.#.#.......#...#.....#.#...#.....#.........#...#
|
||||||
|
#.#.#####.#.#.#####.#.#.#.#####.#####.#.###.#.#.#####.#.#.###.#.#.#.###.#.#.#########.#.#.#.#.#####.#####.###.#####.#.###.#.#############.#.#
|
||||||
|
#.#.....#.#.........#...#.#...#...#...#...#.#.....#...#.#.....#...#.#...#.#...#.....#...#...#.#...#.#...#.#...#.....#...#.#.#...#.......#.#.#
|
||||||
|
#.#####.#.#.#.#.###.#####.###.###.#.#####.#.#.#.###.#.#.#####.#.###.#.#.#.###.#.###.#####.###.#.#.#.#.###.#.###.#######.#.#.#.#.#.#.#.#.#.#.#
|
||||||
|
#.#...............#.....#...#.#...#...#.....#...#...#...#.....#.#...#.#.#...#...#.#...#.#...#.#.#...#.....#...#.#...........#.#...#.#.#...#.#
|
||||||
|
#.#.#.#.#.#.#.###.#########.#.#.#####.#.#######.#.###.#.#.#.###.#.###.#####.#####.###.#.###.#.#.#######.#####.#.#.#.#####.###.#####.#.#####.#
|
||||||
|
#...#.#...#.#.#...#...........#.....#...#.....#.#.#.#.#.#.#.#...#.#...#...............#.....#.#.#.....#.......#.#.#.#...#.#.....#...#.......#
|
||||||
|
#####.#####.#.#.#.#.#####.###.#.#.#.#####.#.#.#.#.#.#.#.#.#.#.###.###.#.#########.#.#.###.###.#.###.#.#######.#.###.###.#.#.#####.###.#.###.#
|
||||||
|
#...#...#.#.#.#.#.#.......#.....#.#.......#.#.#.#.#.#.#...#.....#...#...#.........#.#...#.#...#.....#...........#...#...#.#.#.........#...#.#
|
||||||
|
#.#.###.#.#.#.#.#.#######.###.#############.#.###.#.#.#####.###.###.#.###.#########.###.#.#.###################.#.###.###.#.#.###.#.#####.#.#
|
||||||
|
#.#...#.#.#...#.#.#.....#...#...............#.....#.......#...#...#.......#...#.....#...#.#.#...#...#...........#...#.....#.#...............#
|
||||||
|
#.###.#.#.#####.###.#.#.###.###################.###########.#.###.#.###.###.#.#.#####.###.#.#.#.#.#.#.#############.#.#######.###.#######.###
|
||||||
|
#...#.#.#...#.#.....#.#...#.....#.......#...#.........#...#.#...#.#...#.....#.....#...#...#...#.#.....#...........#.#...#...#.....#.#...#...#
|
||||||
|
###.#.#.#.#.#.#.#####.#.#######.#.#.#####.#.#.###.###.#.#.###.#.#.###.###########.#.###.#####.#.#.#######.#####.#.#.###.#.#.#####.#.#.#.#.#.#
|
||||||
|
#...#...#.#...#.#...#.#.#...#...#.#.....#.#...#.#...#...#...#.#.#...#...........#.#.#.......#.#.#.......#.#.#...#...#...#.#.....#...#.#.....#
|
||||||
|
#.#######.###.#.#.#.#.#.#.#.#.#######.#.#.#####.###.#######.#.#####.#####.#.###.###.#####.#.###.#######.#.#.#.#######.###.#####.#.###.###.#.#
|
||||||
|
#.......#.#...#.#.#.#.#.#.#...#.....#.#...........#.#.....#.#.......#...#.#.#.....#...#.........#.....#.#.#.#...#.........#...#.#.....#...#.#
|
||||||
|
#######.#.###.#.#.###.###.#####.###.###############.#####.#.###.###.#.###.#.#####.###.#########.###.#.#.#.#.###.#.#####.#.#.###.#.#######.#.#
|
||||||
|
#.....#.#...#...#...#.#...#.....#...#.....#.........#.....#...#...#...#.....#...#.....#...#.........#.#.#.#.#...#.....#...#.#...#...#...#...#
|
||||||
|
###.###.#.#.###.###.#.#.###.#####.###.###.#.#########.#######.#.#.###.#.###.#.#.#####.#.#.#######.#####.#.#.#.#######.#.#.#.#.###.#.#.#.#.###
|
||||||
|
#...#...#.#.........#...#...#...#.....#.....#.......#.......#...#.....#.#.....#...#...#.#.......#.#...#.#.#.#.#...#...#.#.#.#.#.....#.#.....#
|
||||||
|
#.#.#.#############.#######.#.#.#####.#########.###.#####.#########.###.#########.#####.#######.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#####.###.#.#
|
||||||
|
#.#.#.........#...#.........#.#.......#.......#...#...#...#.......#...#.#.......#.....#...#...#.#.#.#...#...#.#.#.#.#...#.#.#.#.......#.#...#
|
||||||
|
#.###########.#.#.#########.###########.#####.#.#.###.#.###.###.#.###.#.#.#####.#.###.###.###.#.###.#########.#.#.#.#####.#.#.#######.#.#.###
|
||||||
|
#.#.....#.....#.#...........#...#...........#.#.#.#.#.#.#...#...#...#.#.#.....#.#.#.#.........#...#.#.........#.#...#.....#.#.#.....#...#...#
|
||||||
|
#.#.#.###.###################.#.#.###########.###.#.#.#.#.###.###.###.#.###.#.#.#.#.#############.#.#.#########.#.#.#.#.###.#.#.###.#####.#.#
|
||||||
|
#...#...#...........#.........#...#...#.......#...#.#...#...#.#...#...#.......#.#.....#.....#.....#.#.#.......#.#.#.#.#.....#.#.#.....#.....#
|
||||||
|
#.#####.#######.###.#.###############.#.#######.###.#.###.###.#.###.###########.#####.#.#.#.#.###.#.#.#.#####.#.###.#.###.#.#.#.#####.#.#.#.#
|
||||||
|
#.#...#...........#...#...#...........#...#.....#.....#...#...#.....#.........#.#.....#.#.#...#.#.#.#.......#.#.....#...#.#...#...#...#...#.#
|
||||||
|
#.#.#.###.#####.#######.#.#.#####.###.###.#.###.#######.###.#####.#.#.#######.#.###.###.#.#.#.#.#.#.#########.#.#######.#.#######.#.#####.#.#
|
||||||
|
#.#.#.#.#.....#.#.......#.#.#.......#...#.#.......#...#...#.....#.#...#.....#.#...#.#...#.#...#...#.....#.....#.#.......#.#.......#...#...#.#
|
||||||
|
#.#.#.#.#####.###.#.#.###.#.#.#.###.###.#.#######.#.#.###.#####.#######.#.#.#.###.###.###.#####.#######.#.#####.###.#####.#####.#####.#.#.###
|
||||||
|
#...#.......#.#...#...#.#...#.#...#.....#.......#...#...#.....#...#.....#.#.#.....#...#.....#.#.#...#...#.#...#.....#...#.......#...#.#.....#
|
||||||
|
#####.#######.#.#######.#.#####.#.#.###########.#####.#######.###.#.#####.#########.#####.#.#.#.###.#.###.###.#######.###########.#.#.#####.#
|
||||||
|
#...#.#.......#.#...............#.#...........#...#...#.........#...#...#.........#.#.....#...#.#...#.....#.....#.........#.......#.#.....#.#
|
||||||
|
#.###.#.#####.#.#.###.#######.###.#####.#.#######.#.###.#############.#####.#.#.#.#.#.#########.#.#########.###.#.#######.#.#######.#####.#.#
|
||||||
|
#.....#...#.#.#.#.#...#...#.....#...#.....#.......#...#...#.........#.#.....#...#...#.#.......#.#...........#...#.#.......#...#...#.....#...#
|
||||||
|
#.#######.#.#.#.###.###.#.#####.#.###.#.#.#.#########.###.#.#######.#.#.#############.#.#####.#.#.###.#.#.###.###.#.###.#####.#.###.#######.#
|
||||||
|
#.#.....#.#...#.#.......#.....#...#...#...#.#.........#...#.......#.#.#.....#.........#.#...#.#.#.#...#.#...#.#...#...#.#.....#...#.........#
|
||||||
|
#.#.###.#.#####.#.###.#######.#####.#.#####.#####.#####.#####.#.###.#.#.###.#####.#####.###.#.#.###.#.#.###.###.#.###.#.#.#######.###########
|
||||||
|
#.............#.......#.......#.....#.#...#.....#.....#...#...#.#...#.#.#.#.....#...........#.#.....#.#...#...#.#...#.#.#.#.......#.......#.#
|
||||||
|
#.#.#.#.#.#.#.#.#.#####.#####.#.#.#####.#.#####.#####.###.#.###.#.###.#.#.#####.#############.#######.###.###.#.###.#.#.#.#.#####.#.#####.#.#
|
||||||
|
#.#.#.#.#...#...#.#.....#...#.#...#.....#.....#.#.....#...#.....#...#.#.#.....#...........#...#.....#...#.#.#.#...#.#.#.#...#.#...#...#.....#
|
||||||
|
#.###.#.###########.#####.###.#.###.###.###.#.#.#.#.#.#.#######.###.#.#.###.#######.#.###.#.###.#.#####.#.#.#.###.#.#.#######.#.###.#.#####.#
|
||||||
|
#.....#.#.......#...#...#.....#.#...#.....#.#.#.#...#.#.#.....#...#...#...#.......#.....#.#.....#.........#.#.....#.#.#.......#.#...#.....#.#
|
||||||
|
###.#.#.#.#.###.#.###.#.###.###.#.###.###.#.#.#.###.#.#.#.#######.#######.###.###.#######.###.###########.#.#######.#.#.###.#.#.#.###.#.#.###
|
||||||
|
#...#.#.#.#...#...#.......#...#...#.....#.#.#.#.#...#.#...#.....#.......#.#...#.#...#...#...#.#.........#.....#.....#...#...#...#...#.#.#...#
|
||||||
|
#.###.###.###.###.#.#####.###.#.###.###.#.#.###.#.#####.###.#.#####.###.#.#.###.###.#.#.###.#.###.#####.#.###.#.###########.#########.#.#.#.#
|
||||||
|
#...#.......#.#...#.#...#.#...#.....#...#.#...#.#.#.....#...#.#...#...#...#...#.....#.#.....#...#.#.....#.....#.............#.......#...#...#
|
||||||
|
###.#########.#####.#.#.#.#####.#####.###.###.#.#.#.#####.###.#.#.###.#.###.#.#.###.#.#########.###.###.#.#####.#####.#####.#.#.###.#.###.#.#
|
||||||
|
#...#.....#...#.......#.#.#.....#.....#.#.....#.#...#.....#.#...#.#...#...#.#.....#.#.#.....#.....#...#.#...#.........#...#.#...#...........#
|
||||||
|
#.###.###.#.###.#######.#.#.#####.#####.#.###.#.#.###.#####.#####.#.#####.#.#####.#.#.#.###.#####.###.#.###.###.#######.###.#.#.#.###.#.###.#
|
||||||
|
#.#...#...#.....#...#...#.#.#...#.#...#...#...#.#.#...#.........#...#.....#...#...#.#.....#...#.#...#.#...#.....#.....#.....#.#.#.......#...#
|
||||||
|
#.#.###.#######.#.#.#.###.#.#.#.#.#.#.#.###.###.###.###.#.###.#.#####.#######.#.###.#####.###.#.###.#.###########.###.#.#######.###########.#
|
||||||
|
#...............#.#.#...#...#.#...#.#.#.#...#...#...#...#...#.....#...#...#...#...#.#...#.#...#...#.#...........#.#.#...#.....#.....#.....#.#
|
||||||
|
#####.#.#.#.#.#.#.#.#######.#.###.#.#.#.#.###.#.#.#.###.###.#####.#.###.#.#.#####.###.#.###.#.#.###.#.#########.#.#.###.#.###.#.###.#.###.#.#
|
||||||
|
#.....#.#.#.#.....#.........#.#.....#.#.#...#.#.#...#...#...#.....#...#.#...#...#...#.#.....#...#...#.......#.....#.......#.#.#.#...#.#.#.#.#
|
||||||
|
#.#####.###.#############.###.#.#####.###.#.#.#.###.#.###.###.#######.#.#####.#.#.#.#.#######.###.#######.###.###.#.###.#.#.#.###.###.#.#.#.#
|
||||||
|
#.#...#.....#.....#.....#.....#.#...#.......#.#.......#.#.#...#.....#.#...#...#.#...#.#.#.......#.......#.#...#...#.#.#...#.......#.....#.#.#
|
||||||
|
#.#.#.#######.###.#.#.#####.###.#.#.#####.#.#.#.#######.#.#.#.#.###.#.#####.###.###.#.#.#.#####.#######.###.#.#.###.#.###.#########.#####.#.#
|
||||||
|
#...#.....#...#.#.#.#.......#...#.#.....#.#...#.#.........#.#.#.#...........#.#.....#.#.#.....#.......#.....#.#...#.....#...........#...#.#.#
|
||||||
|
#.#####.###.###.#.#.#########.###.#####.#.#.#####.###########.#.#.#.#########.###.###.#.#####.#######.#######.###.#####.#############.#.#.#.#
|
||||||
|
#.#...#...#.....#.#.......#...#.......#.#.#...#...#...#.......#.#.#.......#...#...#...#.....#.......#.....#...#.#...#.#...#.................#
|
||||||
|
#.#.#.###.###.###.###.#.#.#.###.#####.###.###.#.#.#.###.#.#####.#.#####.###.#.#.#.#.#####.#####.#####.#####.###.###.#.###.#.###.#.#.#########
|
||||||
|
#.#.#...#.....#.....#.#.#.#.#.#.#...#.#...#...#...#...#.#.......#.....#.....#.....#.....#.......#...#.#.....#.....#.#.....#.#.#.#.#.#.......#
|
||||||
|
#.###.#.#######.#####.###.#.#.#.#.#.#.#.###.#####.#.#.#.#######.#.#.#.#################.#########.#.#.#.#######.#.#.#######.#.#.#.###.#####.#
|
||||||
|
#.....#.#...#...#.......#.#.#...#.#.#.....#.#.....#.#...#.#.......#.#...#...............#.........#...#...#.....#.#.#...#...#.#.#.#...#...#.#
|
||||||
|
#######.#.#.#.###.#####.#.#.#.###.#.#####.#.#.#####.#.###.#.#######.###.#.#.#############.#######.#######.#.#####.#.#.#.#.###.#.#.#.###.#.#.#
|
||||||
|
#.....#.#.#.#.....#.......#.#...#.#...#...#.#...#.#...#.#...#.#.....#.#.#.#.#.........#...#.....#.#.......#.#...#.#...#.#...#...#.#.........#
|
||||||
|
#.#####.#.#########.#.#.###.#.###.###.#.###.###.#.###.#.#.###.#.#####.#.#.###.#######.#.#####.###.#.#######.#.###.#####.###.#.###.#####.###.#
|
||||||
|
#.......#.#.........#.#.#...#.#.....#.#...#...#.#.....#.......#.....#.#.#...#.......#.#.#.....#...#.....#...#...#.#...#.....#.#.........#...#
|
||||||
|
#.#######.#.#########.#.#.###.#.#####.###.#.###.#.#########.#######.#.#.###.#.#######.#.#.#####.#######.#.###.#.#.###.#.#.###.#######.###.#.#
|
||||||
|
#...#.....#.....#...#.#.#.#...#.#.....#...#...#.#.......#...#.......#.#.#.#...#...#...#.#...#.......#...#.#...#...#...#.#.#...............#.#
|
||||||
|
###.#.#.#######.###.#.###.#.###.#.###.#######.#.#######.#.###.#######.#.#.#####.#.#.###.###.#.#######.###.###.#####.#.#.#.#.#########.#####.#
|
||||||
|
#...#.#.......#.#...#.....#.#.#.#...#.#.........#.....#.#...#.#...#.....#.....#.#.#.#.....#.....#.....#.#...#.#.....#.#.#.#.#.....#.......#.#
|
||||||
|
#.###.###.###.#.#.###.#.###.#.#.###.###.#.#########.#.#.#####.###.#.#####.#####.#.#.#.###.###.###.#####.#.#.#.#####.#.#.#.###.###.###.###.#.#
|
||||||
|
#...#...#.#...#.#.....#.#.....#.#.#.....#...........#.#.#...#.#...#.#.......#...#.#.#...#...#.#...#.#.....#.#.......#.#.#.....#...#...#...#.#
|
||||||
|
###.#####.#.###.#.#####.#####.#.#.#############.#######.#.#.#.#.#.#.#######.#.###.#.###.###.###.###.#.#####.###.###.###.#.#####.###.#.#####.#
|
||||||
|
#.#...#...#.#...#.....#...#...#...#.........#...#.....#.#.#...#.#...........#...#...#...#.#.....#...#.....#.#.....#.#...#...#...#.........#.#
|
||||||
|
#.###.#.#####.#####.#.###.#######.#.###.#####.###.###.#.#.#####.#.#######.#.###.#####.###.#######.#####.###.#.###.###.#####.#.#######.###.#.#
|
||||||
|
#...#...#.....#.#.......#.......#.#...#.#...#.........#.#.#.....#.........#...#.#.....#.........#.#.....#...#.#.#.#...#...#.#.......#...#...#
|
||||||
|
#.#####.#.#####.#.#####.###.###.#.###.#.#.#.#######.###.#.#.###############.###.#.#########.###.#.#.#####.#.#.#.#.#.###.###.#######.###.#.###
|
||||||
|
#.....#.#.#...#...#...#.........#...#.#.#.#.....#...#...#.......#...........#...#.........#.#...#.#.#...#...#.#.#...#.............#.#.#...#.#
|
||||||
|
#.#.###.#.#.#.#####.#.#############.#.#.#.#.#####.#.#.###.#####.#.###########.#####.#.###.#.#.###.#.#.#.#.#.#.#.#####.###.#####.###.#.###.#.#
|
||||||
|
#.#.....#.#.#.......#...........#...#.#...#.#.....#.#...#.....#.#.#.....#.............#...#.#...#...#.#.....#.#...#...........#.#...#...#.#.#
|
||||||
|
#.#######.#.###################.#.###.#####.#.#########.#####.#.#.###.#.#.#.###.#######.###.###.###.#.#####.#.#.###.###.#####.#.#.###.#.#.#.#
|
||||||
|
#.#.......#.#.........#.....#...#.#.#.....#.#.........#.......#...#...#.#.#.......#...#.#...#.....#.#.#...#...#.....#...#...#.#.#...#.#.#...#
|
||||||
|
#.#.#.#####.#.#######.#.###.#.###.#.#.#####.#########.#########.###.###.#.###.###.#.#.#.###.#####.###.#.#.#.###.#.###.###.#.#.#####.###.###.#
|
||||||
|
#.#.#.#...#...#.....#.#.#...#.....#...#.....#...........#.....#.#.#...#.#...#.#.#.#.#.#...#.....#.....#.#.#...#...#.#.#...#.#.....#...#.....#
|
||||||
|
###.###.#.#####.#.#.#.#.#.#########.###.###.#.###########.###.#.#.#.#.#.###.#.#.#.#.#.###.#####.#######.#.###.###.#.#.#.#########.###.#####.#
|
||||||
|
#...#...#.......#...#...#.#...#...............................#.#...#.#...#.#.#.#...#...#.......#...#.........#.....#.#.........#...#.....#.#
|
||||||
|
#.###.#######.###.###.###.#.#.#.###.#####.#.#######.#.#.#.#.###.#.###.#####.#.#.#######.#######.#.#.#.#####.#.###.###.#.#####.#.###.###.#.#.#
|
||||||
|
#...#.......#...#.......#.#.#.....#.#.....#.....#...#.#.#.#.....#.#.#...#...#.#.....#...#...#...#.#.#.#...#.#.#.......#.#...#.#.#.#.....#.#.#
|
||||||
|
###.#######.###.#.###.###.###.#####.#.#########.#.###.#.#.#######.#.#.#.#.###.#.###.#.#.#.###.###.#.#.###.#.#.#.#.#####.###.#.#.#.#####.#.#.#
|
||||||
|
#.....#...#.#.#...#.#.....#...................#.#.....#.#.#.....#.#.#...#.....#.#.#.#...#.#...#...#.#.....#...#.#.....#.....#.#.#...#.#...#.#
|
||||||
|
#.###.#.#.#.#.###.#.#.#####.#.#.###.#.#####.#.#.#######.#.#.#.###.#.#.#########.#.#.###.#.#.#.#.###.#####.###.#.#.###.#######.#.#.#.#.#.###.#
|
||||||
|
#...#...#.#...........................#...#.#.#.#.....#...#.#.....#.#.............#.#...#...#...#.#.#...#.#.....#.#.#.#.......#...#.........#
|
||||||
|
###.#####.#######.###.#####.#.###.#.#.#.#.#.###.#.###.#########.###.#.#############.#.#.#####.###.#.#.#.#.###.###.#.#.#.#######.#######.###.#
|
||||||
|
#...#...........#.#.....#...#.....#...#.#.#.....#.#.#.#.......#.#...........#.......#.....#...#...#.#.#.#...#...#.#.#...#.......#...#.......#
|
||||||
|
#.###############.#.###.#.###.###.#.###.#.#######.#.#.#.#.###.#.#.#.#.#######.#####.###.#.#.#.###.#.#.#.###.###.#.#.#####.#######.#.#.#.#.###
|
||||||
|
#.#...#.....#...#.#...#.#.#...#.#...#...#.#.......#.#.#.#.#...#...#.............#...#...#...#.....#...#...#.....#.#.......#.......#...#.#...#
|
||||||
|
#.#.#.#.###.#.#.#.###.#.#.#.#.#.###.#.###.###.#####.#.#.#.#.#########.#########.#.#####.#####.###.#######.#######.#########.###########.###.#
|
||||||
|
#S..#.....#...#.......#...#...........#.......#...........#...........#...............................................................#.....#
|
||||||
|
#############################################################################################################################################
|
||||||
15
16/testinput
Normal file
15
16/testinput
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
###############
|
||||||
|
#.......#....E#
|
||||||
|
#.#.###.#.###.#
|
||||||
|
#.....#.#...#.#
|
||||||
|
#.###.#####.#.#
|
||||||
|
#.#.#.......#.#
|
||||||
|
#.#.#####.###.#
|
||||||
|
#...........#.#
|
||||||
|
###.#.#####.#.#
|
||||||
|
#...#.....#.#.#
|
||||||
|
#.#.#.###.#.#.#
|
||||||
|
#.....#...#.#.#
|
||||||
|
#.###.#.#.#.#.#
|
||||||
|
#S..#.....#...#
|
||||||
|
###############
|
||||||
Reference in New Issue
Block a user