Befunge-93, 28 27 19 18 ไบต์
เครดิตต้องไปที่Mistah Figginsซึ่งคำตอบของ PyFungeแสดงให้ฉันเห็นว่าคุณไม่จำเป็นต้องมีการตรวจสอบพิเศษสำหรับตัวละครหลักที่ขาดหายไปหากคุณเพิ่งตรวจสอบให้แน่ใจว่าค่า ASCII นั้นเป็นค่าคูณเก้า
ขอขอบคุณJo King เพิ่มเติมที่แสดงให้เห็นว่าคุณไม่จำเป็นต้องแปลงอักขระเป็นตัวเลขเทียบเท่าและสามารถลบ 3 เพื่อรับค่าที่สัมพันธ์กับฐาน 9 (ASCII 0
ลบ 3 คือ 45, คูณ 9) .
3_v#`0:~--
%9_@.+9
ลองออนไลน์!
เพื่อการทำงานคุณควรใช้ตัวอักษร*
สำหรับตัวเลขที่หายไป (มีคนอื่นที่สามารถใช้งานได้ แต่นั่นก็เป็นวิธีที่ดีที่สุด)
เอาต์พุต9
ถ้าตัวเลขที่หายไปอาจเป็น 0 หรือ 9
คำอธิบาย
3 Push 3 onto the stack.
_ Since this is non-zero, drop the 3 and branch left.
3 Now executing right to left, push 3 again.
-- Negate twice, leaving the value unchanged as our starting sum.
~ Now we start the main loop, reading a character from stdin.
`0: Duplicate and check if it's > 0, i.e. not end-of-stream.
_ # If so, continue to the left.
3 - Subtract 3 to make the number relative to base 9.
- Then subtract it from the total, and repeat the loop.
v Once we reach the end of the input, we go down.
_ Drop the EOF character from the stack and go left.
%9 +9 Mod the total with 9, and add 9.
@. Output the result and exit.
โดยพื้นฐานแล้วเรากำลังคำนวณผลรวมของตัวเลขทั้งหมดบวก 45 ต่อหลัก (ซึ่งจะถูกยกเลิกในที่สุดเมื่อเราแก้ไขด้วย 9) ผลรวมนี้หักออกจาก 3 (ผลรวมเริ่มต้นของเรา) และอีก 39 ลบด้วยหลักที่หายไป (ASCII *
ลบสาม) อีกครั้งว่า 3 ลบ 39 เป็นผลคูณของ 9 ดังนั้นมันจึงถูกยกเลิกเมื่อเราดัดแปลงด้วย 9
ในที่สุดเราก็คำนวณผลบวกลบของหลักทั้งหมด, mod 9, บวก 9, เช่น
9 - (digitsum % 9)
และนั่นทำให้ตัวเลขที่หายไป
0
หรือไม่ สิ่งที่เกี่ยวกับ[0, 9]
(อาร์เรย์หรือรายการหมายเลข 2)