Chaque semaine, Mohammad S. Anwar envoie The Weekly Challenge, une chance pour nous tous de trouver des solutions à deux tâches hebdomadaires. Mes solutions sont d'abord écrites en Python, puis converties en Perl. C'est une excellente façon pour nous tous de pratiquer le codage.
Défi, Mes solutions
Vous recevez un tableau de mots et une phrase.
Écrivez un script pour remplacer tous les mots de la phrase donnée qui commencent par l'un des mots du tableau donné.
Pour cette tâche, j'utilise une expression régulière pour effectuer la transformation. Le code complet est
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)
La première parenthèse (?
Pour la saisie depuis la ligne de commande, je prends la dernière valeur comme phrase et tout le reste comme mots.
$ ./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
Vous recevez une grille de caractères et une chaîne.
Écrivez un script pour déterminer si la chaîne donnée peut être trouvée dans la grille de caractères donnée. Vous pouvez commencer n'importe où et emprunter n'importe quel chemin orthogonal, mais vous ne pouvez pas réutiliser une cellule de la grille.
Pour cette tâche, je commence par vérifier que toutes les lignes ont le même nombre de colonnes. Je parcours ensuite chaque cellule. Si la lettre de cette cellule est la première lettre du mot, j'appelle la fonction find_match. Si cela renvoie vrai, cette fonction retournera vrai. Si ce n'est pas le cas, je passe à la cellule suivante contenant la lettre de départ. S'il n'en existe pas, je renvoie false.
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
La fonction find_match est une fonction récursive. Cela prend trois paramètres
À partir de la dernière position, nous pouvons nous déplacer dans l'une des quatre directions (haut, bas, gauche ou droite). Je vérifie que bouger dans cette direction ne nous met pas hors des limites ou n'est pas une cellule que nous avons déjà utilisée. Si ce n'est pas le cas et que la lettre de cette cellule correspond à la lettre que nous recherchons, j'appelle à nouveau la fonction, en retirant la première lettre du mot variable et en ajoutant la nouvelle position. Si j'arrive à un point où il ne reste plus de lettres, le mot peut être trouvé et je renvoie True.
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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!