Die heutige Herausforderung war ganz einfach:
Teil 1:
Um das Problem zu lösen, mussten wir
Einfach richtig.
Teil 2:
Das war etwas kniffliger, aber das Hauptkonzept meiner Lösung war:
Erstellen Sie ein Wörterbuch, in dem der Schlüssel die Zahl in ListeA ist. Der Wert verwendet die Count()-Methode, um alle Zahlen in ListeB zu zählen, die mit dem Schlüssel identisch sind (Zahl am gleichen Index wie ListeA).
Dann ist es nur noch ein einfacher Fall, die Schlüssel mit den Werten zu multiplizieren und die Summen zu summieren.
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); }
Teil 1 – Python
Gleiches Konzept, andere Syntax – viel
Präziser durch die integrierte Zip-Funktion und Listenverständnisfunktion.
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)
Teil 2 – In Bearbeitung (es wurde spät)⏰
Das obige ist der detaillierte Inhalt vonAoC' – Day Historian Hysteria (C# & Python) #Spoiler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!