>  기사  >  백엔드 개발  >  더블룬

더블룬

Barbara Streisand
Barbara Streisand원래의
2024-10-12 12:15:02930검색

Double Luhn

주간 챌린지 290

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

도전, 나의 솔루션

작업 1: 이중 존재

작업

정수 배열 @int가 제공됩니다.

다음과 같이 두 개의 인덱스 $i와 $j가 있는지 찾는 스크립트를 작성하세요.

  1. $i != $j
  2. 0 <= ($i, $j) < 스칼라 @ints
  3. $ints[$i] == 2 * $ints[$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

작업 2: Luhn의 알고리즘

숫자(및 무시할 수 있는 다른 문자도 포함)가 포함된 문자열 $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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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