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 integer positif, $int, mempunyai 3 digit atau lebih.
Tulis skrip untuk mengembalikan Integer Baik dalam integer yang diberikan atau -1 jika tiada yang ditemui. Integer yang baik ialah tepat tiga digit padanan berturut-turut.
Pada asalnya saya fikir tugas ini boleh dilakukan dengan corak ekspresi biasa, tetapi nampaknya saya silap. Saya akan melihat ahli TPW lain untuk melihat sama ada mereka boleh melakukannya dengan cara itu.
Untuk tugasan ini saya mempunyai pos pembolehubah yang berulang daripada 0 hingga tiga kurang daripada panjang rentetan. Saya kemudian menyemak empat perkara:
Jika ini semua benar, saya kembalikan tiga digit tersebut. Ini dilakukan sebagai rentetan dalam Python, kerana '000' bukan integer sebenar. Jika iterator habis, saya kembalikan -1.
def good_integer(n: int) -> str: value = str(n) length = len(value) for pos in range(length-2): if ( value[pos] == value[pos+1] and value[pos] == value[pos+2] and (pos == 0 or value[pos] != value[pos-1]) and (pos + 3 == length or value[pos] != value[pos+3]) ): return value[pos:pos+3] return '-1'
$ ./ch-1.py 12344456 444 $ ./ch-1.py 1233334 -1 $ ./ch-1.py 10020003 000
Anda diberi rentetan abjad, $str, seperti yang ditaip oleh pengguna.
Tulis skrip untuk mencari bilangan kali pengguna terpaksa menukar kunci untuk menaip rentetan yang diberikan. Menukar kunci ditakrifkan sebagai menggunakan kunci yang berbeza daripada kunci yang terakhir digunakan. Kekunci "shift" dan "caps lock" tidak akan dikira.
Fakta yang menyeronokkan. Apabila saya mendapat papan kekunci baharu (setiap beberapa tahun), saya melihat berapa lama masa yang diambil sebelum saya merobek kunci caps lock keluar. Kebanyakan papan kekunci tidak bertahan sehari!
Untuk tugasan ini, saya menukar rentetan kepada huruf kecil dan bermula dengan dua pembolehubah. Nilai current_key ialah kekunci semasa yang ditekan, dan dimulakan dengan huruf pertama daripada input kami. Pembolehubah perubahan ialah bilangan perubahan utama yang saya buat dan bermula dengan 0.
Saya kemudian melingkari setiap huruf dalam rentetan input. Jika huruf itu berbeza daripada current_key, saya mengemas kininya dengan huruf baharu dan kenaikan akan berubah sebanyak 1.
def key_changes(s: str) -> int: s = s.lower() current_key = s[0] changes = 0 for letter in s: if letter != current_key: current_key = letter changes += 1 return changes
$ ./ch-2.py pPeERrLl 3 $ ./ch-2.py rRr 0 $ ./ch-2.py GoO 1
Atas ialah kandungan terperinci Kunci yang baik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!