Befunge - 37 x 5 = 185 38 x 3 = 114 ตัวอักษร
นี่คือ จำกัด จำนวนเต็มเนื่องจาก Befunge ไม่มีการสนับสนุนจุดลอย
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
คำอธิบาย
คุณสมบัติที่โดดเด่นที่สุดของBefungeคือแทนที่จะเป็นชุดคำสั่งเชิงเส้นเหมือนภาษาส่วนใหญ่ มันเป็นตาราง 2d ของคำแนะนำตัวอักษรเดียวซึ่งการควบคุมสามารถไหลได้ในทุกทิศทาง
วิธีแรก&
เพียงแค่ใส่หมายเลขแรก v
และ>
การควบคุมแล้วเปลี่ยนเส้นทางไปยังเส้นทางหลักในแถวที่สอง
~:0`!#v_
อินพุตนี้ใส่อักขระ ( ~
) ทำซ้ำ ( :
) ดันศูนย์ลงบนสแต็ก ( 0
) ดึงองค์ประกอบสองอันดับแรกและพิจารณาว่าตัวที่สองนั้นใหญ่กว่าตัวแรกหรือไม่ ( `
ฉันประหลาดใจที่คุณไม่สามารถใช้ `` `เพื่อรับ โค้ด backticks. ) กลับค่าความจริงขององค์ประกอบด้านบน ( !
) จากนั้นไปทางขวาหากเป็นศูนย์ลดลงอย่างอื่น ( #v_
)
โดยพื้นฐานแล้วมันกำลังตรวจสอบว่าอินพุต-1
แสดงถึงอินพุตอีกต่อไปหรือไม่
># $ .# @
หากอินพุตเป็น-1
ค่าอินพุตที่ซ้ำกันจะถูกทิ้ง ( $
) ด้านบนของสแต็กจะถูกส่งออกเป็นจำนวนเต็ม ( .
) และโปรแกรมหยุดทำงาน ( @
)
:" "`! #v_
มิฉะนั้นกระบวนการที่คล้ายกันจะถูกทำซ้ำเพื่อตรวจสอบว่าอินพุตมีค่าน้อยกว่าหรือเท่ากับช่องว่าง ถ้ามันเป็นช่องว่างการควบคุมก็จะลดลงมิฉะนั้นควบคุมหัวขวา
^ ># $ .# @#<
หากเป็นช่องว่างแสดงว่ามีการเปลี่ยนเส้นทางไปทางซ้าย ( <
); โปรแกรมหยุด ( @
), output ( .
) และการเปลี่ยนเส้นทางขวา ( >
) ถูกข้ามโดยใช้#
; แต่การกำจัดจะดำเนินการเพื่อลบพื้นที่ออกจากสแต็ก ในที่สุดมันจะถูกเปลี่ยนเส้นทางเพื่อเริ่มต้นการดำเนินการถัดไป ( ^
)
:","`#^_
หากไม่ใช่พื้นที่กระบวนการเดียวกันจะใช้ในการแยกถ้ามันอยู่ใน[+, *]
หรือ[-, \]
ไปทางขวาและขึ้นตามลำดับ
>~ "*"`#v_&*>
^ >&+
สำหรับ[+, *]
มันถูกแบ่งออกอีกครั้งเพื่อตรวจสอบไม่ว่าจะเป็นหรือ+
*
หาก+
ถูกนำไปยังหมายเลขถัดไปคืออินพุต ( &
) และถูกเพิ่ม ( +
) การควบคุมจะล้อมรอบและถูกเปลี่ยนเส้นทางไปยังเส้นทางหลักสำหรับอักขระถัดไป หากเป็นเช่น*
นั้นอินพุต ( &
) และทวีคูณ ( *
) จากนั้นจะล้อมรอบโดยตรง
/& _ #`&# "-"$# -#<
สำหรับการ[-, \]
ที่จะเริ่มต้นด้านซ้ายหัวขวา #
's ข้ามตัวละครหลังจากที่พวกเขาเพื่อให้เส้นทางที่เริ่มต้น"-"`_
ซึ่งก็กำหนดว่ามันเป็นหรือ-
/
หากเป็นเช่น/
นั้นระบบจะปล่อยให้อินพุต ( &
) และหาร ( /
) ต่อไป หากเป็นเช่น-
นั้นหัวจะถูกต้องให้ข้ามอักขระอีกครั้งเพื่อดำเนินการ&"-"$-
ส่งผลให้มีการป้อนตัวเลข ( &
) -
อักขระที่ถูกผลักลงบนสแต็กแล้วละทิ้ง ( "-"$
) จากนั้นจึงลบการคำนวณ ( -
) การควบคุมจะถูกเปลี่ยนเส้นทางกลับไปยังเส้นทางหลัก