Thử thách
Viết chương trình hoặc hàm ngắn nhất để tính toán Thuật toán Luhn để xác minh số (thẻ tín dụng).
Thuật toán Luhn giải thích
Từ RosettaCode , thuật toán này cho các mục đích của thử thách này được chỉ định như vậy, với đầu vào ví dụ là 49927398716
:
Reverse the digits, make an array:
6, 1, 7, 8, 9, 3, 7, 2, 9, 9, 4
Double the numbers in odd indexes:
6, 2, 7, 16, 9, 6, 7, 4, 9, 18, 4
Sum the digits in each number:
6, 2, 7, 7, 9, 6, 7, 4, 9, 9, 4
Sum all of the numbers:
6 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 4 = 70
If the sum modulo 10 is 0, then the number is valid:
70 % 10 = 0 => valid
Quy tắc IO
Đầu vào : Chuỗi hoặc số (lựa chọn của bạn), ở định dạng lựa chọn đầu vào / đầu ra của ngôn ngữ của bạn
Đầu ra : Giá trị trung thực hoặc sai , tương ứng, cho biết liệu đầu vào có hợp lệ theo thử nghiệm ở trên hay không.
Ghi chú / Mẹo
Cố gắng không vô tình đăng số thẻ tín dụng hoặc số tài khoản của riêng bạn, nếu bạn sử dụng chúng để kiểm tra :)
Nếu đầu vào không hợp lệ và không thể xử lý với thuật toán được chỉ định (nghĩa là quá ngắn để làm việc), bạn có thể làm bất cứ điều gì bạn muốn, bao gồm cả làm nổ máy tính của tôi.
Tuy nhiên , dấu đầu dòng không có nghĩa là ngôn ngữ của bạn có thể làm bất cứ điều gì nó muốn với Số quá lớn để có thể xử lý. Nếu ngôn ngữ của bạn không có khả năng xử lý trường hợp kiểm tra, thì hãy xem xét lấy một chuỗi làm đầu vào.
Ví dụ
Các ví dụ sau đã được xác thực với tập lệnh Python này ; nếu bạn nghĩ ai đó sai hoặc có câu hỏi, chỉ cần ping @cat.
49927398716 True
49927398717 False
1234567812345670 True
1234567812345678 False
79927398710 False
79927398711 False
79927398712 False
79927398713 True
79927398714 False
79927398715 False
79927398716 False
79927398717 False
79927398718 False
79927398719 False
374652346956782346957823694857692364857368475368 True
374652346956782346957823694857692364857387456834 False
8 False **
0 True **
** theo cách triển khai Python, nhưng bạn có thể làm bất cứ điều gì vì chúng quá ngắn để đủ điều kiện tuân thủ nghiêm ngặt các đặc điểm kỹ thuật.
Nếu bất kỳ câu trả lời nào ở trên làm mất hiệu lực các câu trả lời hiện có (mặc dù tôi tin rằng điều đó là không thể), thì những câu trả lời đó vẫn còn hiệu lực. Tuy nhiên, câu trả lời mới , để có giá trị, nên tuân theo các đặc điểm kỹ thuật ở trên.