import os, argparse def solve_task(lines): c = CRT() signal_strengths = [] print(c) for line in lines: signal_strengths.extend(c.parse_instruction(line)) total = sum(signal_strengths) print(signal_strengths) print(f"Total signal strength: {total}") print(c) class CRT: def __init__(self): self.x = 1 self.cycle = 0 self.screen = [['.' for x in range(40)] for y in range(6)] def parse_instruction(self, instruction): states_to_return = [] tokens = instruction.split() if tokens[0] == "noop": states_to_return.extend(self.tick()) else: xdiff = int(tokens[1]) states_to_return.extend(self.tick()) states_to_return.extend(self.tick()) self.x += xdiff return states_to_return def tick(self): to_return = [] self.update_screen() self.cycle += 1 if (self.cycle+20) % 40 == 0: to_return = [self.cycle*self.x] return to_return def update_screen(self): y = self.cycle // 40 x = self.cycle % 40 hit = abs(x-self.x) <= 1 self.screen[y][x] = '#' if hit else '.' def __str__(self): to_return = str() for line in self.screen: to_return += ''.join(line) + "\n" return to_return def read_lines(filename): lines = [] with open(filename) as infile: for raw_line in infile: line = raw_line.rstrip() lines.append(line) return lines def parse_arguments(): parser = argparse.ArgumentParser(description="Script that solves the case",epilog="Have a nice day!") parser.add_argument('filename', nargs='?', default="example.txt", help='Input file') args = parser.parse_args() return args def main(): args = parse_arguments() lines = read_lines(args.filename) solve_task(lines) if __name__ == "__main__": main()