mirror of
https://github.com/peter-tanner/advent-of-code-2020.git
synced 2024-11-30 10:50:17 +08:00
days 5,6,7 of advent of code
This commit is contained in:
parent
ef5adffb49
commit
32cb11f3a9
32
5/a.py
Normal file
32
5/a.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
import math as m
|
||||
|
||||
lines = open('input').read().splitlines()
|
||||
|
||||
def uphalf(t):
|
||||
return [t[0], t[1] + int(abs(t[0] - t[1])/2) + 1]
|
||||
def lowhalf(t):
|
||||
return [t[0] - int(abs(t[0] - t[1])/2) - 1, t[1]]
|
||||
|
||||
def bsp(dom, low, up, input):
|
||||
for p in input:
|
||||
if p == low:
|
||||
dom = lowhalf(dom)
|
||||
else:
|
||||
dom = uphalf(dom)
|
||||
if input[-1] == low:
|
||||
return dom[1]
|
||||
else:
|
||||
return dom[0]
|
||||
|
||||
ids = []
|
||||
rowdomain = [127, 0]
|
||||
coldomain = [7, 0]
|
||||
|
||||
for line in lines:
|
||||
bruh = [
|
||||
bsp(rowdomain, "F", "B", line[0:7]),
|
||||
bsp(coldomain, "L", "R", line[7:10])
|
||||
]
|
||||
ids.append(bruh[0]*8 + bruh[1])
|
||||
|
||||
print(max(ids))
|
38
5/b.py
Normal file
38
5/b.py
Normal file
|
@ -0,0 +1,38 @@
|
|||
import math as m
|
||||
|
||||
lines = open('input').read().splitlines()
|
||||
|
||||
def uphalf(t):
|
||||
return [t[0], t[1] + int(abs(t[0] - t[1])/2) + 1]
|
||||
def lowhalf(t):
|
||||
return [t[0] - int(abs(t[0] - t[1])/2) - 1, t[1]]
|
||||
|
||||
def bsp(dom, low, up, input):
|
||||
for p in input:
|
||||
if p == low:
|
||||
dom = lowhalf(dom)
|
||||
else:
|
||||
dom = uphalf(dom)
|
||||
if input[-1] == low:
|
||||
return dom[1]
|
||||
else:
|
||||
return dom[0]
|
||||
|
||||
ids = []
|
||||
seats = []
|
||||
rowdomain = [127, 0]
|
||||
coldomain = [7, 0]
|
||||
|
||||
for line in lines:
|
||||
bruh = [
|
||||
bsp(rowdomain, "F", "B", line[0:7]),
|
||||
bsp(coldomain, "L", "R", line[7:10])
|
||||
]
|
||||
id = bruh[0]*8 + bruh[1]
|
||||
ids.append(id)
|
||||
seats.append([bruh[0], bruh[1],id])
|
||||
|
||||
for i in range(0,128):
|
||||
for j in range(0,8):
|
||||
if i*8+j not in ids and i*8+j+1 in ids and i*8+j-1 in ids:
|
||||
print(i*8+j)
|
21
6/a.py
Normal file
21
6/a.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
lines = open('input').read().splitlines()
|
||||
|
||||
arr = []
|
||||
_ = []
|
||||
for line in lines:
|
||||
if line == '':
|
||||
arr.append(_)
|
||||
_ = []
|
||||
else:
|
||||
_.append(list(line))
|
||||
arr.append(_)
|
||||
|
||||
c = 0
|
||||
for group in arr:
|
||||
s = []
|
||||
for p in group:
|
||||
s = s+p
|
||||
# print(group)
|
||||
# print(s)
|
||||
c += len(set(s))
|
||||
print(c)
|
21
6/b.py
Normal file
21
6/b.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
lines = open('input').read().splitlines()
|
||||
|
||||
arr = []
|
||||
_ = []
|
||||
for line in lines:
|
||||
if line == '':
|
||||
arr.append(_)
|
||||
_ = []
|
||||
else:
|
||||
_.append(list(line))
|
||||
arr.append(_)
|
||||
|
||||
c = 0
|
||||
for group in arr:
|
||||
s = set(group[0])
|
||||
print(group)
|
||||
for p in group:
|
||||
s = s & set(p)
|
||||
print(s)
|
||||
c += len(s)
|
||||
print(c)
|
31
7/a.py
Normal file
31
7/a.py
Normal file
|
@ -0,0 +1,31 @@
|
|||
lines = open('input').read().replace(' bags','').replace(' bag','').replace('.','').splitlines()
|
||||
|
||||
empties = []
|
||||
dictionary = {}
|
||||
for line in lines:
|
||||
r = line.split(' contain ')
|
||||
if 'no other' in line or r[0] == 'shiny gold':
|
||||
dictionary[r[0]] = {}
|
||||
empties.append(r[0])
|
||||
else:
|
||||
dictionary[r[0]] = {y[1]: int(y[0]) for x in r[1].split(', ') if (y := x.split(' ',1))}
|
||||
for i in range(1,10): #Ten because why not? Not breaking at the amount of passes I need for this
|
||||
for u in dictionary:
|
||||
# print(u)
|
||||
# print(dictionary[u])
|
||||
a = {}
|
||||
for v in dictionary[u]:
|
||||
k = dictionary[u][v]
|
||||
if v not in empties:
|
||||
a.update({x:y*k for x in dictionary[v] if (y := dictionary[v][x])})
|
||||
else:
|
||||
a.update({v:k})
|
||||
dictionary[u] = a
|
||||
|
||||
c = 0
|
||||
for k in dictionary:
|
||||
if 'shiny gold' in dictionary[k].keys():
|
||||
c += 1
|
||||
print(k)
|
||||
print(dictionary[k]['shiny gold'])
|
||||
print(c)
|
24
7/b.py
Normal file
24
7/b.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
lines = open('input').read().replace(' bags','').replace(' bag','').replace('.','').splitlines()
|
||||
|
||||
empties = ['base']
|
||||
dictionary = {}
|
||||
for line in lines:
|
||||
r = line.split(' contain ')
|
||||
if 'no other' in line:
|
||||
dictionary[r[0]] = {}
|
||||
empties.append(r[0])
|
||||
else:
|
||||
dictionary[r[0]] = {y[1]: int(y[0]) for x in r[1].split(', ') if (y := x.split(' ',1))}
|
||||
|
||||
def f(li,count):
|
||||
for u in li:
|
||||
k = li[u]
|
||||
if u not in empties:
|
||||
tmp = {x:y*k for x in dictionary[u] if (y := dictionary[u][x])}
|
||||
tmp.update({'base':k})
|
||||
count = f(tmp,count)
|
||||
else:
|
||||
count += k
|
||||
return count
|
||||
|
||||
print( f(dictionary['shiny gold'],0) )
|
Loading…
Reference in New Issue
Block a user