Heim > Backend-Entwicklung > Python-Tutorial > Die Sache mit den Worten

Die Sache mit den Worten

DDD
Freigeben: 2024-12-30 19:07:10
Original
736 Leute haben es durchsucht

The one about words

Wöchentliche Herausforderung 299

Jede Woche verschickt Mohammad S. Anwar die Weekly Challenge, eine Chance für uns alle, Lösungen für zwei wöchentliche Aufgaben zu finden. Meine Lösungen werden zunächst in Python geschrieben und dann in Perl konvertiert. Es ist eine großartige Möglichkeit für uns alle, etwas Codierung zu üben.

Herausforderung, meine Lösungen

Aufgabe 1: Wörter ersetzen

Aufgabe

Sie erhalten eine Reihe von Wörtern und einen Satz.

Schreiben Sie ein Skript, um alle Wörter im angegebenen Satz zu ersetzen, die mit einem der Wörter im angegebenen Array beginnen.

Meine Lösung

Für diese Aufgabe verwende ich einen regulären Ausdruck, um die Transformation durchzuführen. Der vollständige Code lautet

def replace_words(words: list[str], sentence: str) -> str:
    regexp = r"(?<![a-z])(" + "|".join(map(re.escape, words)) + r")([a-z]*(?:'[a-z]+)?)"
    return re.sub(regexp, r'', sentence)
Nach dem Login kopieren
Nach dem Login kopieren

Die erste Klammer (?

Für die Eingabe über die Kommandozeile nehme ich den letzten Wert als Satz und alles andere als Wörter.

Beispiele

$ ./ch-1.py cat bat rat "the cattle was rattle by the battery"
the cat was rat by the bat

$ ./ch-1.py a b c "aab aac and cac bab"
a a a c b

$ ./ch-1.py man bike "the manager was hit by a biker"
the man was hit by a bike

$ ./ch-1.py can "they can't swim"
they can swim

$ ./ch-1.py row "the quick brown fox"
the quick brown fox
Nach dem Login kopieren
Nach dem Login kopieren

Aufgabe 2: Wortsuche

Aufgabe

Sie erhalten ein Zeichenraster und eine Zeichenfolge.

Schreiben Sie ein Skript, um festzustellen, ob die angegebene Zeichenfolge im angegebenen Zeichenraster gefunden werden kann. Sie können an einer beliebigen Stelle beginnen und einen beliebigen orthogonalen Pfad einschlagen, dürfen aber keine Gitterzelle wiederverwenden.

Meine Lösung

Für diese Aufgabe überprüfe ich zunächst, ob alle Zeilen die gleiche Anzahl von Spalten haben. Ich gehe dann jede Zelle durch. Wenn der Buchstabe in dieser Zelle der erste Buchstabe des Wortes ist, rufe ich die Funktion find_match auf. Wenn das true zurückgibt, gibt diese Funktion true zurück. Ist dies nicht der Fall, fahre ich mit der nächsten Zelle fort, die den Anfangsbuchstaben enthält. Wenn keine vorhanden ist, gebe ich false zurück.

def word_search(matrix: list[list[str]], word: str) -> bool:
    rows = len(matrix)
    cols = len(matrix[0])

    for row in range(rows):
        if len(matrix[row]) != cols:
            raise ValueError("Row %s has the wrong number of columns", row)

    for row in range(rows):
        for col in range(cols):
            if matrix[row][col] == word[0]:
                if find_match(matrix, word[1:], [[row, col]]):
                    return True

    return False
Nach dem Login kopieren

Die Funktion find_match ist eine rekursive Funktion. Es benötigt drei Parameter

  1. Die Matrix
  2. Die verbleibenden Buchstaben des Wortes (die nicht übereinstimmen)
  3. Eine Liste (arrayref in Perl) der [row,col] Zellpaare, die wir besucht haben.

Von der letzten Position aus können wir uns in eine von vier Richtungen bewegen (oben, unten, links oder rechts). Ich überprüfe, ob die Bewegung in diese Richtung uns nicht außerhalb der Grenzen bringt oder eine Zelle ist, die wir bereits verwendet haben. Wenn dies nicht der Fall ist und der Buchstabe in dieser Zelle mit dem gesuchten Buchstaben übereinstimmt, rufe ich die Funktion erneut auf, entferne den ersten Buchstaben aus der Wortvariablen und füge die neue Position hinzu. Wenn ich an einen Punkt komme, an dem keine Buchstaben mehr vorhanden sind, kann das Wort gefunden werden und ich gebe „True“ zurück.

def replace_words(words: list[str], sentence: str) -> str:
    regexp = r"(?<![a-z])(" + "|".join(map(re.escape, words)) + r")([a-z]*(?:'[a-z]+)?)"
    return re.sub(regexp, r'', sentence)
Nach dem Login kopieren
Nach dem Login kopieren

Beispiele

$ ./ch-1.py cat bat rat "the cattle was rattle by the battery"
the cat was rat by the bat

$ ./ch-1.py a b c "aab aac and cac bab"
a a a c b

$ ./ch-1.py man bike "the manager was hit by a biker"
the man was hit by a bike

$ ./ch-1.py can "they can't swim"
they can swim

$ ./ch-1.py row "the quick brown fox"
the quick brown fox
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDie Sache mit den Worten. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage