Das Pausenspiel

Mary-Kate Olsen
Freigeben: 2024-11-20 04:39:01
Original
792 Leute haben es durchsucht

The Break Game

Wöchentliche Herausforderung 295

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 Programmieren zu üben.

Herausforderung, meine Lösungen

Aufgabe 1: Wortbruch

Aufgabe

Sie erhalten eine Zeichenfolge, $str, und eine Wortliste, @words.

Schreiben Sie ein Skript, das „true“ oder „false“ zurückgibt, ob die angegebene Zeichenfolge in eine durch Leerzeichen getrennte Folge von einem oder mehreren Wörtern aus der angegebenen Liste segmentiert werden kann.

Meine Lösung

Bei TWC denke ich oft darüber nach, wie ich das Problem am Montag auf dem Weg nach Hause lösen würde. Ich dachte an das Beispiel einer Zeichenfolge „winwine“ und der Wörter „win“ und „wine“ sowie an die Zeichenfolge „winwine“. Es scheint keine deterministische Möglichkeit zu geben, zu erkennen, welches Wort ich zuerst finden sollte.

Ein paar Tage später hatte ich die geniale Idee, dass ich tatsächlich das falsche Problem löste. Eine viel einfachere Lösung bestand darin, reguläre Ausdrücke zu verwenden, um zu sehen, ob ein oder mehrere Wörter mit der Zeichenfolge s.

übereinstimmten

Und das habe ich geschrieben. Ich verwende re.escape in Python und quotemeta in Perl, um alle speziellen Metazeichen in der Wortliste zu maskieren.

def word_break(s: str, words: list) -> bool:
    pattern = '^(' + '|'.join(map(re.escape, words)) + ')+$'

    return True if re.search(pattern, s) else False
Nach dem Login kopieren
Nach dem Login kopieren

Beispiele

$ ./ch-1.py weeklychallenge challenge weekly
true

$ ./ch-1.py perlrakuperl raku perl
true

$ ./ch-1.py sonsanddaughters sons sand daughters
false
Nach dem Login kopieren
Nach dem Login kopieren

Aufgabe 2: Sprungspiel

Aufgabe

Sie erhalten ein Array von Ganzzahlen, @ints.

Schreiben Sie ein Skript, um die Mindestanzahl an Sprüngen zu ermitteln, um das letzte Element zu erreichen. $ints[$i] stellt die maximale Länge eines Vorwärtssprungs vom Index $i dar. Falls das letzte Element nicht erreichbar ist, geben Sie -1 zurück.

Meine Lösung

Beim Erledigen dieser Aufgaben verwende ich auch TDD, was ich in meinem Tagesjob nicht mache. Wenn der Test fehlschlägt, liegt in der Regel entweder ein offensichtlicher Fehler oder etwas Schwierigeres vor. Diese Aufgabe war eine von später. Es folgte eine Menge Fehlerbehebung.

Ich weiß, dass sowohl Python als auch Perl über ausgezeichnete integrierte Debugging-Tools verfügen, aber ich bin immer noch ein Fan davon, eine große Menge an Druckanweisungen zu verwenden.

Für diese Aufgabe habe ich eine rekursive Funktion namens jump_game. Es benötigt zwei Parameter: ints ist die Liste der ganzen Zahlen (beginnend mit der vollständigen Liste) und goes, die bei eins beginnen.

Wenn die erste Ganzzahl 0 ist, gebe ich None (undef in Python) zurück, da keine weitere Bewegung möglich ist. Dann iteriere ich – mit einer Variablen i – vom Wert von int[0] bis 1. Wenn dieser Wert größer oder gleich eins kleiner als die Länge der Liste ist, haben wir eine Lösung und ich gebe Züge zurück. Für andere Werte rufe ich die Funktion erneut auf, entferne die i ersten Werte und erhöhe die Bewegungen um eins.

Ich habe eine min_moves-Variable, um sicherzustellen, dass wir die Mindestanzahl an Zügen für alle Iterationen zurückgeben.

def word_break(s: str, words: list) -> bool:
    pattern = '^(' + '|'.join(map(re.escape, words)) + ')+$'

    return True if re.search(pattern, s) else False
Nach dem Login kopieren
Nach dem Login kopieren

Was war mein Fehler, fragen Sie? Ich habe nach i >= len(ints) statt nach i >= len(ints)-1 gesucht.

Beispiele

$ ./ch-1.py weeklychallenge challenge weekly
true

$ ./ch-1.py perlrakuperl raku perl
true

$ ./ch-1.py sonsanddaughters sons sand daughters
false
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDas Pausenspiel. 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