มีอัลกอริทึมตรวจสอบตัวเลขที่เป็นที่นิยมเช่น Luhn และจากนั้นก็มีคนดีเช่นอัลกอริทึม Damm เหตุผลที่เป็นไปได้เพียงอย่างเดียวที่อยู่เบื้องหลังความนิยมของอัลกอริทึมเช่น Luhn ก็คือมีการใช้โค้ดที่มีอยู่ของพวกเขา ซึ่งหมายความว่าเราในฐานะชุมชนมีพลังที่จะเปลี่ยนแปลงโลกด้วยการนำเสนออัลกอริทึมที่ดีกว่า
ดังนั้นความท้าทายนี้คือการเปลี่ยนแปลงของโลกโดยการเขียนฟังก์ชั่นหรือโปรแกรมที่สมบูรณ์ในภาษาของคุณเลือกที่คำนวณตรวจสอบหลักโดยใช้อัลกอริทึม Damm คำตอบที่มีจำนวนอักขระน้อยที่สุด(ไม่ใช่ไบต์) จะถูกเลือกให้เป็นผู้ชนะในอีกไม่กี่สัปดาห์ โปรดทราบว่าฟังก์ชั่นช่วยเหลือทั้งหมดและการประกาศของตารางการดำเนินการจะต้องรวมอยู่ในการนับจำนวนตัวอักษร ในกรณีที่เสมอคำตอบที่ได้รับความนิยมจะถูกเลือก
อัลกอริทึมนี้หมุนรอบโต๊ะการดำเนินการซึ่งจะต้องเป็นกลุ่มการต่อต้านแบบสมมาตรที่อ่อนแออย่างสิ้นเชิงทั้งหมดของลำดับที่ 10 ตารางการทำงานที่สามารถพบได้ในบทความ Wikipediaเกี่ยวกับอัลกอริทึม Damm คือสิ่งที่จะใช้ในการท้าทายนี้ เพื่อความสมบูรณ์ฉันจะทำซ้ำด้านล่าง:
| 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 แต่ควรเกี่ยวข้องกับตัวเลขในสตริงเท่านั้น มันจะต้องพิมพ์ (ถ้าโปรแกรม) หรือคืน (ถ้าฟังก์ชั่น) สตริงเดิมที่มีการตรวจสอบตัวเลขที่คำนวณได้ผนวก หากคุณเลือกที่จะเขียนโปรแกรมโปรแกรมอาจยอมรับอินพุตเป็นอาร์กิวเมนต์หรืออินพุตมาตรฐาน หากสตริงอินพุตว่างเปล่าหรือไม่มีตัวเลขใด ๆ คุณต้องส่งคืนหรือผนวกศูนย์
ตัวอย่างบางส่วน:
Input | Output
------------+-------------
42 | 427
427 | 4270
2 to 2 | 2 to 29
23 42 76- | 23 42 76-5
- | -0