Rumah >pembangunan bahagian belakang >Tutorial Python >AoC '- Day Historian Histeria (C# & Python) #Spoiler
Cabaran hari ini agak mudah:
Bahagian 1:
Untuk menyelesaikan masalah kami terpaksa
Mudah Betul.
Bahagian 2:
Ini adalah sedikit rumit tetapi konsep utama penyelesaian saya ialah :
cipta kamus dengan kuncinya ialah nombor dalam listA, nilainya menggunakan kaedah Count() untuk mengira semua nombor dalam listB yang sama dengan kunci (nombor pada indeks yang sama dengan listA).
maka ini hanyalah kes mudah untuk mendarab kekunci dengan nilai dan menjumlahkan jumlahnya.
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); }
Bahagian 1 - Python
Sintaks berbeza konsep yang sama - banyak
Lebih ringkas menggunakan fungsi zip terbina dalam dan senarai fungsi pemahaman.
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)
Bahagian 2 - Sedang Berlangsung (dah lewat)⏰
Atas ialah kandungan terperinci AoC '- Day Historian Histeria (C# & Python) #Spoiler. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!