import sys check = True inpx = [] inpy = [] inp2 = [] with open(sys.argv[1]) as f: for i in f.readlines(): i = i.strip() if i == '': check = False continue if check: temp1, temp2 = i.split(',', 1) inpx.append(int(temp1)) inpy.append(int(temp2)) else: i = i.replace('fold along ', '') i = i.strip() temp1, temp2 = i.split('=', 1) inp2.append((temp1, int(temp2))) maxx = max(inpx) maxy = max(inpy) class grid: def __init__(self, maxx, maxy): self._points = [] for i in range(maxy + 1): self._points.append(['.'] * (maxx + 1)) def mark(self, x, y): self._points[y][x] = '#' def fold(self, axis, loca): if axis == 'y': for i in range(loca + 1, len(self._points)): for t in range(len(self._points[i])): if self._points[i][t] == '#': temp = i - loca self._points[loca -temp][t] = '#' del self._points[loca:len(self._points)] if axis == 'x': for i in range(len(self._points)): for t in range(loca + 1, len(self._points[i])): if self._points[i][t] == '#': temp = t - loca self._points[i][loca - temp] = '#' for f in self._points: del f[loca:len(f)] def count(self): counter = 0 for f in self._points: for g in f: if g == '#': counter += 1 return counter gri = grid(maxx, maxy) folds = 0 for i in range(len(inpx)): gri.mark(inpx[i], inpy[i]) for i in inp2: gri.fold(i[0], i[1]) folds += 1 print('Points after ', folds, 'fold(s):', gri.count()) for i in range(len(gri._points)): print(gri._points[i])