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()