매주 Mohammad S. Anwar는 우리 모두가 두 가지 주간 작업에 대한 해결책을 생각해 낼 수 있는 기회인 The Weekly Challenge를 보냅니다. 내 솔루션은 먼저 Python으로 작성된 다음 Perl로 변환되었습니다. 이는 우리 모두가 코딩을 연습할 수 있는 좋은 방법입니다.
도전, 나의 솔루션
정수 배열 @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
양의 정수 배열 @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 중국어 웹사이트의 기타 관련 기사를 참조하세요!