ท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่สั้นที่สุดเพื่อคำนวณหาอัลกอรึทึม Luhnสำหรับการตรวจสอบหมายเลข (บัตรเครดิต)
อัลกอริทึม Luhn อธิบาย
จาก RosettaCodeอัลกอริทึมนี้สำหรับวัตถุประสงค์ของการท้าทายนี้จะถูกระบุเช่นนี้โดยมีตัวอย่างอินพุต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
กฎของ IO
อินพุต : สตริงหรือตัวเลข (ตัวเลือกของคุณ) ในรูปแบบอินพุต / เอาต์พุตภาษาที่คุณเลือก
เอาท์พุท : ค่าจริงหรือเท็จตามลำดับระบุว่าอินพุตถูกต้องตามการทดสอบข้างต้น
หมายเหตุ / เคล็ดลับ
พยายามอย่าโพสต์หมายเลขบัตรเครดิตหรือบัญชีของคุณโดยไม่ตั้งใจหากคุณใช้เพื่อทดสอบ :)
หากอินพุตไม่ถูกต้องและเป็นไปไม่ได้ที่จะประมวลผลด้วยอัลกอริทึมที่ระบุ (เช่นสั้นเกินไปที่จะทำงานด้วย) คุณสามารถทำสิ่งที่คุณต้องการรวมถึงระเบิดคอมพิวเตอร์ของฉัน
อย่างไรก็ตามสัญลักษณ์แสดงหัวข้อก่อนหน้าไม่ได้หมายความว่าภาษาของคุณสามารถทำทุกอย่างที่ต้องการด้วยหมายเลขที่ใหญ่เกินไปสำหรับจัดการ หากภาษาของคุณไม่สามารถจัดการกรณีทดสอบได้ให้ลองพิจารณาใช้สตริงเป็นอินพุต
ตัวอย่าง
ตัวอย่างต่อไปนี้ได้รับการตรวจสอบแล้วกับสคริปต์ Python นี้ ; หากคุณคิดว่ามีข้อผิดพลาดหรือมีคำถามเพียงแค่ 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 **
** ตามการใช้งาน Python แต่คุณอาจทำอะไรก็ได้เพราะสิ่งเหล่านี้สั้นเกินไปที่จะมีสิทธิ์ได้รับการปฏิบัติตามข้อกำหนดอย่างเคร่งครัด
หากคำตอบใด ๆ ข้างต้นเป็นโมฆะคำตอบที่มีอยู่ (แม้ว่าฉันเชื่อว่าไม่ควรทำ) คำตอบเหล่านั้นจะไม่ถูกต้อง อย่างไรก็ตามคำตอบใหม่เพื่อให้ถูกต้องควรปฏิบัติตามข้อกำหนดข้างต้น