Skip to content

Instantly share code, notes, and snippets.

@halitanildonmez
Created December 12, 2022 15:57
Show Gist options
  • Save halitanildonmez/5032fedea1541bbd72687f61536a4973 to your computer and use it in GitHub Desktop.
Save halitanildonmez/5032fedea1541bbd72687f61536a4973 to your computer and use it in GitHub Desktop.
Advent of Code 2020 day 14 pt1,2
import math
import collections
import itertools
T = "bb.txt"
M = "aa.txt"
file1 = open(M, 'r')
Lines = file1.read().splitlines()
def part1():
input_grid = []
mask = ''
m_dict = {}
values = {}
for i, line in enumerate(Lines):
if len(line.strip()) == 0:
continue
if 'mask' in line:
m_dict = {}
mask = line.replace('mask = ', '')
for x in range(len(mask)):
if mask[x] != 'X':
m_dict[x] = int(mask[x])
else:
m_val, int_val = line.split(' = ')
addr = m_val.replace('mem[', '').replace(']', '')
addr = int(addr)
binary = format(int(int_val), 'b')
bin_arr = []
for j in range(len(mask)-len(binary)):
bin_arr.append(0)
for j in range(len(binary)):
bin_arr.append(int(binary[j]))
for k in m_dict:
bin_arr[k] = m_dict[k]
bin_str = ''.join([str(a) for a in bin_arr])
values[addr] = int(bin_str, 2)
input_grid.append(line)
print(sum(values.values()))
def create_permut(l):
return [''.join(seq) for seq in itertools.product("01", repeat=l)]
def part2():
mask = ''
m_dict = {}
values = {}
bit_perms = []
for i, line in enumerate(Lines):
if len(line.strip()) == 0:
continue
if 'mask' in line:
m_dict = {}
mask = line.replace('mask = ', '')
bit_perms = create_permut(mask.count('X'))
for x in range(len(mask)):
if mask[x] != '0':
m_dict[x] = mask[x]
else:
m_val, int_val = line.split(' = ')
addr = int(m_val.replace('mem[', '').replace(']', ''))
binary = format(int(addr), 'b')
bin_arr = []
for j in range(len(mask)-len(binary)):
bin_arr.append('0')
for j in range(len(binary)):
bin_arr.append(binary[j])
for k in m_dict:
bin_arr[k] = m_dict[k]
bin_str = ''.join([str(a) for a in bin_arr])
bs = []
for p in bit_perms:
bin_str_tmp = bin_str
for c in p:
bin_str_tmp = bin_str_tmp.replace('X', c, 1)
bs.append(bin_str_tmp)
for aa in bs:
values[int(aa, 2)] = int(int_val)
print(sum(values.values()))
part1()
part2()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment