remove pointless check, tabify

This commit is contained in:
Luke Hubmayer-Werner 2022-12-12 17:21:51 +10:30
parent 4cea8b4043
commit ba924fc41c
1 changed files with 33 additions and 52 deletions

View File

@ -9,61 +9,42 @@ accszExk
acctuvwj acctuvwj
abdefghi'''.strip().split('\n') abdefghi'''.strip().split('\n')
def make_heightmap(lines: list[str]) -> tuple[ArrayLike, ArrayLike, ArrayLike]:
heightmap = np.zeros((len(lines[0]), len(lines)), dtype=dtype)
for y, line in enumerate(lines):
for x, c in enumerate(line):
if c == 'S':
heightmap[x,y] = 0
start = np.array([x,y], dtype=dtype)
elif c == 'E':
heightmap[x,y] = 25
end = np.array([x,y], dtype=dtype)
else:
heightmap[x,y] = ord(c) - ord('a')
return heightmap, start, end
# def make_cell_costs(position, heightmap): def make_heightmap(lines: list[str]) -> tuple[ArrayLike, ArrayLike, ArrayLike]:
# init_val = 9_999_999 heightmap = np.zeros((len(lines[0]), len(lines)), dtype=dtype)
# costs = np.full_like(heightmap, init_val) for y, line in enumerate(lines):
# pos_t = tuple(position) for x, c in enumerate(line):
# costs[pos_t] = 0 if c == 'S':
# curr_positions = {pos_t} heightmap[x,y] = 0
# while (costs == init_val).any() and len(curr_positions) > 0: start = np.array([x,y], dtype=dtype)
# next_positions = set() elif c == 'E':
# for pos_t in curr_positions: heightmap[x,y] = 25
# n_h_limit = heightmap[pos_t] + 1 end = np.array([x,y], dtype=dtype)
# n_cost = costs[pos_t] + 1 else:
# for d in directions_array: heightmap[x,y] = ord(c) - ord('a')
# next_t = (pos_t[0] + d[0], pos_t[1] + d[1]) return heightmap, start, end
# if (0 <= next_t[0] < heightmap.shape[0]) and (0 <= next_t[1] < heightmap.shape[1]):
# hn = heightmap[next_t]
# if n_h_limit >= hn and costs[next_t] > n_cost:
# costs[next_t] = n_cost
# next_positions.add(next_t)
# curr_positions = next_positions
# return costs
def make_reversed_cell_costs(position, heightmap): def make_reversed_cell_costs(position, heightmap):
init_val = 9_999_999 init_val = 9_999_999
costs = np.full_like(heightmap, init_val) costs = np.full_like(heightmap, init_val)
pos_t = tuple(position) pos_t = tuple(position)
costs[pos_t] = 0 costs[pos_t] = 0
curr_positions = {pos_t} curr_positions = {pos_t}
while (costs == init_val).any() and len(curr_positions) > 0: while len(curr_positions) > 0:
next_positions = set() next_positions = set()
for pos_t in curr_positions: for pos_t in curr_positions:
n_h_limit = heightmap[pos_t] - 1 n_h_limit = heightmap[pos_t] - 1
n_cost = costs[pos_t] + 1 n_cost = costs[pos_t] + 1
for d in directions_array: for d in directions_array:
next_t = (pos_t[0] + d[0], pos_t[1] + d[1]) next_t = (pos_t[0] + d[0], pos_t[1] + d[1])
if (0 <= next_t[0] < heightmap.shape[0]) and (0 <= next_t[1] < heightmap.shape[1]): if (0 <= next_t[0] < heightmap.shape[0]) and (0 <= next_t[1] < heightmap.shape[1]):
hn = heightmap[next_t] hn = heightmap[next_t]
if n_h_limit <= hn and costs[next_t] > n_cost: if n_h_limit <= hn and costs[next_t] > n_cost:
costs[next_t] = n_cost costs[next_t] = n_cost
next_positions.add(next_t) next_positions.add(next_t)
curr_positions = next_positions curr_positions = next_positions
return costs return costs
# heightmap, start, end = make_heightmap(sample_lines) # heightmap, start, end = make_heightmap(sample_lines)
heightmap, start, end = make_heightmap(lines) heightmap, start, end = make_heightmap(lines)