from aocd import get_data from aocd import submit input_data = get_data(day=5, year=2021) test_data = """0,9 -> 5,9 8,0 -> 0,8 9,4 -> 3,4 2,2 -> 2,1 7,0 -> 7,4 6,4 -> 2,0 0,9 -> 2,9 3,4 -> 1,4 0,0 -> 8,8 5,5 -> 8,2""" lines = input_data.split("\n") # lines = test_data.split("\n") import re import numpy as np lineSegments = [] def readDataLine(line): m = re.search('([0-9]*),([0-9]*)\s->\s([0-9]*),([0-9]*)', line) if m: segment = [int(m.group(1)),int(m.group(2)),int(m.group(3)),int(m.group(4))] return segment else: return [] for line in lines: lineSegment = readDataLine(line) if lineSegment != []: lineSegments.append(lineSegment) print(lineSegments) largestVal = np.amax(lineSegments,axis=0) print(largestVal) ### create 2d array MainArray = np.zeros((largestVal[0] + 10,largestVal[3] + 10 ), dtype = int) print(MainArray) for line in lineSegments: print("LINE---------") print(line) X_start = line[0] Y_start = line[1] X_end = line[2] Y_end = line[3] Y_max = max(Y_start, Y_end) Y_min = min(Y_start, Y_end) X_max = max(X_start, X_end) X_min = min(X_start, X_end) ###ROWS if X_start == X_end: for j in range(Y_min,Y_max + 1): MainArray[j,X_start] += 1 ###COLUMNS elif Y_start == Y_end: for i in range(X_min,X_max + 1): # print("X:" + str(i)) MainArray[Y_start,i] += 1 ###DIAGS else: if Y_start < Y_end: j_array = list(range(Y_start,Y_end + 1,1)) else: j_array = list(range(Y_start,Y_end - 1, -1)) if X_start < X_end: print("B") i_array = list(range(X_start,X_end + 1,1)) else: print(X_end, X_start) print("C") i_array = list(range(X_start,X_end - 1, -1)) print("XXXXXXXXXXXXXXXXX===================================") print(j_array) print(i_array) for index, j in enumerate(j_array): # print(j,i_array[index]) MainArray[j,i_array[index]] += 1 print(MainArray) print( (MainArray>1).sum() ) submit( (MainArray>1).sum() )