今天的挑战非常简单:
第 1 部分:
为了解决这个问题,我们必须
简单吧。
第 2 部分:
这有点棘手,但我的解决方案的主要概念是:
立即学习“Python免费学习笔记(深入)”;
-
创建一个字典,其中 key 是 lista 中的数字,value 使用 count() 方法统计 listb 中与 key 相同的数字(与 lista 索引相同的数字)。
-
那么这只是一个将键乘以值并对总数求和的简单情况。
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 部分 – 进行中(已经晚了)⏰