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…
Reference in new issue