Setiap minggu Mohammad S. Anwar menghantar Cabaran Mingguan, peluang untuk kita semua mencari penyelesaian kepada dua tugas mingguan. Penyelesaian saya ditulis dalam Python terlebih dahulu, dan kemudian ditukar kepada Perl. Ini cara yang bagus untuk kita semua mempraktikkan beberapa pengekodan.
Cabaran, Penyelesaian saya
Anda diberi susunan perkataan dan ayat.
Tulis skrip untuk menggantikan semua perkataan dalam ayat yang diberikan yang bermula dengan mana-mana perkataan dalam tatasusunan yang diberikan.
Untuk tugasan ini saya menggunakan ungkapan biasa untuk membuat transformasi. Kod lengkap ialah
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)
Kurungan pertama (?
Untuk input daripada baris arahan, saya mengambil nilai terakhir sebagai ayat dan semua yang lain sebagai perkataan.
$ ./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
Anda diberi grid aksara dan rentetan.
Tulis skrip untuk menentukan sama ada rentetan yang diberikan boleh ditemui dalam grid aksara yang diberikan. Anda boleh bermula dari mana-mana sahaja dan mengambil mana-mana laluan ortogon, tetapi tidak boleh menggunakan semula sel grid.
Untuk tugasan ini, saya mulakan dengan menyemak semua baris mempunyai bilangan lajur yang sama. Saya kemudian pergi melalui setiap sel. Jika huruf dalam sel itu ialah huruf pertama perkataan, saya memanggil fungsi find_match. Jika itu kembali benar, fungsi ini akan kembali benar. Jika tidak, saya terus ke sel seterusnya yang mengandungi huruf permulaan. Jika tiada, saya membalas palsu.
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
Fungsi find_match ialah fungsi rekursif. Ia memerlukan tiga parameter
Dari kedudukan terakhir, kita boleh bergerak satu daripada empat arah (atas, bawah, kiri atau kanan). Saya menyemak bahawa mengalihkan arah ini tidak meletakkan kita di luar batasan atau merupakan sel yang telah kita gunakan. Jika tidak dan huruf dalam sel ini sepadan dengan huruf yang kita cari, saya memanggil fungsi itu sekali lagi, mengambil huruf pertama daripada pembolehubah perkataan dan menambah kedudukan baharu. Jika saya sampai ke tahap yang tiada huruf lagi, perkataan itu boleh ditemui dan saya kembalikan Benar.
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
Atas ialah kandungan terperinci Yang tentang perkataan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!