있습니다 인기 등 Luhn과 같은 검사 숫자 알고리즘은 다음 거기에 좋은 당국이 알고리즘은 예를 들어, 사람. Luhn과 같은 알고리즘이 인기를 얻은 유일한 이유는 코드 골프 구현이 존재하기 때문입니다. 이는 커뮤니티로서 우리가 더 나은 알고리즘의 골프 구현을 제공함으로써 세상을 바꿀 힘을 가지고 있음을 의미합니다.
따라서이 과제는 Damm 알고리즘을 사용하여 검사 숫자를 계산하는 선택한 언어로 함수 또는 완전한 프로그램을 작성하여 세상을 바꾸는 것입니다 . 몇 주 안에 가장 적은 수의 문자 (바이트가 아님)를 가진 답이 승자로 선정됩니다. 모든 보조 기능 및 작업 테이블 선언은 문자 수에 포함되어야합니다. 동점 인 경우 가장 인기있는 답변이 선택됩니다.
이 알고리즘은 순서가 10 인 약칭 적으로 반대 칭적인 유사 그룹이어야하는 작업 테이블을 중심으로 진행됩니다. Damm 알고리즘에 대한 Wikipedia 기사 에서 찾을 수있는 작업 테이블 은이 문제에 사용됩니다. 완전성을 기하기 위해 아래에서 재현합니다.
| 0 1 2 3 4 5 6 7 8 9
----+----------------------------------------
0 | 0 3 1 7 5 9 8 6 4 2
1 | 7 0 9 2 1 5 4 8 6 3
2 | 4 2 0 6 8 7 1 3 5 9
3 | 1 7 5 0 9 8 3 4 2 6
4 | 6 1 2 3 0 4 5 9 7 8
5 | 3 6 7 4 2 0 9 5 8 1
6 | 5 8 6 9 7 2 0 1 3 4
7 | 8 9 4 5 3 6 2 0 1 7
8 | 9 4 3 8 6 1 7 2 0 5
9 | 2 5 8 1 4 3 6 7 9 0
간단히 말해 (자세한 내용은 Wikipedia 기사 참조 ) 알고리즘은 다음과 같이 작동합니다.
- 처리 할 숫자 목록과 0으로 설정된 중간 숫자로 시작합니다.
- 목록의 모든 숫자에 대해 숫자를 열 인덱스로 사용하고 이전 중간 숫자를 행 인덱스로 사용하여 새 임시 숫자를 계산합니다.
- 마지막 중간 숫자는 체크 숫자입니다. 이미 체크 숫자가 추가 된 숫자의 유효성을 검사하는 경우 숫자가 유효하면 마지막 중간 숫자는 0입니다.
프로그램이나 함수는 널 (null)을 제외한 모든 문자를 포함 할 수있는 문자열을 허용해야하지만 문자열의 숫자에만 관련되어야합니다. 계산 된 확인 숫자가 추가 된 원래 문자열을 인쇄 (프로그램의 경우)하거나 반환 (기능의 경우)해야합니다. 프로그램 작성을 선택한 경우 프로그램은 입력을 인수 또는 표준 입력으로 승인 할 수 있습니다. 입력 문자열이 비어 있거나 숫자가없는 경우 0을 반환하거나 추가해야합니다.
몇 가지 예 :
Input | Output
------------+-------------
42 | 427
427 | 4270
2 to 2 | 2 to 29
23 42 76- | 23 42 76-5
- | -0