day 22
This commit is contained in:
parent
be2ccabe7c
commit
ef01a6e885
|
@ -0,0 +1,87 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
X = 0
|
||||||
|
Y = 1
|
||||||
|
GI = 0
|
||||||
|
EL = 1
|
||||||
|
TYPE = 2
|
||||||
|
|
||||||
|
|
||||||
|
class Tile(Enum):
|
||||||
|
ROCKY = 0
|
||||||
|
WET = 1
|
||||||
|
NARROW = 2
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with open("input.txt") as f:
|
||||||
|
depth = int(f.readline().split(" ")[1])
|
||||||
|
target = tuple([int(i) for i in f.readline().split(" ")[1].split(",")])
|
||||||
|
# print(depth)
|
||||||
|
# print(target)
|
||||||
|
|
||||||
|
# depth = 510
|
||||||
|
# target = (10, 10)
|
||||||
|
|
||||||
|
target2 = (target[X] + 1, target[Y] + 1)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Type is based on erosion level (EL)
|
||||||
|
EL based on geologic index (GI)
|
||||||
|
GI based on rules
|
||||||
|
|
||||||
|
00 01 03 06 10 15
|
||||||
|
02 04 07 11 16 21
|
||||||
|
05 08 12 17 22 26
|
||||||
|
09 13 18 23 27 30
|
||||||
|
14 19 24 28 31 33
|
||||||
|
20 25 29 32 34 35
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
world = {} # mapping of (x,y) to (GI, EL)
|
||||||
|
|
||||||
|
def calcGi(coord):
|
||||||
|
nonlocal world
|
||||||
|
if coord == (0, 0):
|
||||||
|
return 0 # gi hard coded to 0
|
||||||
|
elif coord == target:
|
||||||
|
return 0 # gi hard coded to 0
|
||||||
|
elif coord[Y] == 0:
|
||||||
|
return coord[X] * 16807 # X coordinate times 16807.
|
||||||
|
elif coord[X] == 0:
|
||||||
|
return coord[Y] * 48271 # Y coordinate times 48271.
|
||||||
|
else:
|
||||||
|
# result of multiplying the erosion levels of the regions at X-1,Y and X,Y-1.
|
||||||
|
return world[(coord[X] - 1, coord[Y])][EL] * world[(coord[X], coord[Y] - 1)][EL]
|
||||||
|
|
||||||
|
# https://stackoverflow.com/a/20422854
|
||||||
|
for k in range(0, target2[X] + target2[Y] - 1):
|
||||||
|
for y in range(0, k + 1):
|
||||||
|
x = k - y
|
||||||
|
if x < target2[X] and y < target2[Y]:
|
||||||
|
gi = calcGi((x, y))
|
||||||
|
el = (gi + depth) % 20183
|
||||||
|
world[(x,y)] = (gi, el, Tile(el % 3))
|
||||||
|
# print((x,y))
|
||||||
|
|
||||||
|
# print(world)
|
||||||
|
|
||||||
|
total = 0
|
||||||
|
|
||||||
|
for y in range(0, target[Y] + 1):
|
||||||
|
for x in range(0, target[X] + 1):
|
||||||
|
total += world[(x,y)][TYPE].value
|
||||||
|
|
||||||
|
print(total)
|
||||||
|
|
||||||
|
# populate world with risk values
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1,2 @@
|
||||||
|
depth: 8112
|
||||||
|
target: 13,743
|
Loading…
Reference in New Issue