My Advent of Code solutions in Python. kevinyap.ca/2019/12/going-fast-in-advent-of-code/
advent-of-code python
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Update day18.py

+10 -9
+10 -9
2016/day18.py
··· 1 1 import fileinput 2 2 3 3 4 - def is_safe(row, i): 4 + def is_trap(row, i): 5 5 """Helper function to read out-of-bounds tiles as safe.""" 6 6 if 0 <= i < len(row): 7 7 return row[i] 8 8 9 - return True 9 + return False 10 10 11 11 12 12 def predict_next_row(row): 13 13 """Given a row, returns the predicted following row.""" 14 - return [not (is_safe(row, i-1) ^ is_safe(row, i+1)) for i in range(len(row))] 14 + return [is_trap(row, i-1) ^ is_trap(row, i+1) for i in range(len(row))] 15 15 16 16 17 17 if __name__ == '__main__': 18 - # Represent safe tiles as True and traps as False 19 - raw_first_row = fileinput.input()[0].strip() 20 - row = tuple(True if c == '.' else False for c in raw_first_row) 21 - safe_tiles = sum(row) 18 + # Represent traps as True and safe tiles as False. 19 + # The number of safe tiles per row is len(row) - sum(row). 20 + row = [True if c == '^' else False for c in fileinput.input()[0].strip()] 21 + row_len = len(row) 22 + safe_tiles = row_len - sum(row) 22 23 23 24 for _ in range(40 - 1): 24 25 row = predict_next_row(row) 25 - safe_tiles += sum(row) 26 + safe_tiles += row_len - sum(row) 26 27 27 28 print "Number of safe tiles in first 40 rows:", safe_tiles 28 29 29 30 for _ in range(400000 - 40): 30 31 row = predict_next_row(row) 31 - safe_tiles += sum(row) 32 + safe_tiles += row_len - sum(row) 32 33 33 34 print "Number of safe tiles in all 400000 rows:", safe_tiles