Mohammad S. Anwar は毎週、毎週 2 つのタスクに対する解決策を全員が考え出すチャンスであるウィークリー チャレンジを送信します。私のソリューションは最初に Python で書かれ、次に Perl に変換されます。これは、私たち全員がコーディングを練習するのに最適な方法です。
挑戦、私の解決策
単語の配列と文が与えられます。
指定された配列内のいずれかの単語で始まる、指定された文内のすべての単語を置き換えるスクリプトを作成します。
このタスクでは、正規表現を使用して変換を行います。完全なコードは
です。
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
文字のグリッドと文字列が与えられます。
指定された文字列が指定された文字のグリッド内で見つかるかどうかを判断するスクリプトを作成します。どこから開始しても直交するパスを選択できますが、グリッド セルを再利用することはできません。
このタスクでは、すべての行の列数が同じであることを確認することから始めます。次に、各セルを調べます。そのセル内の文字が単語の最初の文字である場合、find_match 関数を呼び出します。それが true を返した場合、この関数は true を返します。そうでない場合は、開始文字を含む次のセルに進みます。存在しない場合は 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
find_match 関数は再帰関数です。 3 つのパラメータを受け取ります
最後の位置から、4 つの方向 (上下左右) のいずれかに移動できます。この方向に移動しても範囲外にならないこと、またはすでに使用したセルであることを確認します。一致せず、このセル内の文字が探している文字と一致する場合は、関数を再度呼び出して、word 変数から最初の文字を取り除き、新しい位置を追加します。文字がなくなるところまで到達すると、単語が見つかり、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
以上が言葉に関するものの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。