좋은 키

WBOY
WBOY원래의
2024-08-19 16:34:501070검색

Good keys

주간 챌린지 282

매주 Mohammad S. Anwar는 우리 모두가 두 가지 주간 작업에 대한 해결책을 생각해 낼 수 있는 주간 챌린지를 보냅니다. 내 솔루션은 먼저 Python으로 작성된 다음 Perl로 변환되었습니다. 이는 우리 모두가 코딩을 연습할 수 있는 좋은 방법입니다.

도전, 나의 솔루션

작업 1: 좋은 정수

3자리 이상의 양의 정수 $int가 주어졌습니다.

주어진 정수에서 적합한 정수를 반환하거나 아무것도 찾지 못한 경우 -1을 반환하는 스크립트를 작성하세요. 좋은 정수는 정확히 3개의 연속 숫자가 일치하는 것입니다.

내 솔루션

원래는 이 작업을 정규식 패턴으로 수행할 수 있다고 생각했는데, 제 생각이 틀린 것 같습니다. 다른 TPW 멤버들도 그런 식으로 할 수 있는지 살펴봐야겠습니다.

이 작업에는 0에서 문자열 길이보다 작은 3까지 반복하는 변수 pos가 있습니다. 그런 다음 네 가지 사항을 확인합니다.

  1. 현재 위치의 숫자와 다음 위치의 숫자가 같습니다.
  2. 현재 위치의 숫자가 다음 두 번째 위치의 숫자와 같습니다.
  3. 위치가 0(현재 숫자 앞에 숫자가 없음을 의미)이거나 이전 숫자가 현재 숫자와 동일하지 않습니다.
  4. 위치가 길이보다 3자리 적거나(현재 세 자리 뒤에 숫자가 없음을 의미), 다음 세 번째 자리가 현재 자리와 동일하지 않습니다.

이것이 모두 사실이라면 그 세 자리 숫자를 반환합니다. '000'은 실제 정수가 아니기 때문에 Python에서는 문자열로 수행됩니다. 반복자가 소진되면 -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" 키는 계산되지 않습니다.

내 솔루션

재밌는 사실. 몇 년에 한 번씩 새 키보드를 구입하면 Caps Lock 키를 뜯어내는 데 시간이 얼마나 걸리는지 알 수 있습니다. 대부분의 키보드는 하루도 못 버틴다!

이 작업에서는 문자열을 소문자로 변환하고 두 개의 변수로 시작합니다. current_key 값은 현재 누른 키이며 입력의 첫 번째 문자로 초기화됩니다. 변경사항 변수는 내가 수행한 주요 변경사항 수이며 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으로 문의하세요.