33 lines
736 B
Python
33 lines
736 B
Python
from collections import defaultdict
|
|
|
|
def part1():
|
|
first, second = read_ids()
|
|
distance = sum(abs(id1 - id2) for id1, id2 in zip(first, second))
|
|
print(f"Total distance is: {distance}")
|
|
|
|
def part2():
|
|
first, second = read_ids()
|
|
|
|
# Make freqmap for second list
|
|
freq = defaultdict(int)
|
|
for id in second:
|
|
freq[id] += 1
|
|
|
|
# Sum first list weighted by freqmap
|
|
similarity = sum(freq[id] * id for id in first)
|
|
print(f"Similarity is {similarity}")
|
|
|
|
|
|
|
|
def read_ids():
|
|
idlist = []
|
|
with open("id-list") as f:
|
|
for line in f:
|
|
if line:
|
|
idlist.append(map(int, line.split()))
|
|
return map(sorted, zip(*idlist))
|
|
|
|
if __name__ == '__main__':
|
|
part1()
|
|
part2()
|