Update day 22.

This commit is contained in:
Mikael CAPELLE 2022-12-22 17:22:56 +01:00
parent dca6f6a08f
commit 8c24b9f9e2

View File

@ -78,13 +78,14 @@ def wrap_part_2(y0: int, x0: int, r0: str) -> tuple[int, int, str]:
return y0, row_last_non_void[y0], "W" return y0, row_last_non_void[y0], "W"
elif r0 == "S": elif r0 == "S":
if x0 in range(0, 4): if x0 in range(0, 4):
... y0 = board.shape[0] - 1
return y0, row_first_non_void[y0] + 3 - x0, "N"
elif x0 in range(4, 8): elif x0 in range(4, 8):
y0 = col_last_non_void[x0] + 8 - x0 y0 = col_last_non_void[x0] + 8 - x0
return y0, row_first_non_void[y0], "E" return y0, row_first_non_void[y0], "E"
elif x0 in range(8, 12): elif x0 in range(8, 12):
# 8 -> 3, 9 -> 2 # 8 -> 3, 9 -> 2
x0 = 12 - x0 - 1 x0 = board.shape[0] - x0 - 1
return col_last_non_void[x0], x0, "N" return col_last_non_void[x0], x0, "N"
else: else:
y0 = col_first_non_void[0] + board.shape[1] - x0 - 1 y0 = col_first_non_void[0] + board.shape[1] - x0 - 1
@ -100,25 +101,40 @@ def wrap_part_2(y0: int, x0: int, r0: str) -> tuple[int, int, str]:
x0 = 4 + board.shape[0] - y0 - 1 x0 = 4 + board.shape[0] - y0 - 1
return col_last_non_void[x0], x0, "N" return col_last_non_void[x0], x0, "N"
elif r0 == "N": elif r0 == "N":
return col_last_non_void[x0], x0, r0 if x0 in range(0, 4):
y0 = 0
return y0, row_first_non_void[y0] + 3 - x0, "S"
elif x0 in range(4, 8):
y0 = x0 - 4
return y0, row_first_non_void[y0], "E"
elif x0 in range(8, 12):
x0 = 11 - x0
return col_first_non_void[x0], x0, "S"
else:
y0 = 4 + board.shape[0] - x0 - 1
return y0, row_last_non_void[y0], "W"
assert False assert False
for i in range(4): # for i in range(4):
print(wrap_part_2(i, 8 + i - 1, "E")) # print(wrap_part_2(i, 8 + i - 1, "E"))
exit() # exit()
wrap = wrap_part_2 wrap = wrap_part_2
print(y0, x0, r0) print(y0, x0, r0)
facing = np.zeros_like(board, dtype=str)
facing.fill(" ")
for direction in directions: for direction in directions:
# print(f"{y0} {x0} {r0} ({direction})") # print(f"{y0} {x0} {r0} ({direction})")
# r1 = {"N": "S", "S": "N", "W": "E", "E": "W"}[r0] # r1 = {"N": "S", "S": "N", "W": "E", "E": "W"}[r0]
# print(f"{board.shape[0] - y0 - 1} {board.shape[1] - x0 - 1} {r1} ({direction})") # print(f"{board.shape[0] - y0 - 1} {board.shape[1] - x0 - 1} {r1} ({direction})")
facing[y0, x0] = {"E": ">", "W": "<", "N": "^", "S": "v"}[r0]
if isinstance(direction, int): if isinstance(direction, int):
while direction > 0: while direction > 0:
@ -210,6 +226,10 @@ for direction in directions:
"S": {"L": "E", "R": "W"}, "S": {"L": "E", "R": "W"},
}[r0][direction] }[r0][direction]
facing[y0, x0] = {"E": ">", "W": "<", "N": "^", "S": "v"}[r0]
print("\n".join(map("".join, facing)))
if invert: if invert:
print(y0, x0, r0, "->", end=" ") print(y0, x0, r0, "->", end=" ")
x0, y0, r0 = ( x0, y0, r0 = (