AoC ‘- 日历史学家歇斯底里(C# 和 Python)#剧透
今天的挑战非常简单:
第 1 部分:
为了解决这个问题,我们必须
简单吧。
第 2 部分:
这有点棘手,但我的解决方案的主要概念是:
立即学习“Python免费学习笔记(深入)”;
csharp 第 1 部分和第 2 部分:
var input = file.readalllines("./input_1.txt") .select(s => s.split([' '], stringsplitoptions.removeemptyentries)).tolist();var lists = processlines(input);part1(lists.list1, lists.list2);part2(lists.list1, lists.list2);return;void part1(list<int> list1, list<int> list2){ var ordered1 = list1.orderby(x => x).tolist(); var ordered2 = list2.orderby(x => x).tolist(); var totals = ordered1 .select((t, i) => math.abs(t - ordered2[i])) .select(difference => (long)difference) .tolist(); console.writeline("sum of differences: " + totals.sum());}void part2(list<int> list1, list<int> list2){ var counts = list1.todictionary( number => number, number => list2.count(x => x == number) ); var sum = counts.sum(x => x.value * x.key); console.writeline("sum of counts: " + sum);}(list<int> list1, list<int> list2) processlines(list<string[]> rows){ var list1 = new list<int>(); var list2 = new list<int>(); foreach (var row in rows) { list1.add(int.parse(row[0])); list2.add(int.parse(row[1])); } return (list1, list2);}
第 1 部分 - python
相同的概念不同的语法 - 很多
使用内置的 zip 函数和列表理解功能更加简洁。
def get_steps(list1, list2): totals = [abs(value - partner_item) for value, partner_item in zip(list1, list2)] print("Sum Total:", sum(totals))def read_input(file_name): list1, list2 = zip(*((int(num1), int(num2)) for num1, num2 in (line.split() for line in open(file_name)))) return sorted(list1), sorted(list2)list1, list2 = read_input("input.txt")get_steps(list1, list2)
第 2 部分 - 进行中(已经晚了)⏰