Jonatan Gezelius 3 éve
szülő
commit
922b545e9c
4 módosított fájl, 422 hozzáadás és 0 törlés
  1. 60 0
      2022/10/a.py
  2. 76 0
      2022/10/b.py
  3. 146 0
      2022/10/example.txt
  4. 140 0
      2022/10/infile.txt

+ 60 - 0
2022/10/a.py

@@ -0,0 +1,60 @@
+import os, argparse
+
+def solve_task(lines):
+    c = CRT()
+    signal_strengths = []
+    for line in lines:
+        signal_strengths.extend(c.parse_instruction(line))
+    
+    total = sum(signal_strengths)
+    
+    print(signal_strengths)
+    print(f"Total signal strength: {total}")
+
+class CRT:
+    def __init__(self):
+        self.x = 1
+        self.cycle = 0
+    
+    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.cycle += 1
+        if (self.cycle+20) % 40 == 0:
+            to_return = [self.cycle*self.x]
+        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()

+ 76 - 0
2022/10/b.py

@@ -0,0 +1,76 @@
+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()

+ 146 - 0
2022/10/example.txt

@@ -0,0 +1,146 @@
+addx 15
+addx -11
+addx 6
+addx -3
+addx 5
+addx -1
+addx -8
+addx 13
+addx 4
+noop
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx -35
+addx 1
+addx 24
+addx -19
+addx 1
+addx 16
+addx -11
+noop
+noop
+addx 21
+addx -15
+noop
+noop
+addx -3
+addx 9
+addx 1
+addx -3
+addx 8
+addx 1
+addx 5
+noop
+noop
+noop
+noop
+noop
+addx -36
+noop
+addx 1
+addx 7
+noop
+noop
+noop
+addx 2
+addx 6
+noop
+noop
+noop
+noop
+noop
+addx 1
+noop
+noop
+addx 7
+addx 1
+noop
+addx -13
+addx 13
+addx 7
+noop
+addx 1
+addx -33
+noop
+noop
+noop
+addx 2
+noop
+noop
+noop
+addx 8
+noop
+addx -1
+addx 2
+addx 1
+noop
+addx 17
+addx -9
+addx 1
+addx 1
+addx -3
+addx 11
+noop
+noop
+addx 1
+noop
+addx 1
+noop
+noop
+addx -13
+addx -19
+addx 1
+addx 3
+addx 26
+addx -30
+addx 12
+addx -1
+addx 3
+addx 1
+noop
+noop
+noop
+addx -9
+addx 18
+addx 1
+addx 2
+noop
+noop
+addx 9
+noop
+noop
+noop
+addx -1
+addx 2
+addx -37
+addx 1
+addx 3
+noop
+addx 15
+addx -21
+addx 22
+addx -6
+addx 1
+noop
+addx 2
+addx 1
+noop
+addx -10
+noop
+noop
+addx 20
+addx 1
+addx 2
+addx 2
+addx -6
+addx -11
+noop
+noop
+noop

+ 140 - 0
2022/10/infile.txt

@@ -0,0 +1,140 @@
+addx 2
+addx 15
+addx -11
+addx 6
+noop
+noop
+noop
+addx -1
+addx 5
+addx -1
+addx 5
+noop
+noop
+noop
+noop
+noop
+addx 7
+addx -1
+addx 3
+addx 1
+addx 5
+addx 1
+noop
+addx -38
+noop
+addx 1
+addx 6
+addx 3
+noop
+addx -8
+noop
+addx 13
+addx 2
+addx 3
+addx -2
+addx 2
+noop
+addx 3
+addx 9
+addx -2
+addx 2
+addx -10
+addx 11
+addx 2
+addx -14
+addx -21
+addx 2
+noop
+addx 5
+addx 29
+addx -2
+noop
+addx -19
+noop
+addx 2
+addx 11
+addx -10
+addx 2
+addx 5
+addx -9
+noop
+addx 14
+addx 2
+addx 3
+addx -2
+addx 3
+addx 1
+noop
+addx -37
+noop
+addx 13
+addx -8
+noop
+noop
+noop
+noop
+addx 13
+addx -5
+addx 3
+addx 3
+addx 3
+noop
+noop
+noop
+noop
+noop
+noop
+noop
+addx 6
+addx 3
+addx 1
+addx 5
+addx -15
+addx 5
+addx -27
+addx 30
+addx -23
+addx 33
+addx -32
+addx 2
+addx 5
+addx 2
+addx -16
+addx 17
+addx 2
+addx -10
+addx 17
+addx 10
+addx -9
+addx 2
+addx 2
+addx 5
+addx -29
+addx -8
+noop
+noop
+noop
+addx 19
+addx -11
+addx -1
+addx 6
+noop
+noop
+addx -1
+addx 3
+noop
+addx 3
+addx 2
+addx -3
+addx 11
+addx -1
+addx 5
+addx -2
+addx 5
+addx 2
+noop
+noop
+addx 1
+noop
+noop