import re from tracemalloc import start import numpy as np import turtle wn = turtle.Screen() wn.bgcolor("light green") wn.title("Turtle") # skk = turtle.Turtle() wn.colormode(255) dir = {"L": [-1,0], "R": [1,0], "U": [0,-1], "D": [0,1]} # f = open('test.txt', 'r') f = open('input.txt', 'r') content = f.read() lines = content.splitlines() current_pos = [0,0] positions = [] positions.append(current_pos) extra = 1 turtle.setpos(*current_pos) for line in lines: parts = line.split(" ") new_dir = dir[parts[0]] current_pos = [current_pos[0] + int(parts[1])*new_dir[0], current_pos[1] + int(parts[1])*new_dir[1]] positions.append(current_pos) if parts[0] == "R" or parts[0] == "U": extra += int(parts[1]) print(current_pos) color_array = [] color_raw = parts[2].strip("(#)") for i in range(3): color_array.append(int(color_raw[i*2:i*2+2], 16)) # print(color_array) # turtle.color(*color_array) # turtle.goto(*current_pos) print(parts) pos_np = np.array(positions) w = np.max(pos_np[:,0]) - np.min(pos_np[:,0]) h = np.max(pos_np[:,1]) - np.min(pos_np[:,1]) pos_np = pos_np-np.array([np.min(pos_np[:,0]), np.min(pos_np[:,1])]) print(pos_np) grid = np.zeros((w+1,h+1)) for pos_idx in range(1,len(pos_np)): max_x = max(pos_np[pos_idx][0], pos_np[pos_idx-1][0]) min_x = min(pos_np[pos_idx][0], pos_np[pos_idx-1][0]) max_y = max(pos_np[pos_idx][1], pos_np[pos_idx-1][1]) min_y = min(pos_np[pos_idx][1], pos_np[pos_idx-1][1]) # grid[min_x:max_x+1,min_y:max_y+1]= 1 sign = 1 if pos_np[pos_idx][0] - pos_np[pos_idx-1][0] >= 0 else -1 # grid[min_x:max_x+1,min_y:max_y+1]= sign if max_y - min_y == 0: grid[min_x:max_x+1,min_y:max_y+1]= sign else: grid[min_x:max_x+1,min_y+1:max_y]= 1 # grid[min_x:max_x+1,max_y-1]= 1 print(grid) from matplotlib import pyplot as plt plt.imshow(grid) plt.show() print(grid.sum()) for row in range(len(grid)): inside = False for col in range(len(grid[0])): if grid[row][col] == 1: inside = True elif grid[row][col] == -1: inside = False grid[row][col] = 1 else: if inside: grid[row][col] = 1 # grid[0][0] = -1 # for row in range(len(grid)): # max_x = min(row+1, len(grid)-1) # min_x = max(row-1, 0) # inside = False # for col in range(len(grid[0])): # if grid[row][col] != 1: # max_y = min(col+1, len(grid)-1) # min_y = max(col-1, 0) # grid[row][col] = np.min(grid[min_x:max_x+1,min_y:max_y+1]) plt.imshow(grid) plt.show() # turtle.done() f.close() print(grid.sum()) x=pos_np[:,0] y=pos_np[:,1] i=np.arange(len(x)) def calc_area(points): a = 0 for i in range(1, len(points)): temp = points[i]-points[i-1] # prinet(temp) a += temp[0]*points[i][1]#*temp[1] # if temp[0] == 0: # a += np.abs(temp[1])*points[i][0]#*temp[1] # else: # a += np.abs(temp[0])*points[i][1]#*temp[1] return a Area = calc_area(pos_np) print(Area) x=pos_np[:,0] y=pos_np[:,1] i=np.arange(len(x)) Area=np.abs(np.sum((x[i-1])*(y[i])-(x[i])*(y[i-1]))*0.5) print(Area+extra)