Luhn

Luhn

보통

지침

주어진 숫자가 룬 공식에 따라 유효한지 판단해요.

룬 알고리즘은 신용카드 번호나 캐나다 사회보험 번호처럼 다양한 식별 번호의 유효성을 검사하는 데 사용하는 간단한 체크섬 공식이에요.

이 과제에서는 주어진 문자열이 유효한지 확인해요.

숫자 검증하기

길이가 1 이하인 문자열은 유효하지 않아요. 입력에 공백이 있어도 되지만, 확인하기 전에 공백을 제거해야 해요. 그 밖의 숫자가 아닌 문자는 모두 허용되지 않아요.

예시 1: 유효한 신용카드 번호

4539 3195 0343 6467

룬 알고리즘의 첫 단계는 오른쪽부터 시작해서 두 번째 자릿수마다 두 배로 만드는 거예요. 여기서는 다음 자릿수들을 두 배로 만들어요.

4_3_ 3_9_ 0_4_ 6_6_

숫자를 두 배로 만든 결과가 9보다 크면 그 곱에서 9를 빼요. 두 배로 만든 결과는 다음과 같아요.

8569 6195 0383 3437

그다음 모든 자릿수를 더해요.

8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80

합이 10으로 나누어떨어지면 그 숫자는 유효해요. 이 숫자는 유효해요!

예시 2: 유효하지 않은 신용카드 번호

8273 1232 7352 0569

오른쪽부터 시작해서 두 번째 자릿수마다 두 배로 만들어요.

7253 2262 5312 0539

자릿수를 모두 더해요.

7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57

57은 10으로 나누어떨어지지 않으므로, 이 숫자는 유효하지 않아요.

참고

지침을 꼼꼼히 읽어 봐요. 대충 훑어보면 방향에 대한 중요한 세부 사항을 놓칠 수 있어요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Pharo Exercism

Luhn 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Pharo 트랙을 연습 문제 50개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.

Luhn 깊이 살펴보기!

Luhn의 서로 다른 8가지 버전을 살펴봐요. 아주 깔끔한 Ruby 구현으로 시작해서 명령형과 함수형 접근법을 살펴보고, Erik과 Jeremy가 해독하는 데 꽤 애를 먹은 SQLite 버전으로 마무리해요.