Perfection / ความไม่สมบูรณ์
มันสนุกดี
ความสมบูรณ์แบบ / ความไม่สมบูรณ์จะสมบูรณ์ก็ต่อเมื่อมีจำนวนที่สมบูรณ์แบบไม่ จำกัด หากมีก็เรียกว่า Perfection และหากไม่มีก็จะเรียกว่า Imperfection จนกว่าความลึกลับนี้จะได้รับการแก้ไขก็ถือทั้งสองชื่อ
1+2+3=6
จำนวนที่สมบูรณ์แบบเป็นจำนวนที่มีตัวหารสรุปผลไปยังหมายเลขที่ดังนั้นหกเป็นจำนวนที่สมบูรณ์แบบเพราะ
Perfection / Imperfection มีฟังก์ชั่นดังต่อไปนี้:
Perfection / Imperfection เป็นแบบสแต็กที่มีสแต็กที่ไม่มีดัชนี
คำสั่ง:
p(x, y)
: ผลัก x ไปยังสแต็กในตำแหน่ง yth
z(x, y)
: ผลัก x ไปยังสแต็กในตำแหน่ง yth กำจัดสิ่งที่เคยอยู่ในตำแหน่ง yth ไปก่อนหน้านี้
r(x)
: ลบไอเท็ม xth ออกจากสแต็ก
k(x)
: ส่งคืนรายการ xth บนสแต็ก
a(x, y)
: เพิ่ม x และ y เมื่อใช้กับสตริงมันจะรวมเข้าด้วยกันตามลำดับ xy
s(x, y)
: ลบ y จาก x ด้วยสตริงเอา len ล่าสุด (y) ออกจาก x
m(x, y)
: คูณ x และ y หากใช้กับสตริงให้คูณ x คูณ len y
d(x, y)
: หาร x ด้วย y
o(x)
: พิมพ์ x
i(x, y)
: ถ้า x ประเมินว่าเป็นจริงแล้วมันจะประมวลผลฟังก์ชัน y
n()
: ส่งคืนตัวนับที่บล็อกโค้ดกำลังถูกเรียกใช้
q()
: ส่งคืนความยาวของสแต็ก
t()
: อินพุตของผู้ใช้
e(x, y)
: ถ้า x เป็นจำนวนเต็มถ้า x และ y มีค่าเท่ากันดังนั้นสิ่งนี้จะคืนค่า 1 หาก y เป็นสตริงดังนั้นมันจะได้รับความยาวของ y ถ้า x เป็นสตริงจากนั้นมันจะแปลง y เป็นสตริงและตรวจสอบว่ามันเหมือนกันหรือไม่และถ้าเป็นนั้นจะคืนค่า 1 มิฉะนั้นจะคืนค่า 0
l(x, y)
: ถ้า x ใหญ่กว่า y ดังนั้นมันจะคืนค่า 1 หากมีสตริงดังนั้นมันจะใช้ความยาวของสตริง
b()
: หยุดโปรแกรม
c(x, y)
: รัน x จากนั้น y
ในการรับค่าเทียบเท่าของ Python and
ให้คูณค่าทั้งสองเข้าด้วยกัน สำหรับor
, เพิ่มค่า, และสำหรับnot
, ลบค่าจาก 1 ซึ่งจะทำงานได้ก็ต่อเมื่อค่าคือ 1 หรือ 0 ซึ่งสามารถทำได้โดยการหารตัวเลขด้วยตัวมันเอง
ชนิดข้อมูล: จำนวนเต็มและสตริง สตริงจะถูกแทนด้วย''
และตัวเลขที่ไม่ใช่จำนวนเต็มทั้งหมดจะถูกปัดเศษ
ไวยากรณ์:
รหัสประกอบด้วยฟังก์ชั่นที่ซ้อนกันภายในสิบ{}
วินาที {o(a(t(), t()))}
ตัวอย่างเช่นโปรแกรมที่จะได้รับปัจจัยการผลิตและพิมพ์เพิ่มจะเป็น: ในพื้นหลังของโปรแกรมจะมีตัวนับที่เริ่มต้นที่ 0 และดำเนินไปทีละ 1 ทุกครั้งที่เรียกใช้งานการบล็อกรหัส บล็อกรหัสแรกทำงานที่0
และอื่น ๆ เมื่อดำเนินการบล็อกรหัสสิบรายการบล็อกที่หกจะถูกดำเนินการทุกครั้งที่ตัวนับถึงจำนวนที่สมบูรณ์ คุณไม่จำเป็นต้องมีบล็อคโค้ดทั้งสิบเพื่อให้โปรแกรมทำงานได้ แต่คุณต้องมี 7 ถ้าคุณต้องการสร้างลูป {}{}{}{}{}{}{o(n())}
เพื่อทำความเข้าใจวิธีการทำงานภาษานี้เรียกใช้โปรแกรมต่อไปนี้ซึ่งพิมพ์เคาน์เตอร์ทุกครั้งนับถึงจำนวนที่สมบูรณ์แบบ:
ล่ามสามารถพบได้ที่นี่: repl.it/GL7S/37 เลือก 1 และพิมพ์รหัสของคุณในเทอร์มินัลหรือวางรหัสของคุณในcode.perfect
แท็บและเลือก 2 เมื่อคุณเรียกใช้ มันจะสมเหตุสมผลเมื่อคุณลอง
หลักฐานการทัวริงครบถ้วน / ขาดทัวริงครบถ้วน
ตามบทความวิศวกรรมสแต็คแลกเปลี่ยนซอฟต์แวร์ทัวริงสมบูรณ์จะต้องสามารถมีรูปแบบของการกระโดดซ้ำตามเงื่อนไขและมีวิธีการอ่านหรือเขียนหน่วยความจำ สามารถอ่าน / เขียนหน่วยความจำในรูปแบบของสแต็กและสามารถวนซ้ำได้เนื่องจากบล็อกโค้ดที่ 6 ถูกเรียกใช้งานทุกครั้งที่ตัวนับถึงจำนวนที่สมบูรณ์ หากมีจำนวนที่สมบูรณ์แบบไม่ จำกัด จำนวนก็สามารถวนซ้ำไปเรื่อย ๆ และทัวริงสมบูรณ์และมิฉะนั้นจะไม่
ตัวแปลแท็ก Cyclic Bitcoin ด้วยตนเองที่ใช้อักขระ 5 ตัว, 1 หรือ 0 เป็นอินพุต:
{p(t(),0)}{(p(t(),0)}{p(t(),0)}{p(t(),0)}{p(t(),0)}{p(0,0)}{c(i(e(k(s(q(),k(0))),0),c(r(q()),i(l(k(0),0),z(s(k(0),1),0)))),i(e(k(s(q(),k(0))),1),c(z(a(k(0),1),0),i(e(k(q()),1),p(k(s(q(),k(0))),1)))))}
สามารถขยายได้เพื่อใช้ตัวอักษรจำนวนเท่าใดก็ได้เป็นอินพุต อาจใช้อินพุตที่ไม่มีที่สิ้นสุด แต่ก็ต่อเมื่อมีตัวเลขที่สมบูรณ์แบบไม่ จำกัด !