ออกแบบคอมพิวเตอร์ชุดคำสั่งหนึ่งชุด!


31

หมายเหตุ: ฉันยินดีที่จะให้รางวัลกับคำตอบที่ฉันคิดว่าน่าสนใจ

ความท้าทายของคุณคือการออกแบบคอมพิวเตอร์ชุดคำสั่งทัวริงที่สมบูรณ์ (OISC):

OISC เป็นเครื่องที่เป็นนามธรรมที่ใช้เพียงคำสั่งเดียว - obviating ความต้องการ opcode ภาษาเครื่อง ด้วยตัวเลือกที่ชาญฉลาดสำหรับการเรียนการสอนเดียวและได้รับทรัพยากรที่ไม่ จำกัด OISC จึงสามารถเป็นคอมพิวเตอร์สากลได้ในลักษณะเดียวกับคอมพิวเตอร์ทั่วไปที่มีคำสั่งมากมาย

ที่นี่นี้เป็นตัวอย่างของคำสั่งเดียวที่ทำให้ OISC สมบูรณ์แบบของทัวริง

กฎ:

คุณต้องให้การตีความหรือการพิสูจน์ดังกล่าว

คุณต้องจัดเตรียมล่ามสำหรับภาษาของคุณ ล่ามนี้ควรถูก จำกัด โดยหน่วยความจำ / เวลา (เช่นต้องไม่มีข้อ จำกัด ที่ผู้ใช้กำหนด) หากคุณไม่ได้จัดหาล่ามให้กับภาษาของคุณ (ไม่ว่าจะด้วยเหตุผลใดก็ตามนอกจากความเกียจคร้าน) คุณต้องพิสูจน์ว่าเป็นไปได้ที่จะมีคนเขียน ล่ามจะต้องเป็นไปได้ต้องเป็นไปได้

คุณต้องพิสูจน์ความสมบูรณ์ของทัวริง

คุณต้องรวมหลักฐานที่เป็นทางการว่าภาษาของคุณนั้นทัวริงสมบูรณ์ วิธีง่ายๆในการทำเช่นนี้คือการพิสูจน์ว่าสามารถตีความหรือมีพฤติกรรมเช่นเดียวกับภาษาทัวริงที่สมบูรณ์แบบอื่น ภาษาพื้นฐานที่สุดในการตีความจะBrainf ** k

ตัวอย่างเช่นภาษาปกติที่มีคำสั่งทั้งหมดเหมือนกับ Brainf ** k (และข้อ จำกัด หน่วยความจำที่ผู้ใช้กำหนด) คือทัวริงสมบูรณ์เพราะสิ่งใดก็ตามที่สามารถนำมาใช้ใน Brainf ** k สามารถนำมาใช้ในภาษา .

นี่คือรายการภาษาทัวริงที่สมบูรณ์แบบที่ใช้งานง่าย

ข้อกำหนด OISC เพิ่มเติม

  • OISC นี้ควรมีเพียงคำสั่งเดียว - มันไม่สามารถมีคำสั่งได้หลายคำสั่งโดยที่หนึ่งในนั้นทำให้ทัวริงสมบูรณ์

  • OISC ของคุณอาจใช้ไวยากรณ์ใด ๆ ที่คุณต้องการ คุณควรนิยามคำตอบว่าอะไรคือคำสั่งข้อมูลคืออะไรและอะไรคือคำสั่งห้าม (เช่นช่องว่าง) มีความคิดสร้างสรรค์!

  • อาร์กิวเมนต์ไม่เพียง แต่ต้องเป็นจำนวนเต็ม ตัวอย่างเช่น///เป็นตัวอย่างที่สวยงามของ OISC ทัวริงที่สมบูรณ์

  • อย่างไรและถ้าอินพุทและเอาท์พุทจะถูกนำไปใช้และมอบให้จะเป็นของคุณ OISC ส่วนใหญ่ใช้ I / O ผ่านตำแหน่งหน่วยความจำที่เฉพาะเจาะจง แต่อาจมีวิธีอื่นในการทำเช่นนั้นและคุณควรได้รับการสนับสนุน

  • คำตอบที่ถูกต้องจะต้องให้รหัสตัวอย่างบางส่วนใน OISC ของคุณไม่ว่าจะโดยการรวมไว้ในโพสต์หรือเชื่อมโยงไปยังความท้าทายที่เรียบง่ายแก้ไขในภาษา

การออกเสียง

ผู้ลงคะแนนโปรดจำไว้ว่าอย่าโหวตโหวตที่น่าเบื่อ ตัวอย่าง:

  • Lenguage - เทียบเท่า
  • การดำเนินการของ OISC ที่มีอยู่ (ผู้ตอบโปรดสร้างของคุณเอง!)
  • "OISC" ซึ่งอาร์กิวเมนต์แรกระบุคำสั่งที่จะโทร ( ตัวอย่าง )

อย่างไรก็ตามคุณควรโหวตผลงานสร้างสรรค์ที่น่าสนใจเช่น:

  • OISC อิงจากสมการทางคณิตศาสตร์
  • ZISCทัวริงที่สมบูรณ์ขึ้นอยู่กับเครือข่ายประสาท
  • OISC ที่เอาต์พุต I / O เกิดขึ้นในวิธีอื่นนอกเหนือจากที่ตั้งหน่วยความจำ

การชนะ

เช่นเดียวกับคำตอบที่ได้คะแนนโหวตมากที่สุดจะเป็นผู้ชนะ! โชคดี!


10
"คำสั่ง" คืออะไร? และเราจะนับพวกเขาอย่างไร
ข้าวสาลีตัวช่วยสร้าง

1
@ ไม่มีใครที่นี่ฉันหวังว่าฉันรู้มากพอที่จะลงคะแนน xD
Brian H.

2
ฉันลงคะแนนสิ่งนี้ ฉันคิดว่านี่เป็นความคิดที่น่าสนใจมาก แต่คุณไม่ได้อธิบายอย่างแน่นอนว่า OISC คืออะไรและจะยืนยันสิ่งใดได้บ้าง ฉันสร้าง BF เป็น OISC แต่นั่นขัดกับเจตนารมณ์ของคำถาม แต่ถูกต้องในทางเทคนิค
NoOneIsHere ที่นี่

1
@MDXF ฉันไม่คิดว่าคุณจะได้รับ ///: มันมีคำสั่งทดแทนและมันมีคำสั่งพิมพ์ซึ่งไม่เพียงผลข้างเคียงของคำสั่งทดแทน
Destructible Lemon

1
@NoOneIsHere เพราะความนิยมประกวด ใช่มันใช้ได้ แต่มีคะแนนไม่ดี (คะแนนนับ) ดังนั้นมันจะไม่ชนะ
user202729

คำตอบ:


20

XOISC

OISC นี้ใช้X-combinator ของฟอกเกอร์ซึ่งกำหนดไว้ดังนี้:

X=λf .f (λg h x .g x (h x)) (λa b c .a)

หากเรายอมรับความจริงที่ว่าแคลคูลัสของSKIนั้นกำลังทำทัวริงเสร็จสมบูรณ์ -combinator ด้านบนก็จะทัวริงสมบูรณ์เช่นกัน นี่เป็นเพราะS , Kและฉันสามารถเขียนได้ในรูปของXเช่นนี้XSKIX

S=X (X X)K=X XI=S K K=X (X X) (X X) (X X)

XOISC ทำงานอย่างไร

ภายใน XOISC มีสแต็ก (เริ่มแรกว่าง) จากนั้นคำสั่งที่รับเป็นอาร์กิวเมนต์ทำสิ่งต่อไปนี้:n

  • องค์ประกอบป๊อป (ฟังก์ชั่นf 1 ... f N ) จากสแต็คกดf 1 ( f 2 ( ( f N X ) ) )nf1fNf1 (f2 ((fN X)))

เมื่อไม่มีคำแนะนำเหลืออยู่ XOISC จะส่งอาร์กิวเมนต์บรรทัดคำสั่งทั้งหมด (ถ้ามี) ไปยังสแต็กเช่น:

[s1,, sMstack before, a1,, aNarguments]

การคำนวณสุดท้ายจะเป็น N((((s1 s2)) sM) a1))aN


เนื่องจากคำสั่งเดียวใน XOISC ใช้เพียงอาร์กิวเมนต์เดียวเท่านั้น (หน่วยความจำออฟเซ็ต) จึงไม่มีเหตุผลที่จะใช้ชื่อสำหรับคำสั่งนั้น ดังนั้นไฟล์ต้นฉบับที่ถูกต้องจะประกอบด้วยเลขจำนวนเต็มคั่นด้วยการขึ้นบรรทัดใหม่หรือ whitespaces เช่น:

0 0 2 0 1 0 1

ลองออนไลน์!

ตัวอย่าง

ลองมาตัวอย่างข้างต้น (กองเติบโตไปทางขวา):

0pop 0 and apply (ie. push single X):[X]0again simply push X:[X, X]2pop 2 (a,b) and push a (b X):[X (X X)]0simply push X:[X (X X), X]1pop 1 (a) and push a X:[X (X X), X X]0simply push X:[X (X X), X X, X]1pop 1 (a) and push a X:[X (X X), X X, X X]

ในที่สุดประเมินสแต็ก: หรือมีวงเล็บน้อยX ( X X ) ( X((X (X X)) (X X)) (X X)ซึ่งเราจำได้ว่าเป็นดีเก่า S K KX (X X) (X X) (X X)S K Kตัวตน ฟังก์ชัน

ทัวริงสมบูรณ์

พิสูจน์ความคิด

สำหรับ XOISC ที่จะทำให้ทัวริงสมบูรณ์เราต้องสามารถแปล interleaving วงเล็บและXใด ๆ (ถูกต้อง)X combinatorsสิ่งนี้เป็นไปได้เพราะเมื่อ popping ใช้และผลักดันมันจะทำในลักษณะที่สัมพันธ์กันอย่างถูกต้อง

X

เป็นตัวอย่างนิพจน์ที่ใช้ก่อนหน้านี้: ((X (X X)) (X X)) (X X)

  • X0
  • ต่อไปเราอยู่ในวงเล็บระดับใหม่ดังนั้นเราจึงต้องการเพียง 0
  • ตอนนี้วงเล็บสองอันปิดดังนั้นเราจำเป็นต้องมีองค์ประกอบ 2 อัน: 2
  • อีกครั้งเราอยู่ในวงเล็บระดับใหม่ดังนั้นเราจึงต้องการ 0
  • วงเล็บสองอันปิดอีกครั้ง 2
  • และเหมือนเดิมอีกครั้ง

ดังนั้นเราจึงจบลงด้วยโปรแกรม XOISC ที่แตกต่างกัน (แต่มีความหมายเทียบเท่ากัน)

0 0 2 0 2 0 2 ลองออนไลน์!

X combinators เป็นโปรแกรม XOISC ซึ่งเหลือเพียงฟังก์ชั่นเดียวใน stack

หลักฐานทางการ

เนื่องจาก SKI แคลคูลัสนั้นทัวริงสมบูรณ์เราต้องแสดงสองสิ่ง:

  1. X -combinator เป็นพื้นฐานสำหรับการ SKI-แคลคูลัส
  2. X

ส่วนแรก - การพิสูจน์ความเท่าเทียมกันทั้งสามในการแนะนำ - น่าเบื่อมากและใช้พื้นที่มาก แต่ก็ไม่น่าสนใจเท่าไหร่ ดังนั้นแทนที่จะวางไว้ในโพสต์นี้คุณสามารถหาได้ที่นี่* *

X

มีสองวิธีในการสร้างนิพจน์เช่นนี้คือXเองหรือfXXf gfg

0XF1FNG1GKfgf gเช่นกัน:

F1FN G1GK1 (GK+1)fggff gในกอง ∎

ล่าม

ปัจจัยการผลิต

เนื่องจากแคลคูลัสแลมบ์ดาที่ไม่ได้พิมพ์ต้องการให้เรากำหนดประเภทข้อมูลของเราเองสำหรับทุกสิ่งที่เราต้องการและนี่เป็นเรื่องยุ่งยากที่ล่ามจะรู้เลขคริสตจักร - ซึ่งหมายความว่าเมื่อคุณป้อนข้อมูล

นี่คือตัวอย่างโปรแกรมที่คูณสองตัวเลข: ลองออนไลน์!

คุณยังสามารถระบุฟังก์ชันเป็นอาร์กิวเมนต์โดยใช้ดัชนี De Bruijnตัวอย่างเช่นScombinator \\\(3 1 (2 1))(หรือλλλ(3 1 (2 1))) แต่ก็ยังตระหนักถึงS, K, Iและแน่นอนXCombinator

เอาท์พุต

โดยค่าเริ่มต้นล่ามจะตรวจสอบว่าเอาต์พุตเข้ารหัสเป็นจำนวนเต็มหรือไม่ถ้าหากมันจะส่งออกเป็นจำนวนที่สอดคล้องกัน (นอกเหนือจากผลลัพธ์) เพื่อความสะดวกมี-bธงที่บอกให้ผู้แปลลองจับคู่บูลีนแทน (ดูตัวอย่างสุดท้าย)

ผู้ประกอบ

แน่นอนว่าภาษาระดับต่ำจำเป็นต้องมีแอสเซมเบลอร์ที่แปลงภาษาระดับสูงเป็นภาษานั้นคุณสามารถใช้อินพุตใด ๆ (ดูด้านบน) แล้วแปลเป็นโปรแกรม XOISC โดยใช้-aแฟล็กลองออนไลน์! **


* ในกรณีที่ลิงค์ไม่ทำงานแสดงว่ามีการคัดลอกเป็นความคิดเห็น HTML ในโพสต์นี้

** ผลลัพธ์นี้เป็นโปรแกรมที่ทดสอบความเป็นอันดับหนึ่งลองออนไลน์!


1
มีเหตุผลที่คุณเลือก X combinator แทนที่จะเป็น Iota combinator หรือไม่?
แยกผลไม้

1
@EsolangingFruit: ใช่มีตัวเลือกอื่น ๆ อีกมากมายในท้ายที่สุดฉันเลือกใช้เพราะมันใช้แอปพลิเคชั่นน้อยที่สุดในการสร้าง SK ดูเหมือนว่ามันจะทำงานได้ดีที่สุด (tbh ฉันไม่ได้ทำการเปรียบเทียบตัวเอง)
ბიმო

1
Btw มีการเปรียบเทียบที่ดีของผู้ประสานงานหลายคนในเอกสารที่เชื่อมโยงหากคุณสนใจ
ბიმო

19

วาด

Drawเป็น OISC ที่ทำหน้าที่เป็นตาราง 2D ทำเครื่องหมายเป็นสี่เหลี่ยมในลักษณะที่คล้ายคลึงกับเครื่องวัง B อย่างไรก็ตามเพื่อให้ภาษาเรียบง่ายและ OISC-y ที่สุดเท่าที่จะทำได้คำแนะนำทั้งหมด (ซึ่งมีทั้งหมดหนึ่ง) ทำเครื่องหมายสี่เหลี่ยมเพียงก้าวบนและเพื่อให้สามารถหยุดการเหยียบบนตารางที่ทำเครื่องหมายไว้ ยุติโปรแกรม

โปรแกรมประกอบด้วยลำดับของบรรทัดที่มีตัวระบุบรรทัด (สตริงที่กำหนดเองไม่รวม # หรือช่องว่าง) จำนวนเต็มสองตัว (xและy) และอีกสองตัวระบุบรรทัด ( aและb)

โปรแกรมรันดังนี้:
เริ่มต้นที่บรรทัดที่ระบุเช่นเดียวstartกับตัวชี้ที่ชี้ไปที่ตำแหน่ง (0, 0) ย้ายตัวชี้ตามจำนวนที่กำหนดโดยxและyและทำเครื่องหมายตารางตัวชี้ขณะนี้อยู่ (ถ้าตารางมีการทำเครื่องหมายแล้ว ในกรณีที่การดำเนินการสิ้นสุดลง) จากนั้นข้ามไปยังบรรทัดaถ้าอย่างน้อยหนึ่งในสี่เหลี่ยมที่อยู่ติดกันโดยตรงนอกจากนี้ยังมีการทำเครื่องหมายและสายbเป็นอย่างอื่น

ล่ามได้รับการสนับสนุนให้ส่งออกผลลัพธ์สุดท้ายของตารางเป็นรูปภาพผ้าใบ ฯลฯ

ทัวริง-สมบูรณ์

Draw เป็นทัวริงสมบูรณ์เนื่องจากสามารถรวบรวมเวอร์ชั่นที่แก้ไข (เรียกว่า Alternate) ของเครื่อง Minsky เป็นภาษา

ทางเลือกทำหน้าที่คล้ายกับเครื่อง Minsky สองตัวนับ แต่มีข้อ จำกัด ขนาดใหญ่สำหรับคำสั่ง: คำสั่งจะต้องสลับกันระหว่างการกำหนดเป้าหมายตัวนับแรกและตัวที่สอง เพื่อหลีกเลี่ยงการแก้ไขนี้ได้มีการเพิ่มคำสั่งเพิ่มเติม:nopที่จะได้รับการปรับเปลี่ยนรอบนี้คำสั่งเพิ่มเติมได้รับการเพิ่ม:คำสั่งนี้จะไม่เปลี่ยนแปลงตัวนับเป้าหมายเลยซึ่งทำให้สามารถ "เสริม" การเปลี่ยนแปลงต่อเนื่องเป็นตัวนับหนึ่งได้ซึ่งเป็นไปตามข้อ จำกัด ที่ระบุไว้ด้านบน นี่ก็หมายความว่าการลงทะเบียนที่จะแก้ไขไม่จำเป็นต้องได้รับและสำหรับคำสั่งใด ๆ ที่ได้รับสามารถอนุมานได้โดยตรงจากคำแนะนำที่การดำเนินการสามารถข้ามไปได้

ตัวอย่าง: เครื่อง Minsky นี้

1 inc A 2
2 inc A 3
3 dec A 3 4
4 halt

เปลี่ยนเป็นโปรแกรมสำรองนี้:

1 inc 2
2 nop 3
3 inc 4
4 nop 5
5 dec 6 8
6 nop 5
7 halt
8 halt

ข้อ จำกัด นี้จำเป็นเนื่องจากวิธีการที่โปรแกรม Draw ในที่สุดจะจัดการกับการลงทะเบียนซึ่งก็คือการบอกว่ามันไม่ได้แยกความแตกต่างระหว่างพวกเขาเลย แต่โปรแกรมวาดเพียงแค่คัดลอกการลงทะเบียนที่ไม่ได้รับการเปลี่ยนแปลงโดยคำสั่งก่อนหน้านี้ปรับเปลี่ยนมันตามคำแนะนำที่ถูกดำเนิน

จากนั้นโปรแกรมสำรองจะถูกแปลเป็นวาดโดยตรงดังนี้:

โปรแกรมเริ่มต้นด้วยบล็อกนี้

start 0 0 a a
a 3 0 b b
b -3 1 c c
c 3 0 d d
d -3 2 e e
e 3 0 f f
f 3 -3 i1_a i1_a

inc, decและnopมีการแปลในเกือบเช่นเดียวกับคนอื่น ๆ ในทุกกรณีไม่มีความแตกต่างระหว่างการเปลี่ยนการลงทะเบียนครั้งแรกหรือครั้งที่สอง (ตามที่อธิบายข้างต้น) นี่คือการเพิ่มขึ้นเทียบเท่ากับinc 2:

i1_y 0 -2 i1_z i1_y
i1_z 3 -1 i1_a i1_a
i1_a -5 1 i1_b i1_b
i1_b 0 2 i1_c i1_c
i1_c 0 2 i1_d i1_e
i1_d 0 2 i1_d i1_f

i1_e 5 0 i2_z i2_y
i1_f 5 0 i2_z i2_y

เปลี่ยนตัวเลขในi1_xชิ้นส่วนเป็นดัชนีของคำสั่งปัจจุบันและในi2_xส่วนต่างๆเป็นดัชนีของคำสั่งถัดไปที่จะดำเนินการ

nopการเรียนการสอนสามารถแปลเป็นเช่น:

i1_y 0 -2 i1_z i1_y
i1_z 3 -1 i1_a i1_a
i1_a -5 1 i1_b i1_b
i1_b 0 2 i1_c i1_c
i1_c 0 2 i1_d i1_e
i1_d 0 2 i1_d i1_f

i1_e 5 -2 i2_z i2_y
i1_f 5 -2 i2_z i2_y

นี่คือการลดลง:

i1_y 0 -2 i1_z i1_y
i1_z 3 -1 i1_a i1_a
i1_a -5 1 i1_b i1_b
i1_b 0 2 i1_c i1_c
i1_c 0 2 i1_d i1_e
i1_d 0 2 i1_d i1_f

i1_e 5 -2 i3_z i3_y
i1_f 5 -4 i2_z i2_y

i3_x หมายถึงคำสั่งที่จะเรียกถ้าตัวนับนั้นเป็น 1 อยู่แล้ว

หยุด:

i1_y 0 0 0 0
i1_z 0 0 0 0

เปลี่ยนฉลากอย่างเหมาะสมและเชื่อมโยงทุกอย่างเข้าด้วยกัน การทำสิ่งนี้สำหรับตัวอย่างจากด้านบนให้โปรแกรม Draw ในที่เก็บจากด้านบน

ล่าม

ขณะนี้มีล่ามสองตัวทั้งสองเขียนเป็น Python พวกเขาสามารถพบได้บน Draw'sพื้นที่เก็บข้อมูล GitHub

  1. draw.py : ล่ามนี้มีไว้สำหรับบรรทัดคำสั่งและให้แหล่งโปรแกรมเป็นอาร์กิวเมนต์ หลังจากทุกขั้นตอนมันจะส่งคำสั่งที่ถูกดำเนินการและตำแหน่งของตัวชี้คำสั่ง หลังจากโปรแกรมหยุดทำงานจะพิมพ์จำนวนเซลล์ที่ทำเครื่องหมายไว้
  2. draw_golly.py : รุ่นนี้ใช้Gollyเพื่อจุดประสงค์ที่ผิดแสดงผลกราฟิกที่ง่ายกว่าเดิมดึงแหล่งที่มาผ่านกล่องป๊อปอัปเมื่อเริ่มต้นสคริปต์ Golly อาจดูพิถีพิถันเล็กน้อยกับ Python ดังนั้นตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Python 2 (และอย่าผสม Golly 32 บิตกับ Python 64 บิตหรือในทางกลับกัน) เอาต์พุตมีให้ผ่านกริดเซลล์ในตัวของ Golly

ภาพต่อไปนี้เป็นตัวอย่างสำหรับการส่งออกจากล่ามที่สอง การรันโปรแกรมตัวอย่างในที่เก็บมอบสิ่งนี้ (หรือคล้ายกัน):


1
! ที่น่าตื่นตาตื่นใจ ขอแสดงความยินดีกับการค้นหาวิธีที่ไม่เหมือนใครในการทำสิ่งที่ท้าทาย
MD XF

ภาษาของคุณไม่จำเป็นต้องหยุดเลยเพื่อทำให้สมบูรณ์ กฎ 110 ไม่ได้สิ้นสุดลง แต่ก็ยังคงสมบูรณ์อยู่
Akangka

+1 สำหรับ Golly เครื่องจำลองออโตเซลล่าที่ดีที่สุดตลอดกาล
HighlyRadioactive

14

-3

นี่คือส่วนสำคัญ

หน่วยความจำ

หน่วยความจำคือแผนที่ของเทปโดยที่คีย์คือสตริงและค่าเป็นจำนวนเต็มขนาดโดยพลการ

นอกจากนี้ยังมีชุดของป้ายกำกับซึ่งโปรแกรมสามารถข้ามไปได้

มีสแต็กซึ่งมีตัวถูกดำเนินการซึ่งเป็นสตริง

มีความไม่พอใจซึ่งควบคุมว่าอยู่ที่ไหนในเทปของหน่วยความจำที่สามารถเข้าถึงได้

The One Instruction

-. ขั้นแรกให้LABELดึงสตริงออกจากสแต็ก หากLABELไม่ได้กำหนดเป็นป้ายกำกับมันจะกำหนดป้ายกำกับและล้างแหล่งที่มาของป้ายกำกับนั้น (เช่นที่ถูกผลักจาก) และคำสั่งปัจจุบัน มิฉะนั้นจะทำการคำนวณต่อไปนี้โดยใช้ค่าสองอันดับแรกAและB:

if mem[A] < mem[B]:
    jump to LABEL
if mem[A] != mem[B]:
    mem[A]--
else:
    mem[B]++

โปรดทราบว่าหากมีข้อโต้แย้งมากเกินไปหรือมีข้อโต้แย้งไม่เพียงพอโปรแกรมจะผิดพลาดโดยแสดงสถานะของโปรแกรม

ชดเชยสามารถแก้ไขได้โดยการเข้าถึงค่าของ .ชดเชยสามารถแก้ไขได้โดยการเข้าถึงค่าของ

รหัสตัวอย่าง

X-

i i X-
i i X-
i i X-
i i X-
i i X-
i i X-
i i X-

สิ่งนี้ตั้งค่าตัวแปรiเป็น7โดยการเพิ่ม7เวลา

X-

i i X-
i i X-
i i X-
LOOP-
    a a X-
    a a X-
    j i LOOP-

คูณนี้โดยคงi+12

หลักฐานการทัวริงที่สมบูรณ์

ไม่คำนึงถึง c ++ 's int ขนาด (นั่นคือสมมติว่าพวกเขาไม่มีที่สิ้นสุด), -3 เป็นทัวริงให้เสร็จสมบูรณ์โดยลดbrainfuck 3 เซลล์ ฉันไม่สนใจขนาดนี้เพราะสามารถเขียนล่ามสำหรับ -3 บนคอมพิวเตอร์ที่มีหน่วยความจำไม่สิ้นสุดที่มีเซลล์ขนาดใหญ่โดยพลการ

ฉันยังเชื่อว่าBCTใด ๆ ที่สามารถเขียนเป็นโปรแกรม -3


ในขณะที่ฉันชอบปรับปรุงเนื้อหาของฉันโปรดอธิบายเกี่ยวกับการลงคะแนนเสียงจะได้รับการชื่นชม
Conor O'Brien
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.