매주 Mohammad S. Anwar는 우리 모두가 두 가지 주간 작업에 대한 해결책을 생각해 낼 수 있는 주간 챌린지를 보냅니다. 내 솔루션은 먼저 Python으로 작성된 다음 Perl로 변환되었습니다. 이는 우리 모두가 코딩을 연습할 수 있는 좋은 방법입니다.
도전, 나의 솔루션
정수 배열 @int가 제공됩니다.
다음과 같이 두 개의 인덱스 $i와 $j가 있는지 찾는 스크립트를 작성하세요.
비교적 간단해 보이지만 다른 Team PWC 멤버들도 알아차렸으면 하는 엄청난 문제가 있습니다. 이 작업에서는 목록을 반복하면서 해당 값의 두 배에 달하는 값이 존재하는지 확인합니다.
그러나 값이 '0'(따라서 0 × 2 = 0)인 경우 목록에 0이 두 개 이상 있는지 확인해야 합니다.
def double_exists(ints: list) -> bool: for i in ints: if i * 2 in ints: if i != 0 or ints.count(0) > 1: return True return False <h3> 예 </h3> <pre class="brush:php;toolbar:false">$ ./ch-1.py 6 2 3 3 true $ ./ch-1.py 3 1 4 13 false $ ./ch-1.py 2 1 4 2 true $ ./ch-1.py 1 3 0 false $ ./ch-1.py 1 0 3 0 true
숫자(및 무시할 수 있는 다른 문자도 포함)가 포함된 문자열 $str이 제공됩니다. 마지막 숫자는 페이로드입니다. 별도로 고려해보세요. 오른쪽부터 세면서 나머지 숫자의 첫 번째, 세 번째 등의 값을 두 배로 늘립니다.
이제 9보다 큰 각 값에 대해 해당 숫자의 합을 구합니다.
올바른 검사 숫자는 모든 값의 합에 더해 총 Mod 10이 0이 되는 숫자입니다.
페이로드가 올바른 검사 숫자와 동일한 경우에만 true를 반환합니다.
문자열에서 숫자가 아닌 문자를 제거하고 반전된 문자열을 정수 목록으로 바꾸는 것으로 이 작업을 시작합니다.
그런 다음 제공된 수식을 사용하여 계산할 값을 더하거나 2를 곱하고 9를 제거합니다. 결과 개수가 10으로 나누어지면 True를 반환하고 그렇지 않으면 False를 반환합니다.
def luhn_algorithm(s: str) -> bool: s = re.sub('[^0-9]', '', s) ints = [int(n) for n in s[::-1]] count = 0 for pos, i in enumerate(ints): if pos % 2 == 1: i *= 2 if i > 9: i -= 9 count += i return count % 10 == 0
$ ./ch-2.py 17893729974 true $ ./ch-2.py "4137 8947 1175 5904" true $ ./ch-2.py "4137 8974 1175 5904" false
위 내용은 더블룬의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!