APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
เอาท์พุท1ถ้าคี ธ0มิฉะนั้น
GolfScript นัดหยุดงานอีกครั้ง !!
แก้ไข
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
ใช้ Right-Reduction ( ⊢/) แทน Take ลบ 1 ( ¯1↑), ประหยัด 1 char โดยตรงและอ้อม 1 บันทึกจาก Disclose ( ⊃)
คำอธิบาย
⍎¨⍕x←⎕ใช้เวลาการประเมินการป้อนข้อมูล (ถือว่าเป็นตัวเลข) xและกำหนดให้ แปลงเป็นอาร์เรย์อักขระ (aka "string" ในภาษาอื่น ๆ ) และวนซ้ำอักขระแต่ละตัว (หลัก) แปลงเป็นตัวเลข ดังนั้นนี่จะส่งผลให้มีตัวเลขที่เป็นตัวเลข
{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}เป็นฟังก์ชั่น "loop" หลัก:
+/⍵↑⍨-⍴⍕xใช้ตัวเลข⍴⍕x(ไม่ใช่ของตัวเลขx) ตัวสุดท้ายจากอาร์เรย์และสรุปผลรวม
⍵,เชื่อมต่อกับส่วนท้ายของอาร์เรย์
(x>⊢/⍵)ตรวจสอบว่าหมายเลขสุดท้ายของอาร์เรย์ (ซึ่งยังไม่ได้+/⍵↑⍨-⍴⍕xต่อกันอยู่) มีขนาดเล็กกว่าxและส่งกลับ1หรือ0
∇⍣เรียกใช้ฟังก์ชันนี้ในอาร์เรย์ใหม่ที่หลายต่อหลายครั้ง ดังนั้นหากจำนวนสุดท้ายมีขนาดเล็กกว่าxฟังก์ชั่นนี้จะเกิดขึ้นอีก มิฉะนั้นเพียงส่งคืนอาร์เรย์ใหม่
หลังจากที่ดำเนินการฟังก์ชันอาร์เรย์มีผลบวกขึ้นไปยังจุดที่ 2 ของตัวเลขที่มีค่ามากกว่าหรือเท่ากับx(เช่น14จะสร้าง1 4 5 9 14 23, 13จะสร้าง1 3 4 7 11 18 29)
สุดท้ายตรวจสอบว่าแต่ละหมายเลขจะมีค่าเท่ากับxและผลผลิตรวมของไบนารีที่เกิด แถว
แก้ไข
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
เพิ่ม 2 ตัวอักษร :-( เพื่อสร้างเอาต์พุต0หากอินพุตเป็นหนึ่งหลัก
ยังแก้ไขอีก
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
คำอธิบาย
ตอนนี้ฟังก์ชั่นจะลดจำนวนแรก ( 1↓) จากอาร์เรย์แทนการรับ⍴⍕x( ↑⍨-⍴⍕x) ครั้งสุดท้าย
อย่างไรก็ตามวิธีนี้1=ไม่เพียงพอที่จะจัดการกับตัวเลขหลักเดียว ดังนั้นตอนนี้จะลดจำนวนสุดท้ายจากอาร์เรย์ก่อนที่จะตรวจสอบความเท่าเทียมกันเพื่อxเพิ่ม 1 อักขระ
คุณเดา: แก้ไข
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
เปรียบเทียบxกับรายการที่เพิ่มใหม่แทนที่จะเป็นรายการสุดท้ายเก่าดังนั้นให้วางรายการแรก (แทนที่จะเป็นรายการสุดท้าย) ก่อนที่จะตรวจสอบความเท่าเทียมกันว่าxเพียงพอแล้วบันทึกเครื่องหมายลบ บันทึกอีก 3 โดยใช้รูปแบบอื่นของตัวดำเนินการพลังงาน ( ⍣)
และคำตอบ 25-char gs ปรากฏขึ้น (Orz)
แก้ไขล่าสุด
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
ไม่อยากเชื่อเลยว่าฉันพลาดไป
ไม่สามารถเล่นกอล์ฟได้อีกต่อไป