first commit

This commit is contained in:
Peter Hudec 2018-12-13 19:09:30 +01:00
commit 9f3e899cda
Signed by: peter.hudec
GPG Key ID: 427BD558E277E410
9 changed files with 2750 additions and 0 deletions

1024
01/input.txt Normal file

File diff suppressed because it is too large Load Diff

9
01/solve01.py Executable file
View File

@ -0,0 +1,9 @@
#!/usr/bin/env python
start = 0
with open('input.txt', 'r') as f:
for line in f:
start += int(line)
print(start)

19
01/solve02.py Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env python
start = 0
seen = [0]
def get_freq_change():
while True:
print('reading file from start')
with open('input.txt', 'r') as f:
for line in f:
yield int(line)
for change in get_freq_change():
start += change
if start in seen:
break
seen.append(start)
print(start)

250
02/input.txt Normal file
View File

@ -0,0 +1,250 @@
pbopcmjeizuhxlqnwasfgtycdm
pjokrmjeizuhxlqnfasfguycdv
pbokrpjejkuhxlqnwasfgtycdv
sbokrmjeizuhxaqnwastgtycdv
pbokrmjeizuhxljnnasfgtycnv
pbokrqjeizuhxbqndasfgtycdv
bbokrmjeizuhxlqnwasfgtycfj
pbokrmjeisuhxlqnwasfzdycdv
pbokrmjefxuhxlqnwasfptycdv
pqokrmjenzuhxlqnwasfgtygdv
pbokrmjeizunklqnwassgtycdv
pbokrmjeizghxvqnkasfgtycdv
lboirmjeizuhxlqnwfsfgtycdv
pbofrmjeizuhalqnwasfgtyddv
pbokrmjeiguhplqcwasfgtycdv
pbokrmjeizzhxlqnwavfgtyctv
pbokrmjeizuhxlqnwaefgtycaj
pbokzmjedzuhxlqnwasfgtlcdv
pnokrmjegzuhxlbnwasfgtycdv
pbojrmjeizuhtlqniasfgtycdv
pbokxmiefzuhxlqnwasfgtycdv
pbokrmoeizuhxlqnpasngtycdv
abokrmjeezuhxlqnwasfdtycdv
pbokrmyeizugxlqnwasfgtycda
pbokdmjeizuhxlqnuatfgtycdv
psokrmjeiauhxlqnwasxgtycdv
pbokrmjeizuhxlqzwasfgtyzdy
pboktmjeizuhxnqndasfgtycdv
pbodrrjeizuhxlqnwasfgtycdb
pbokrmjekzuhxljnwasfgtycuv
pbokrmjnizuhllqnwawfgtycdv
prmkrmjeiwuhxlqnwasfgtycdv
pbokrmjeizkhxlenwajfgtycdv
pbofrmjeizuixlqnwasfgoycdv
gbhkrmjeizuhclqnwasfgtycdv
pbokrmweizuwxlqnwasfgtycyv
pbukrmjeizuhxlqnwasfgqhcdv
pbokxmjeizuhxlqnwasfgtecdu
pbokomjeizuhrlqnfasfgtycdv
bbokymjeizuhxlqnpasfgtycdv
pbodrmjeizuhxlqnwadfgtgcdv
zbokrljeipuhxlqnwasfgtycdv
pboermjeizuxxlqnwasfgtpcdv
pqbkrmjeizuhxlqnjasfgtycdv
pbokrmfeizuhxvqgwasfgtycdv
pbokrmjeizuhzlqnjasfdtycdv
rbofrmjeizkhxlqnwasfgtycdv
pbokrmseizubxlqnwasfgtycdy
pbocrmjeizuhxaqnwasfgtycda
pbokrmjeizuhxlqndakfgtscdv
pbokrrjeizuhxlqnwgshgtycdv
pbokrajeizuhxpqnwasrgtycdv
pbokrbjeizubxlqnwssfgtycdv
pbokemjhizuhxlqnwazfgtycdv
pbokrmjeizuhxlqntisfgtyrdv
pbokrmjwinuhxlqnwasfgkycdv
pypkrmjeizuhxlqtwasfgtycdv
pbokrmjeizuhxlqniasfrpycdv
pbokomjeizuhxlqnwasfgtgcdw
pbokrmjeizusplqnwxsfgtycdv
pbodrmueizxhxlqnwasfgtycdv
pbokwmjeizurxlqnwasfgtycdi
pbohrmjejzuhxlqnwasfgtycgv
pbokrmtqizuhxlqnwasfitycdv
ptozrmjeizuhylqnwasfgtycdv
pbokrmjtizuhxlqfwasfgtykdv
pbokrmpeizuhxnqmwasfgtycdv
pbokrmjeizujxlynwtsfgtycdv
dbokrmjeizuhxlqnwasngticdv
pbskrmjeizuhxlqnrasfttycdv
pbwkrmjerzuhxlqnwaslgtycdv
pboyrmceizuhxlqnwssfgtycdv
pbokpmjeizchxlqngasfgtycdv
pbokrmjenzuhxlqnwcsfgxycdv
pbxkrmjeizuhxlqnwadfgtyckv
pbqkrmjeizuhxlqnwasdgdycdv
pbokrmoeizdhxlqnwasfgtycqv
pbokrmjejzuhxlqnwksfgtycwv
pbfkrmjeieuhxlnnwasfgtycdv
pbokrmjeiuuhxlqnpalfgtycdv
pbokrmjeizunxyqnwasfgtdcdv
pbokrmjeazuhxrqnwasogtycdv
pbmkrmjeizuhxlqnwaufgtycdj
xbskrmjeipuhxlqnwasfgtycdv
tbokrujlizuhxlqnwasfgtycdv
xbokvmjeizuhxyqnwasfgtycdv
pbnhrmheizuhxlqnwasfgtycdv
pboorajrizuhxlqnwasfgtycdv
pbokrmjeizuhxminwusfgtycdv
pboqrmjeizuhxlqnwaslgtscdv
pgokrdjeizuhxlnnwasfgtycdv
pbokrmjeizuhxiqnwasvttycdv
pbokrmwnizuhzlqnwasfgtycdv
pbokrmjlizmhjlqnwasfgtycdv
pbwkrmjeizohxlqnwasfgtyzdv
pbykrmjmizwhxlqnmasfgtycdv
pbokrmjzizuhxeqnwasfgtpcdv
pbokrmjewzuhxzqnwasfgtybdv
pbokrmjeimupxlonwasfgtycdv
pbokrmjvizuhxlqnuasfgtycqv
pbokrmjeizjdxlqnwasfetycdv
pbofrmjeizurxlqnwasfztycdv
pbozrmjeizuhxxqpwasfgtycdv
pbovtmjeizuhxlqnwapfgtycdv
prokrmjeuzuhxlqnwasfgtycqv
ubokrmjeizuhxljnwasfgtdcdv
pboknmjepzuhxlqnwasogtycdv
pbokrmjaizuaxljnwasfgtycdv
pbdkrcjeizuhxlqnwasfgtvcdv
pbokymjeizuhxlqnwaxfgtyfdv
pbokrmjaizuhxlqnfasfgtyodv
pdekrmmeizuhxlqnwasfgtycdv
rbokrmjeizuuxlqnwasfgtycdj
pbokrmneifuhxlqiwasfgtycdv
pbokrmjeizlbxlunwasfgtycdv
pbokrmjewzuhxxqnwasfgoycdv
pbokrmjeizuhxlqtwasfgtzcdo
pbokrmkeizzhxlqnwasfgtycmv
pbokrmjeiquhxlqnywsfgtycdv
xbokrmjeizjhxlqdwasfgtycdv
pbokrmjeizahxzqnzasfgtycdv
pbokrmjeizuhxmqmwasfgtytdv
pbokrmheiluhxlqnwasfgoycdv
rbokrmjeizuhxlqnwaslgtycqv
pbbkzmjeizuhxvqnwasfgtycdv
pbokrmjeizudxlznwgsfgtycdv
pbokemjeizuhxlqnwascgtysdv
pbokrmjdizuexlgnwasfgtycdv
pbokzmjeizuhxlqnwnsfggycdv
pbokrmjeizuhxtqnwasfgiycdy
bbokrmjeizuhclunwasfgtycdv
pbtkrmjeieuhxlqnwasfgtycrv
pbokrmjeizutxlbnwasngtycdv
pbokrmjevzumxlqnwasfgtyydv
pbokrmjsizuhxlqowasfgtycyv
pbssrmjeizuhxlqbwasfgtycdv
pbokrmjeizuhflqnwxsfstycdv
pbokimjeizuhxlqnwasfgtywdm
pbokrmjbizuhxlqdwasfgtygdv
pbokrmheizuhxlqxwasfgtycnv
poakrmjeizuhylqnwasfgtycdv
vbrkrmjeizuhxlqnwaszgtycdv
pbokrmjeizuhxiqnudsfgtycdv
pbokrldeizuhxlqnwasjgtycdv
pbokrmjeizjhflqnwasfgtymdv
pbokrmjeizuhxliawasfgtvcdv
pbokrmjeisuhtoqnwasfgtycdv
nbokrijeizuhxlqnwasfgtycdh
pbokrmjeizrhxlqnwxsfztycdv
pbotrmjeizuhxlcnwasfgtyvdv
pbokrmjewzuhxlquwasfgtjcdv
pbosrmjeipuhxlqnwasfgtvcdv
pbokrmjebzurxlunwasfgtycdv
pbogimieizuhxlqnwasfgtycdv
pbokrmjeizihxlqnwasagtyzdv
pbokrmjeizuoxlqnausfgtycdv
pbokrmjeizuhxlqnwashgbjcdv
pbokrdjeizuhxlnnwasfgoycdv
pbokrzjtizlhxlqnwasfgtycdv
peokrmjexzuhxlqnwasfgoycdv
cboprmjeizuhxlqnwasfgfycdv
pbitrmjeizjhxlqnwasfgtycdv
pbourmjeizuhxldnwjsfgtycdv
pboivmjeizuhxlqnwasvgtycdv
pbokrmjeiduhxaqnqasfgtycdv
pbokicjeiwuhxlqnwasfgtycdv
pbokrmmeizulxlqnwasfgtyvdv
pbokrmjeieuhxlqnaapfgtycdv
pbokxmjeiuuhxlqnwasfgtyqdv
pbokrmjeizuhxgqniaslgtycdv
pbokrmjeizuuxlqnwisfgtyckv
pbovlmjepzuhxlqnwasfgtycdv
pbokrmjeizuhxlqdwaqfgtycdj
pbztrvjeizuhxlqnwasfgtycdv
pbokrmjeizuholunwasfptycdv
pbokrmjeizudxlqnwusfgtycqv
nbokrmjzizmhxlqnwasfgtycdv
pbokrmjeypunxlqnwasfgtycdv
pbokrjjxizuhxlqnwasfgtyddv
pbokrmjeizuhilqnwiufgtycdv
pbokrmjeizuhxtqowasfgfycdv
qbokrgjeizuhxlqnwasfgtycdx
pvoarmjeizuhxlqnwasfgtfcdv
pbokrmjjizuhxlqnwasfggyczv
pbtkrmjeizuhnlqncasfgtycdv
pbokrmjeizuzxlqnwasfgtyjnv
jmokrmzeizuhxlqnwasfgtycdv
pbykrmjmizwhxlqnwasfgtycdv
nbokrmjeizlhxlqnwasfgtecdv
pbokrmjeizuhxlqhwasrgrycdv
pbokrmjeiruhxlqnwasfgtnedv
pbokrmjeizohxlznwasfgtycuv
paokrmjdizuhxlqnwasfktycdv
pbokrmjetzutxlqnwasfntycdv
pboyrmjeizuhxlqnwasfgtetdv
pbokgujeizuhxlqwwasfgtycdv
pbokrifeizshxlqnwasfgtycdv
sbokrmjeizfhxlqnaasfgtycdv
pbokrmjeizuhxlqpwrsfgfycdv
pbokxmjeikuhxlqnwasfctycdv
fbokrmjhizuhxlqnmasfgtycdv
pbekamjeizuhxlqnwaxfgtycdv
pboksmpeizuhxlqnwasfgtyclv
pbokrmjeizrhxdqnwasfgzycdv
pbogrmxeizurxlqnwasfgtycdv
pbokrmjeieuhxlqnwqsfgtychv
vbokrmjeizuhxlqnwabfgtycdq
lbokrmjeizupxlqvwasfgtycdv
pbokrmjeizuhglqnuasfgtucdv
hbokrmjeizuhelqnwasfgtrcdv
pbokrmweizuhxlqnwhsfgtyvdv
pbokrmjeizuhxrqnwasfvtccdv
pbokrmneizuhxlwnyasfgtycdv
ybokymjeqzuhxlqnwasfgtycdv
pbousmjeizuhxlqswasfgtycdv
pblkimjeizuhxlqnwacfgtycdv
psokrmjeizuhxlqnwasfgbpcdv
peokrwjeizghxlqnwasfgtycdv
pbokrmjeizudxlqnwzsfrtycdv
pbotrmjezzxhxlqnwasfgtycdv
pkokrmjezzuhxlqnwasfgtycdh
pbokrmleizuhxlnnwasfgtyndv
pboxwmjeituhxlqnwasfgtycdv
pbokrmjeizoczlqnwasfgtycdv
pbokomjeizuhxlqnwhsfgtybdv
pbhwrmjeizuhxlqnwasfgpycdv
pbwkrmjeizuhxeqnwasfgtyidv
pbokrmjeizuhxlqnjasfgmicdv
tbokrgjeizuhxlqhwasfgtycdv
pbolrqjeizuhxlqnhasfgtycdv
pbogrhjeizbhxlqnwasfgtycdv
pbokrmjeizghxlqnwashgtycdx
pbokrmjeizuhrlqnwasfgthcrv
pbokrmjeizuhxlqnwfsngtacdv
pbokrmxeizuhxlqnwasfotyctv
pbokrmjeizuhxlqnwcsfgnocdv
pnokbmjeizuhxlqnwasfgtscdv
pbowrmjeuzuhxlqnwasfgtycdw
pbokrmjeiyuhxlqnwasqgtvcdv
pbokrmjeivuhxkpnwasfgtycdv
pbokomjeizuhxlqnwasfgtylav
pbdkrmjeizuhxlgnwjsfgtycdv
pbokrmjeizuaxxqnwasfytycdv
pbokrmjerzuhxlqnwasfgtscdk
pbokrmzerzuhxlqnwasfntycdv
pbokrmjeizumxdqnwasfgtyckv
pbtkrmjeizrhxlqnwasfgtjcdv
pbmkrmjuizuhxlqnwasfgtytdv
pbokpmjeizuhxlqnwastgtzcdv
kbokrmjeizuhxlqnwasfgzjcdv

33
02/solve01.py Executable file
View File

@ -0,0 +1,33 @@
#!/usr/bin/env python
def read_input():
with open('input.txt', 'r') as f:
for line in f:
yield line
def get_count(box):
occ2 = 0
occ3 = 0
seen = dict()
for c in set(box):
if occ2 and occ3:
break
if box.count(c) == 2:
occ2 = 1
if box.count(c) == 3:
occ3 = 1
return (occ2,occ3)
res2 = 0
res3 = 0
for box in read_input():
(tmp2, tmp3) = get_count(box)
res2 += tmp2
res3 += tmp3
print(res2*res3)

32
02/solve02.py Executable file
View File

@ -0,0 +1,32 @@
#!/usr/bin/env python
def read_input():
with open('input.txt', 'r') as f:
for line in f:
yield line.strip()
def compare(a, b):
if len(a) != len(b):
return None
change = None
for i in range(len(a)):
if a[i] != b[i]:
if change is None:
change = i
else:
return None
return a[:change]+a[change+1:]
boxes = []
result = None
for box in read_input():
for b in boxes:
result = compare(box, b)
if result:
break
if result:
break
boxes.append(box)
print(result)

1311
03/input.txt Normal file

File diff suppressed because it is too large Load Diff

33
03/solver01.py Executable file
View File

@ -0,0 +1,33 @@
#!/usr/bin/python
import re
RE_LINE = re.compile('^#(\d+) @ (\d+),(\d+): (\d+)x(\d+)$')
plan = dict()
def read_input():
with open('input.txt', 'r') as f:
for line in f:
yield line.strip()
def hash_position(x, y):
return "{}x{}".format(x,y)
for claim in read_input():
m = RE_LINE.match(claim)
if not m:
raise Exception("unparsable input: {}".format(claim))
for x in range(int(m.group(4))):
for y in range(int(m.group(5))):
hash = hash_position(x+int(m.group(2)), y+int(m.group(3)))
if hash not in plan:
plan[hash] = []
plan[hash].append(int(m.group(1)))
overlap = [ k for k,v in plan.items() if len(v) > 1]
print(len(overlap))

39
03/solver02.py Executable file
View File

@ -0,0 +1,39 @@
#!/usr/bin/python
import re
RE_LINE = re.compile('^#(\d+) @ (\d+),(\d+): (\d+)x(\d+)$')
plan = dict()
all = dict()
overlap = dict()
def read_input():
with open('input.txt', 'r') as f:
for line in f:
yield line.strip()
def hash_position(x, y):
return "{}x{}".format(x,y)
for claim in read_input():
m = RE_LINE.match(claim)
if not m:
raise Exception("unparsable input: {}".format(claim))
for x in range(int(m.group(4))):
for y in range(int(m.group(5))):
hash = hash_position(x+int(m.group(2)), y+int(m.group(3)))
claim_id = int(m.group(1))
all[claim_id] = True
if hash not in plan:
plan[hash] = []
plan[hash].append(claim_id)
if len(plan[hash]) > 1:
overlap[plan[hash][-1]] = True
overlap[plan[hash][-2]] = True
all = set(all.keys())
overlap = set(overlap.keys())
print(all - overlap)