Tantangan
Tulis program atau fungsi terpendek untuk menghitung Algoritma Luhn untuk memverifikasi nomor (kartu kredit).
Algoritma Luhn menjelaskan
Dari RosettaCode , algoritme ini untuk tujuan tantangan ini ditentukan seperti itu, dengan contoh input dari 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
Aturan IO
Input : Suatu string atau angka (pilihan Anda), dalam format input / output pilihan bahasa Anda
Output : Nilai true atau falsy , masing-masing, yang menunjukkan apakah input valid atau tidak menurut tes di atas.
Catatan / Tips
Cobalah untuk tidak secara sengaja memposting kartu kredit atau nomor akun Anda sendiri, jika Anda menggunakannya untuk menguji :)
Jika input tidak valid dan tidak mungkin diproses dengan algoritma yang ditentukan (yaitu terlalu pendek untuk bekerja), Anda dapat melakukan apa pun yang Anda inginkan, termasuk meledakkan komputer saya.
Namun , peluru sebelumnya tidak berarti bahwa bahasa Anda dapat melakukan apa pun yang diinginkan dengan Angka yang terlalu besar untuk ditangani. Jika bahasa Anda tidak mampu menangani test case, maka pertimbangkan untuk mengambil string sebagai input.
Contohnya
Contoh berikut divalidasi dengan skrip Python ini ; jika Anda merasa ada yang salah atau memiliki pertanyaan, cukup 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 **
** sesuai dengan implementasi Python, tetapi Anda dapat melakukan apa saja karena ini terlalu pendek untuk memenuhi syarat oleh kepatuhan yang ketat terhadap spesifikasi.
Jika salah satu di atas membatalkan jawaban yang ada (meskipun saya yakin itu tidak mungkin), maka jawaban tersebut masih valid. Namun, jawaban baru , agar valid, harus mengikuti spesifikasi di atas.