Kunci yang baik

WBOY
Lepaskan: 2024-08-19 16:34:50
asal
1047 orang telah melayarinya

Good keys

Cabaran Mingguan 282

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: Integer Baik

Tugasan

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.

penyelesaian saya

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:

  1. Digit pada kedudukan semasa adalah sama dengan digit di kedudukan seterusnya.
  2. Digit pada kedudukan semasa adalah sama dengan digit di kedudukan kedua seterusnya.
  3. Kedudukan ialah 0 (bermaksud tiada digit sebelum digit semasa) atau digit sebelumnya tidak sama dengan digit semasa.
  4. Kedudukan adalah 3 kurang daripada panjang (bermaksud tiada digit selepas tiga digit semasa) atau digit ketiga seterusnya tidak sama dengan digit semasa.

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

Contoh

$ ./ch-1.py 12344456
444

$ ./ch-1.py 1233334
-1

$ ./ch-1.py 10020003
000
Salin selepas log masuk

Tugasan 2: Menukar Kekunci

Tugasan

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.

penyelesaian saya

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

Contoh

$ ./ch-2.py pPeERrLl
3

$ ./ch-2.py rRr
0

$ ./ch-2.py GoO
1
Salin selepas log masuk

Atas ialah kandungan terperinci Kunci yang baik. 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