好鑰匙

WBOY
WBOY原創
2024-08-19 16:34:501073瀏覽

Good keys

每週挑戰 282

穆罕默德·S·安瓦爾 (Mohammad S. Anwar) 每週都會發出“每週挑戰”,讓我們所有人都有機會為每週兩次的任務提出解決方案。我的解決方案先用Python編寫,然後轉換為Perl。這對我們所有人來說都是練習編碼的好方法。

挑戰,我的解決方案

任務 1:好整數

任務

給你一個正整數 $int,有 3 位或更多位。

編寫一個腳本以傳回給定整數中的好整數,如果沒有找到則傳回 -1。一個好的整數是恰好三個連續的匹配數字。

我的解決方案

我原本以為這個任務可以用正規表示式模式來完成,但看來我錯了。我會看看其他 TPW 成員是否可以這樣做。

對於這個任務,我有一個變數 pos,它從 0 迭代到小於字串長度的 3。然後我檢查四件事:

  1. 目前位置的數字與下一個位置的數字相同。
  2. 目前位置的數字與下一個第二位置的數字相同。
  3. 位置為 0(表示目前數字之前沒有數字)或前一個數字與目前數字不同。
  4. 位置比長度少3(表示目前三位數之後沒有數字)或下第三個數字與目前數字不同。

如果這些都是真的,我會回這三位數字。在 Python 中,這是作為字串完成的,因為「000」不是真正的整數。如果迭代器耗盡,我返回 -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

任務 2:更改密鑰

任務

您將獲得一個由使用者輸入的字母字串 $str。

編寫一個腳本來尋找使用者必須更改鍵才能鍵入給定字串的次數。更改密鑰被定義為使用與上次使用的密鑰不同的密鑰。 “shift”和“caps lock”鍵不計算在內。

我的解決方案

有趣的事實。當我得到一個新鍵盤(每隔幾年)時,我會看到我需要多長時間才能將大寫鎖定鍵撕下來。大多數鍵盤都撐不了一天!

對於此任務,我將字串轉換為小寫並從兩個變數開始。 current_key 值是目前按下的鍵,並使用輸入的第一個字母初始化。 Changes 變數是我所做的關鍵更改的數量,從 0 開始。

然後我循環遍歷輸入字串中的每個字母。如果該字母與 current_key 不同,我會用新字母更新它,並將更改增加 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

以上是好鑰匙的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:小電影推薦碼下一篇:小電影推薦碼