더블룬

Barbara Streisand
풀어 주다: 2024-10-12 12:15:02
원래의
1023명이 탐색했습니다.

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이 두 개 이상 있는지 확인해야 합니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

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를 반환합니다.

1

2

3

4

5

6

7

8

9

10

11

12

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

로그인 후 복사

1

2

3

4

5

6

7

8

$ ./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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿