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
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.
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)
Die erste Klammer (?
Für die Eingabe über die Kommandozeile nehme ich den letzten Wert als Satz und alles andere als Wörter.
$ ./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
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.
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
Die Funktion find_match ist eine rekursive Funktion. Es benötigt drei Parameter
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)
$ ./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
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!