diff --git a/days/day1.py b/days/day1.py index 8d32ce6..888b265 100644 --- a/days/day1.py +++ b/days/day1.py @@ -6,27 +6,22 @@ class Day1(unittest.TestCase): def calc_fuel(self, mass): fuel = mass // 3 - 2 - if(fuel > 0): - return fuel + self.calc_fuel(fuel) - else: - return 0 + return fuel + self.calc_fuel(fuel) if fuel > 0 else 0 def test_day1a(self): fuel = 0 with open(self.inputfile) as fp: - value = fp.readline() - while value: - fuel += int(value) // 3 - 2 - value = fp.readline() + for _, line in enumerate(fp): + fuel += int(line) // 3 - 2 self.assertEqual(fuel, 3402609) def test_day1b(self): with open(self.inputfile) as fp: - line = fp.readline() - sumfuel = 0 - while line: - sumfuel += self.calc_fuel(int(line)) - line = fp.readline() + for _, line in enumerate(fp): + sumfuel = 0 + while line: + sumfuel += self.calc_fuel(int(line)) + line = fp.readline() self.assertEqual(sumfuel, 5101025) if __name__ == "__main__": diff --git a/days/day4.py b/days/day4.py index 479b435..db947b6 100644 --- a/days/day4.py +++ b/days/day4.py @@ -1,50 +1,23 @@ import unittest import os +from collections import Counter class Day4(unittest.TestCase): - def num_to_array(self, num): - arr = [] - while num != 0: - arr.append(num % 10) - num = num //10 - arr.reverse() - return arr - def check_num(self, num): - numarr = self.num_to_array(num) - last = numarr[0] - adj = False + numarr = [int(d) for d in (str(num))] for p in range(1,6): - val = numarr[p] - if last > val: + if numarr[p-1] > numarr[p]: return False - if last == val: - adj = True - last = val - return adj + c = Counter(str(num)) + return len({k: v for k, v in c.items() if v >= 2}) > 0 def check_num_grp(self, num): - numarr = self.num_to_array(num) - last = numarr[0] - adj = False - candidate = False - finished = False + numarr = [int(d) for d in (str(num))] for p in range(1,6): - val = numarr[p] - if last > val: + if numarr[p-1] > numarr[p]: return False - if last == val: - if adj: - candidate = False - else: - candidate = True - adj = True - else: - adj = False - if candidate: - finished = True - last = val - return finished or candidate + c = Counter(str(num)) + return len({k: v for k, v in c.items() if v == 2}) > 0 def test_day4a(self): counter = 0 @@ -54,8 +27,6 @@ class Day4(unittest.TestCase): self.assertEqual(counter, 1686) def test_day4b(self): - self.assertTrue(self.check_num_grp(112233)) - self.assertFalse(self.check_num_grp(123444)) counter = 0 for num in range(168630,718099): if self.check_num_grp(num) == True: