import shared import matrix from collections import Counter import numpy as np size = 75 def pt2(dirs): r = size c = size mx = np.array(matrix.matrix_of_size(r*2+1,c*2+1)) mx[r][c] = '2' # initial house for d in dirs[::2]: mx,r,c = move(mx, r, c, d) r=size c=size for d in dirs[1::2]: mx,r,c = move(mx, r, c, d) matrix.pmx(mx,pad=False,space=False) count(mx) def pt1(dirs): r = size c = size mx = np.array(matrix.matrix_of_size(r*2+1,c*2+1)) mx[r][c] = '1' # initial house for d in dirs: mx,r,c = move(mx, r, c, d) matrix.pmx(mx,pad=False,space=False) count(mx) def move(mx, r, c, d): h, w = mx.shape d_r = 0 d_c = 0 match d: case '<': d_c = -1 case '>': d_c = 1 case '^': d_r = -1 case 'v': d_r = 1 c += d_c r += d_r mx[r][c] += 1 return mx,r,c def add_pad(mx, d): return np.pad(mx, d, mode='constant', constant_values=0) def count(mx): flat = np.ravel(mx).tolist() total = len([x for x in flat if x]) print(total) def main(): with open(shared.get_fname(3), "r") as f: inp = [x for x in f.read().rstrip()] pt1(inp) pt2(inp) if __name__ == "__main__": main()