diff --git a/day_10/main.py b/day_10/main.py index f739df6df5163e3113b39e6e5af66f933ec8837c..59ae6317be7de76e3d4fa04812f6587e02a49944 100644 --- a/day_10/main.py +++ b/day_10/main.py @@ -2,18 +2,20 @@ import itertools import math + def input_map(): with open("input.txt") as f: lst = f.readlines() - + return [list(l.strip()) for l in lst] + def get_stroid_addrs(map): stroid_list = [] for row, col in itertools.product(range(len(map)), range(len(map[0]))): - if map[row][col] == '#': - stroid_list.append((row, col)) - # print(f'row{row},col{col} {map[row][col]}') + if map[row][col] == "#": + stroid_list.append((row, col)) + # print(f'row{row},col{col} {map[row][col]}') return stroid_list @@ -27,26 +29,53 @@ def main(): for point in l: angles = set() for point2 in l: - angles.add(math.atan2(point2[0] - point[0], point2[1] - point[1])) + angles.add( math.atan2(point2[0] - point[0], point2[1] - point[1]) * 180 / math.pi) - ac_dict[str(point)] = len(angles) - ac_dict2[str(point)] = angles + ac_dict[point] = len(angles) + ac_dict2[point] = angles - print( max(ac_dict.values())) - maxd = '' + print(max(ac_dict.values())) + maxd = "" for d in ac_dict: if ac_dict[d] == 303: maxd = d break - print(f'Max = {d}') - point = (29, 26) + print(f"Max = {d}") + point = d roid_dict = {} for point2 in l: - roid_dict[str(point2)] = math.atan2(point2[0] - point[0], point2[1] - point[1]) - - print(roid_dict) + if point2 == point: + continue + roid_angle = round((math.atan2(point2[0] - point[0], point2[1] - point[1]) * 180 / math.pi)) + if roid_angle < 0: + roid_angle += 360 + roid_dist = max(point2[0], point[0]) - min(point[0], point2[0]) + max(point2[1], point[1]) - min(point[1], point2[1]) + roid_dict.setdefault(roid_angle, []).append((roid_dist, point2)) + + roid_dict_s = {k:sorted(v) for (k, v) in roid_dict.items()} + + roid_dict = {} + for k in sorted(roid_dict_s): + if k >= 270: + roid_dict[k] = roid_dict_s[k] + for k in sorted(roid_dict_s): + if k < 270: + roid_dict[k] = roid_dict_s[k] + + cnt = 1 + for k in roid_dict: + print(f'#{cnt} {k}° {roid_dict[k].pop(0)}') + cnt += 1 + + for k in roid_dict: + if not roid_dict[k]: + continue + print(f'#{cnt} {k}° {roid_dict[k].pop(0)}') + cnt += 1 + + -if __name__ == '__main__': +if __name__ == "__main__": main()