new structure for 2018, added license information
This commit is contained in:
54
2018/02/code.py
Normal file
54
2018/02/code.py
Normal file
@ -0,0 +1,54 @@
|
||||
""" https://adventofcode.com/2018/day/2 """
|
||||
|
||||
def readFile():
|
||||
l = []
|
||||
with open(f"{__file__.rstrip('code.py')}input.txt", "r") as f:
|
||||
line = f.readline()
|
||||
while line:
|
||||
l.append(line)
|
||||
line = f.readline()
|
||||
return l
|
||||
|
||||
def count(data : dict, n : int):
|
||||
sum = 0
|
||||
for val in data:
|
||||
for char in val:
|
||||
if data[val][char] == n:
|
||||
sum += 1
|
||||
break
|
||||
return sum
|
||||
|
||||
def part1(vals : list):
|
||||
data = {}
|
||||
# Count for each letter per word
|
||||
for val in vals:
|
||||
data[val] = {}
|
||||
for char in val:
|
||||
if char in data[val]:
|
||||
data[val][char] = data[val][char] + 1
|
||||
else:
|
||||
data[val][char] = 1
|
||||
|
||||
return count(data, 2) * count(data, 3)
|
||||
|
||||
def getCommonLetters(a : str, b : str):
|
||||
lenMin = min(len(a), len(b))
|
||||
commons = [a[i] for i in range(lenMin) if a[i] == b[i]]
|
||||
return "".join(commons)
|
||||
|
||||
def part2(vals : list):
|
||||
maxLen = 0
|
||||
maxStr = ""
|
||||
for i in range(len(vals)):
|
||||
for j in range(i + 1, len(vals)):
|
||||
cur = getCommonLetters(vals[i], vals[j])
|
||||
if len(cur) > maxLen:
|
||||
maxLen = len(cur)
|
||||
maxStr = cur
|
||||
|
||||
return maxStr
|
||||
|
||||
if __name__ == "__main__":
|
||||
vals = readFile()
|
||||
print(f"Part 1: {part1(vals)}")
|
||||
print(f"Part 2: {part2(vals)}")
|
Reference in New Issue
Block a user