Heim > Backend-Entwicklung > Python-Tutorial > AoC' – Day Historian Hysteria (C# & Python) #Spoiler

AoC' – Day Historian Hysteria (C# & Python) #Spoiler

Susan Sarandon
Freigeben: 2024-12-09 05:14:14
Original
738 Leute haben es durchsucht

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

Die heutige Herausforderung war ganz einfach:

Teil 1:
Um das Problem zu lösen, mussten wir

  • Erstellen Sie zwei Zahlenlisten aus der Zeichenfolgeneingabe,
  • Reihenfolge in aufsteigender Reihenfolge
  • Für jede Zahl in Liste1 erhalten Sie den gleichen Index in Liste2 und ermitteln den Abstand zwischen den beiden Zahlen.
  • und dann die Distanzen zusammenzählen

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.

Csharp Teile 1 und 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);
}
Nach dem Login kopieren

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)

Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage