master
Tom Weber 2 years ago
parent c5115a7e11
commit be0f98f49c

@ -0,0 +1,5 @@
Sabqponm
abcryxxl
accszExk
acctuvwj
abdefghi

@ -0,0 +1,89 @@
lines = open("input.txt", "r").read().splitlines()
relief = []
s = None
e = None
for i, line in enumerate(lines):
els = []
for j, letter in enumerate(line):
if letter == "S":
els.append(1)
s = (i, j)
elif letter == "E":
els.append(26)
e = (i, j)
else:
els.append(ord(letter) - 96)
relief.append(els)
class Node:
def __init__(self, x, y):
self.x = x
self.y = y
self.g = 999999
self.h = (e[0] - self.x) + (e[1] - self.y)
self.parent = None
def f(self):
return self.g + self.h
def get_children(self):
children = []
if self.x != 0 and relief[self.x][self.y] + 1 >= relief[self.x - 1][self.y]:
children.append(Node(self.x - 1, self.y))
if (
self.x != len(relief) - 1
and relief[self.x][self.y] + 1 >= relief[self.x + 1][self.y]
):
children.append(Node(self.x + 1, self.y))
if self.y != 0 and relief[self.x][self.y] + 1 >= relief[self.x][self.y - 1]:
children.append(Node(self.x, self.y - 1))
if (
self.y != len(relief[0]) - 1
and relief[self.x][self.y] + 1 >= relief[self.x][self.y + 1]
):
children.append(Node(self.x, self.y + 1))
return children
def a_start_search(start, goal):
start_node = Node(start[0], start[1])
start_node.g = 0
openSet = [start_node]
while len(openSet) > 0:
current_index, current_node = get_smallest_f(openSet)
if current_node.x == goal[0] and current_node.y == goal[1]:
return current_node.g
openSet.pop(current_index)
for child in current_node.get_children():
tentative_gScore = current_node.g + 1
if tentative_gScore < child.g:
child.parent = current_node
child.g = tentative_gScore
if not_in_set(child, openSet):
openSet.append(child)
return None
def get_smallest_f(openset):
smallest = 999999
smallest_node = None
smallest_idx = 99999
for idx, node in enumerate(openset):
if node.f() < smallest:
smallest = node.f()
smallest_node = node
smallest_idx = idx
return smallest_idx, smallest_node
def not_in_set(node, openset):
for n in openset:
if n.x == node.x and n.y == node.y:
return False
return True
print(a_start_search(s, e))

@ -0,0 +1,41 @@
abaaaaacaaaacccccccccaaaaaaccccccccccccccccccccccccccccccccccaaaaaa
abaaaaacaaaaccccaaaaaaaaaacccccccccccccccccccccccccccccccccccaaaaaa
abaaacccaaaaccccaaaaaaaaaaacccaacccccccccccaacccccccccccccccccaaaaa
abaaaacccaacccccaaaaaaaaaaaaaaaaacccccccccccacccccccccccccccccccaaa
abacaacccccccccccaaaaaaaaaaaaaaaaccccccccccaacccccccccccccccccccaaa
abcccacccccccccccaaaaaaaccaaaaaaaccccccccccclllcccccacccccccccccaac
abccccccccccccccccaaaaaccccccccccccccccccclllllllcccccccccccccccccc
abaaacccccccccccccaaaaaccccccccccccccccaakklllllllcccccccccaacccccc
abaaacccccccccccacccaaaccccccccccccccccakkklpppllllccddaaacaacccccc
abaaacccaaacccccaacaaaccccccccccccccccckkkkpppppllllcddddaaaacccccc
abaacccaaaacccccaaaaaccccccccccccccccckkkkpppppppllmmddddddaaaacccc
abaaaccaaaaccccccaaaaaacaaacccccccccckkkkpppuuuppplmmmmdddddaaacccc
abaaacccaaaccccaaaaaaaacaaaaccccccckkkkkoppuuuuuppqmmmmmmdddddacccc
abcccccccccccccaaaaaaaacaaaacccccjkkkkkooppuuuuuuqqqmmmmmmmddddcccc
abccccccccccccccccaaccccaaaccccjjjjkoooooouuuxuuuqqqqqqmmmmmddecccc
abacaaccccccccccccaacccccccccccjjjjoooooouuuxxxuvvqqqqqqqmmmeeecccc
abaaaacccccccacccaccccccccccccjjjjoootuuuuuuxxxyvvvvvqqqqmmmeeecccc
abaaaaacccccaaacaaacccccccccccjjjoooottuuuuuxxyyvvvvvvvqqmnneeecccc
abaaaaaccaaaaaaaaaaccccccccaccjjjooottttxxxxxxyyyyyyvvvqqnnneeecccc
abaaaccccaaaaaaaaaacccccccaaccjjjoootttxxxxxxxyyyyyyvvqqqnnneeecccc
SbcaaccccaaaaaaaaaaccccaaaaacajjjnnntttxxxxEzzzyyyyvvvrrqnnneeccccc
abcccccccaaaaaaaaaaacccaaaaaaaajjjnnntttxxxxyyyyyvvvvrrrnnneeeccccc
abcccccccaaaaaaaaaaacccccaaaaccjjjnnnnttttxxyyyyywvvrrrnnneeecccccc
abcccccccccaaaaaaccaccccaaaaaccciiinnnnttxxyyyyyyywwrrnnnneeecccccc
abccccccccccccaaacccccccaacaaaccciiinnnttxxyywwyyywwrrnnnffeccccccc
abccccccccccccaaacccccccaccaaaccciiinnnttwwwwwwwwwwwrrrnnfffccccccc
abccccccccccccccccccccccccccccccciiinnnttwwwwsswwwwwrrrnnfffccccccc
abaaaccaaccccccccccccccccccccccccciinnnttswwwssswwwwrrroofffacccccc
abaaccaaaaaacccccccccccccccccaaacciinnntssssssssssrrrrooofffacccccc
abaccccaaaaacccccccaaacccccccaaaaciinnnssssssmmssssrrrooofffacccccc
abaacaaaaaaacccccccaaaaccccccaaaaciiinmmmssmmmmmoosroooooffaaaacccc
abaaaaaaaaaaaccccccaaaaccccccaaacciiimmmmmmmmmmmoooooooofffaaaacccc
abcaaaaaaaaaaccccccaaaaccccccccccccihhmmmmmmmhggoooooooffffaaaccccc
abcccccaaacaccccccccaaccccccccccccchhhhhhhhhhhggggggggggffaaacccccc
abaccccaacccccccccccaaaccccccccccccchhhhhhhhhhgggggggggggcaaacccccc
abaaaccccaccccccccccaaaacccaacccccccchhhhhhhaaaaaggggggcccccccccccc
abaaaccccaaacaaaccccaaaacaaaacccccccccccccccaaaacccccccccccccccaaac
abaacccccaaaaaaaccccaaaaaaaaacccccccccccccccaaacccccccccccccccccaaa
abaaaccccaaaaaaccccaaaaaaaaccccccccccccccccccaacccccccccccccccccaaa
abccccccaaaaaaaaaaaaaaaaaaacccccccccccccccccaaccccccccccccccccaaaaa
abcccccaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccccccaaaaaa
Loading…
Cancel
Save