>  기사  >  백엔드 개발  >  주간 챌린지

주간 챌린지

WBOY
WBOY원래의
2024-08-27 06:05:32753검색

Weekly Challenge

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

도전, 나의 솔루션

작업 1: 고유 번호

정수 배열 @ints가 제공되며, 여기서 하나의 요소를 제외한 모든 요소는 두 번 이상 나타납니다.

정확히 한 번만 나타나는 요소를 찾는 스크립트를 작성하세요.

내 솔루션

이번 주의 두 챌린지는 모두 정수의 빈도와 관련이 있습니다. Python에는 항목 목록을 자동으로 빈도 사전으로 변환하는 Counter 함수(컬렉션 모듈에 있음)가 있습니다. Perl 솔루션의 경우 이 작업을 수동으로 수행합니다.

freq dict가 채워지면 list comprehension을 사용하여 한 번만 나타나는 모든 정수를 찾습니다. 이는 Once_only 변수에 저장됩니다. 목록에 하나의 값이 있으면 이를 반환합니다. 그렇지 않으면 적절한 오류 메시지가 표시됩니다.

def unique_number(ints: list) -> int:
    freq = Counter(ints)
    only_once = [i for i in freq if freq[i] == 1]

    if len(only_once) == 1:
        return only_once[0]

    if len(only_once) == 0:
        raise ValueError('No values only appear once')

    raise ValueError('More than one value appears once')

$ ./ch-1.py 3 3 1
1

$ ./ch-1.py 3 2 4 2 4
3

$ ./ch-1.py 1
1

$ ./ch-1.py 4 3 1 1 1 4
3

작업 2: 자릿수 값

양의 정수 배열 @ints가 제공됩니다.

0 <= i < 범위의 모든 인덱스 i에 대해 true를 반환하는 스크립트를 작성하세요. 배열의 크기에 따라 숫자 i는 주어진 배열에서 정확히 $ints[$i] 번 발생하고, 그렇지 않으면 false를 반환합니다.

내 솔루션

마지막 작업과 마찬가지로 freq라는 dict(Perl의 해시)를 만들어 각 정수의 빈도를 저장합니다. 그런 다음 목록을 통해 조건이 각 값을 충족하는지 확인합니다.

def digit_count_value(ints: list) -> bool:
    freq = Counter(ints)

    for idx, value in enumerate(ints):
        if freq[idx] != value:
            return False

    return True




</p>
<h3>
  
  
  예
</h3>



<pre class="brush:php;toolbar:false">$ ./ch-2.py 1 2 1 0
true

$ ./ch-2.py 0 3 0
false

위 내용은 주간 챌린지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.