Taddeus Kroes 5 лет назад
Родитель
Сommit
ee12c9734f
3 измененных файлов с 7 добавлено и 7 удалено
  1. 2 2
      2020/01_expense.py
  2. 3 3
      2020/07_bags.py
  3. 2 2
      2020/08_loop.py

+ 2 - 2
2020/01_expense.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 import sys
 from functools import reduce
-from itertools import combinations, product
+from itertools import combinations
 from operator import mul
 
 def group(expenses, n):
@@ -9,6 +9,6 @@ def group(expenses, n):
         if sum(group) == 2020:
             return reduce(mul, group)
 
-expenses = [int(line) for line in sys.stdin]
+expenses = list(map(int, sys.stdin))
 print(group(expenses, 2))
 print(group(expenses, 3))

+ 3 - 3
2020/07_bags.py

@@ -7,10 +7,10 @@ def parse(f):
     contained_by = {}
     for line in f:
         parent, children = line.split(' bags contain ')
-        contains[parent] = parent_contains = {}
+        contains[parent] = parent_contains = []
         for match in re.findall(r'\d+ \w+ \w+', children):
             num, child = match.split(' ', 1)
-            parent_contains[child] = int(num)
+            parent_contains.append((child, int(num)))
             contained_by.setdefault(child, []).append(parent)
     return contains, contained_by
 
@@ -22,7 +22,7 @@ def containers(color, contained_by):
     return set(traverse(color))
 
 def count(color, contains):
-    return sum(n + n * count(c, contains) for c, n in contains[color].items())
+    return sum(n + n * count(c, contains) for c, n in contains[color])
 
 contains, contained_by = parse(sys.stdin)
 print(len(containers('shiny gold', contained_by)))

+ 2 - 2
2020/08_loop.py

@@ -26,12 +26,12 @@ def run(program, acc=0):
 def patch(program):
     change = {'nop': 'jmp', 'jmp': 'nop'}
     for i, (opcode, arg) in enumerate(program):
-        if opcode != 'acc':
+        if opcode in change:
             program[i] = change[opcode], arg
             term, acc = run(program)
+            program[i] = opcode, arg
             if term:
                 return acc
-            program[i] = opcode, arg
 
 program = list(parse(sys.stdin))
 print(run(program)[1])