Day 16 - Advent of Code 2016
Working solution for the day 16 puzzles.
Parts One and Two
""" day_16_01_02.py """
# usage: python3 day_16_01_02.py 272 10001110011110000
# usage: python3 day_16_01_02.py 35651584 10001110011110000
import sys
disk_size = int(sys.argv[1])
state = sys.argv[2]
disk = ['0' for _ in range(disk_size)]
for i, data in enumerate(state):
if i == disk_size:
break
disk[i] = data
index = len(state)
while index < disk_size:
disk[index] = '0'
index += 1
for data in reversed(disk[:index - 1]):
if index == disk_size:
break
disk[index] = '1' if data == '0' else '0'
index += 1
data = ''.join(disk)
while True:
checksum = []
for i in range(0, len(data) - 1, 2):
chunk = data[i:i + 2]
checksum.append('1' if chunk in ['00', '11'] else '0')
checksum = ''.join(checksum)
if len(checksum) % 2 != 0:
break
data = checksum
print(checksum)