Re: Advent of Code
Verfasst: Sonntag 2. Dezember 2018, 15:09
Ok, da funktionierende Lösungen hier schon kursieren, zeige ich auch mal meine, um dazu beizutragen, möglichst pythonische Lösungen zu finden. Die Idee zu Aufgabe Tag 2a war die Nutzung von Counter und Sets:
und zu Aufgabe b habe ich nicht gegoogelt und in die difflib hatte ich gleichfalls keinen Blick geworfen. Die builtins haben aber auch gereicht:
Code: Alles auswählen
from collections import Counter
two_seen = 0
three_seen = 0
with open('day02a.inp') as fobj:
for line in fobj:
n = {v for v in Counter(line).values()}
two_seen = two_seen + 1 if 2 in n else two_seen
three_seen = three_seen + 1 if 3 in n else three_seen
print(two_seen, three_seen)
print(two_seen * three_seen)
und zu Aufgabe b habe ich nicht gegoogelt und in die difflib hatte ich gleichfalls keinen Blick geworfen. Die builtins haben aber auch gereicht:
Code: Alles auswählen
def diff_by_one(p, q):
return sum(1 for i, j in zip(p, q) if i != j) == 1
def check_against_known(known, new):
for k in known:
if diff_by_one(k, new):
return k, new
known.append(new)
return None, None
def remove_uncommon(p, q):
return ''.join(p for p, q in zip(p, q) if p==q)
with open('day02a.inp') as fobj:
known = []
for line in fobj:
new = list(line.strip())
p, q = check_against_known(known, new)
if p:
result = remove_uncommon(p, q)
break
print(result)