diff options
-rw-r--r-- | day25.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/day25.py b/day25.py new file mode 100644 index 0000000..3d1bcb1 --- /dev/null +++ b/day25.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +import numpy as np +with open('day25.txt') as data: + to_num = { + '.': 0, + '>': 1, + 'v': 3 + } + cucumbers = np.stack([list(map(lambda x: to_num[x], list(line.strip()))) for line in data]) + +def shift(line, char): + changed = True + shifted = np.roll(line, 1) + diff = line - shifted + if np.count_nonzero(diff == -char) == 0: + changed = False + line[diff == -char] = char + idx = np.nonzero(diff == -char)[0] + idx -= 1 + line[idx] = 0 + return changed + +count = 0 +while True: + count += 1 + changed = False + for row in cucumbers[:]: + changed |= shift(row, 1) + for col in cucumbers.T: + changed |= shift(col, 3) + if not changed: + print(count) + break + |