aoc

My solutions for the Advent of Code
git clone https://git.tronto.net/aoc
Download | Log | Files | Refs | README

a.py (661B)


      1 import fileinput
      2 
      3 def readline(line):
      4 	m = 0
      5 	for i in range(1, line.index(']')):
      6 		if line[i] == '#':
      7 			m |= 1 << (i-1)
      8 
      9 	b = []
     10 	j = line.index(']')
     11 	while '(' in line[j:]:
     12 		i = line[j:].index('(') + j + 1
     13 		j = line[i:].index(')') + i
     14 		x = 0
     15 		for y in line[i:j].split(','):
     16 			x |= 1 << int(y)
     17 		b.append(x)
     18 
     19 	return m, b
     20 
     21 def works(m, b, s):
     22 	x = 0
     23 	for j in range(len(s)):
     24 		if s[j] == '1':
     25 			x ^= b[j]
     26 	return x == m
     27 
     28 def sol(m, b):
     29 	s = 99999999
     30 	for i in range(2**len(b)):
     31 		if works(m, b, bin(i)[2:].rjust(len(b), '0')):
     32 			s = min(s, i.bit_count())
     33 	return s
     34 
     35 with fileinput.input() as lines:
     36 	print(sum(sol(*readline(line)) for line in lines))
     37