Rumah > pembangunan bahagian belakang > Tutorial Python > AoC '- Day Historian Histeria (C# & Python) #Spoiler

AoC '- Day Historian Histeria (C# & Python) #Spoiler

Susan Sarandon
Lepaskan: 2024-12-09 05:14:14
asal
780 orang telah melayarinya

AoC ‘- Day Historian Hysteria (C# & Python) #Spoilers

Cabaran hari ini agak mudah:

Bahagian 1:
Untuk menyelesaikan masalah kami terpaksa

  • buat 2 senarai nombor daripada input rentetan,
  • perintah mereka menaik
  • setiap nombor dalam Senarai1 dapatkan indeks yang sama dalam Senarai2 dan cari jarak antara dua nombor.
  • dan kemudian jumlahkan jarak

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.

Bahagian 1 dan 2 Csharp:

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);
}
Salin selepas log masuk

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)

Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan