Yang tentang perkataan

DDD
Lepaskan: 2024-12-30 19:07:10
asal
736 orang telah melayarinya

The one about words

Cabaran Mingguan 299

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

Tugasan 1: Gantikan Perkataan

Tugasan

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.

penyelesaian saya

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)
Salin selepas log masuk
Salin selepas log masuk

Kurungan pertama (?

Untuk input daripada baris arahan, saya mengambil nilai terakhir sebagai ayat dan semua yang lain sebagai perkataan.

Contoh

$ ./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
Salin selepas log masuk
Salin selepas log masuk

Tugasan 2: Carian Perkataan

Tugasan

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.

penyelesaian saya

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
Salin selepas log masuk

Fungsi find_match ialah fungsi rekursif. Ia memerlukan tiga parameter

  1. Matriks
  2. Baki huruf perkataan (yang belum dipadankan)
  3. Senarai (arrayref dalam Perl) pasangan sel [row,col] yang telah kami lawati.

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)
Salin selepas log masuk
Salin selepas log masuk

Contoh

$ ./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
Salin selepas log masuk
Salin selepas log masuk

Atas ialah kandungan terperinci Yang tentang perkataan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan