suchen
HeimBackend-EntwicklungPython-TutorialAoC – Day Mull it Over (C# und Python)

AoC

Denken Sie darüber nach

Die heutige Herausforderung schrie nach Regex, als ich sie zum ersten Mal sah, vor allem, weil jedes Mal, wenn ich „Teile dieser Zeichenfolge extrahieren“ sehe, Regex mein Ziel ist;

Grundkonzept und Anforderungen

Wir müssen also alle mul(Zahl1, Zahl2) finden und diese miteinander multiplizieren, aber alle anderen Zeichen ignorieren.

Wir müssen also einen Mechanismus finden, um alle gültigen mul()-Funktionsdeklarationen zu finden.

Teil1

Dazu können wir die Leistungsfähigkeit von Regex nutzen, indem wir das folgende Muster verwenden

mul([0-9]{1,3},[0-9]{1,3})"

Das passt auf mul( jede Zahl zwischen 0-9, eine Zahl von 1 > 3 mal schließende Klammer.

Sobald wir die mul()-Übereinstimmungen haben, können wir Regex erneut verwenden, um die Zahlen abzurufen, diese zu analysieren und zur Gesamtsumme zu addieren.

Eine ziemlich einfache und unkomplizierte Lösung.

void Part1()
{
    const string regex = @"mul\([0-9]{1,3},[0-9]{1,3}\)";
    var matches = Regex.Matches(input, regex);

    var total = 0;

    foreach (Match match in matches)
    {
        var numbers = GetNumbers(match);
        total += numbers[0] * numbers[1];
    }
}

int[] GetNumbers(Match match)
{
    var numbers = Regex.Matches(match.Value, "\d{1,3}");
    var a = int.Parse(numbers[0].Value);
    var b = int.Parse(numbers[1].Value);

    return [a, b];
}

Teil 2

Dies fügte etwas kompliziertere Anweisungen hinzu und fügte den Vorbehalt hinzu, dass do()- und don't()-Phrasen die mil()-Funktionen aktivieren oder deaktivieren.

Der beste Weg, damit umzugehen, schien einfach zu sein: Aktualisieren Sie das Regex-Muster, um do() dont() oder mul(number, number

zu berücksichtigen

Der Regex sucht nun nach einer dieser Phrasen, indem er das | verwendet Betreiber.

Wir können diese dann durchlaufen und mithilfe einer Switch-Anweisung entscheiden, ob es sich um eine Do-, Dont- oder mil()-Übereinstimmung handelt, und das aktivierte Flag entsprechend aktualisieren.

Es ist dann eine einfache Prüfung, ob es ein mul() ist und isEnabled True ist, bevor es multipliziert und zur Gesamtsumme addiert wird.

Vollständiger Code für beide Lösungen unten

using System.Text.RegularExpressions;

var input = File.ReadAllText("./input1.txt");
// var input = @"xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))";

Part1();
Part2();
return;

void Part1()
{
    const string regex = @"mul\([0-9]{1,3},[0-9]{1,3}\)";
    var matches = Regex.Matches(input, regex);

    var total = 0;

    foreach (Match match in matches)
    {
        var numbers = GetNumbers(match);
        total += numbers[0] * numbers[1];
    }

    Console.WriteLine("Total: " + total);
}

void Part2()
{
    const string regex = @"do\(\)|don't\(\)|mul\([0-9]{1,3},[0-9]{1,3}\)";
    var matches = Regex.Matches(input, regex);

    // At the start, mul instructions are enabled
    var isEnabled = true;
    var total = 0;

    // loop over the matches (e.g do(), dont() or mul(x, y)
    foreach (Match match in matches)
    {
        switch (match.Value)
        {
            case "do()":
                isEnabled = true;
                break;
            case "don't()":
                isEnabled = false;
                break;
            default:
            {
                if (match.Value.StartsWith("mul") && isEnabled)
                {
                    var numbers = GetNumbers(match);
                    total += numbers[0] * numbers[1];
                }

                break;
            }
        }
    }

    Console.WriteLine("Total: " + total);
}

int[] GetNumbers(Match match)
{
    var numbers = Regex.Matches(match.Value, "\d{1,3}");
    var a = int.Parse(numbers[0].Value);
    var b = int.Parse(numbers[1].Value);

    return [a, b];
}

Python-Lösungsversuch

Wenn Sie neu in meiner Serie sind, wiederhole ich es noch einmal: Ich verwende AoC '24, um meine vorhandenen Python-Kenntnisse zu erlernen und zu verbessern – daher umfassen alle Lösungen sowohl C#- als auch Python-Versuche.

Wir können ähnliche Konzepte verwenden, aber die Sprache und Funktionen von Python nutzen:

import re

# Read input from file
with open("./input1.txt", "r") as file:
    input_text = file.read()

# Part 1
def part1():
    regex = r"mul\(\d{1,3},\d{1,3}\)"
    matches = re.findall(regex, input_text)

    total = 0
    for match in matches:
        a, b = get_numbers(match)
        total += a * b

    print(f"Total: {total}")

# Part 2
def part2():
    regex = r"do\(\)|don't\(\)|mul\(\d{1,3},\d{1,3}\)"
    matches = re.findall(regex, input_text)

    is_enabled = True  # At the start, mul instructions are enabled
    total = 0

    for match in matches:
        if match == "do()":
            is_enabled = True
        elif match == "don't()":
            is_enabled = False
        elif match.startswith("mul") and is_enabled:
            a, b = get_numbers(match)
            total += a * b

    print(f"Total: {total}")

# Helper function to extract numbers from a match
def get_numbers(match):
    numbers = re.findall(r"\d{1,3}", match)
    return int(numbers[0]), int(numbers[1])

# Execute parts
part1()
part2()

Wie immer können Sie mir auf Twitter folgen oder sich das gesamte Repo für weitere Lösungen auf Github ansehen.

Das obige ist der detaillierte Inhalt vonAoC – Day Mull it Over (C# und Python). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
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
Wie können Sie Elemente an eine Python -Liste anhängen?Wie können Sie Elemente an eine Python -Liste anhängen?May 04, 2025 am 12:17 AM

ToAppendElementStoapythonList, UsTheAppend () methodForsingleElelements, Extend () FormultipleElements, und INSERSt () FORSPECIFIFICEPosition.1) UseAppend () ForaddingOneElementattheend.2) usextend () toaddmultiElementsefficction.3) useInsert () toaddanelementataspeci

Wie erstellt man eine Python -Liste? Geben Sie ein Beispiel an.Wie erstellt man eine Python -Liste? Geben Sie ein Beispiel an.May 04, 2025 am 12:16 AM

TocreateApythonList, usequarebrackets [] andsparateItemswithcommas.1) ListaredynamicandcanholdmixedDatatypes.2) UseAppend (), REME () und SSLICINGFORMIPLUMILATION.3) LISTCOMPRAUMENS

Diskutieren Sie reale Anwendungsfälle, in denen eine effiziente Speicherung und Verarbeitung numerischer Daten von entscheidender Bedeutung ist.Diskutieren Sie reale Anwendungsfälle, in denen eine effiziente Speicherung und Verarbeitung numerischer Daten von entscheidender Bedeutung ist.May 04, 2025 am 12:11 AM

In den Bereichen Finanzen, wissenschaftliche Forschung, medizinische Versorgung und KI ist es entscheidend, numerische Daten effizient zu speichern und zu verarbeiten. 1) In der Finanzierung kann die Verwendung von Speicherzuordnungsdateien und Numpy -Bibliotheken die Datenverarbeitungsgeschwindigkeit erheblich verbessern. 2) Im Bereich der wissenschaftlichen Forschung sind HDF5 -Dateien für die Datenspeicherung und -abnahme optimiert. 3) In der medizinischen Versorgung verbessern die Datenbankoptimierungstechnologien wie die Indexierung und die Partitionierung die Leistung der Datenabfrage. 4) In AI beschleunigen Daten, die Sharding und das verteilte Training beschleunigen, Modelltraining. Die Systemleistung und Skalierbarkeit können erheblich verbessert werden, indem die richtigen Tools und Technologien ausgewählt und Kompromisse zwischen Speicher- und Verarbeitungsgeschwindigkeiten abgewogen werden.

Wie erstellt man ein Python -Array? Geben Sie ein Beispiel an.Wie erstellt man ein Python -Array? Geben Sie ein Beispiel an.May 04, 2025 am 12:10 AM

PythonarraysSureScreeatedusedhearrayModule, nicht gebaute Inlikelisten.1) ImportThearrayModule.2) Spezifizieren Sie die THETYPECODE, z.

Was sind einige Alternativen zur Verwendung einer Shebang -Linie, um den Python -Dolmetscher anzugeben?Was sind einige Alternativen zur Verwendung einer Shebang -Linie, um den Python -Dolmetscher anzugeben?May 04, 2025 am 12:07 AM

Zusätzlich zur Shebang -Linie gibt es viele Möglichkeiten, einen Python -Interpreter anzugeben: 1. Verwenden Sie Python -Befehle direkt aus der Befehlszeile; 2. Verwenden Sie Stapeldateien oder Shell -Skripte. 3.. Verwenden Sie Build -Tools wie Make oder CMake; 4. Verwenden Sie Aufgabenläufer wie Invoke. Jede Methode hat ihre Vor- und Nachteile, und es ist wichtig, die Methode auszuwählen, die den Anforderungen des Projekts entspricht.

Wie wirkt sich die Auswahl zwischen Listen und Arrays auf die Gesamtleistung einer Python -Anwendung aus, die sich mit großen Datensätzen befasst?Wie wirkt sich die Auswahl zwischen Listen und Arrays auf die Gesamtleistung einer Python -Anwendung aus, die sich mit großen Datensätzen befasst?May 03, 2025 am 12:11 AM

ForHandlinglargedatasetsinpython, Usenumpyarraysforbetterperformance.1) Numpyarraysarememory-Effiction und FasterFornumericaloperations.2) meidenunnötiger Anbieter.3) HebelVectorisationFecedTimeComplexity.4) ManagemememoryusageSageWithEffizienceDeffictureWitheseffizienz

Erklären Sie, wie das Speicher für Listen gegenüber Arrays in Python zugewiesen wird.Erklären Sie, wie das Speicher für Listen gegenüber Arrays in Python zugewiesen wird.May 03, 2025 am 12:10 AM

Inpython, listEUSUutsynamicMemoryAllocationWithover-Accocation, whilenumpyarraysalcodeFixedMemory.1) ListSallocatemoremoryThanneded intellig, vereitelte, dass die sterbliche Größe von Zeitpunkte, OfferingPredictableSageStoageStloseflexeflexibilität.

Wie geben Sie den Datentyp der Elemente in einem Python -Array an?Wie geben Sie den Datentyp der Elemente in einem Python -Array an?May 03, 2025 am 12:06 AM

Inpython, youcansspecthedatatypeyFelemeremodelerernspant.1) Usenpynernrump.1) Usenpynerp.dloatp.Ploatm64, Formor -Präzise -Preciscontrolatatypen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.