มันเป็นอุบัติเหตุที่ตลกที่โลกนี้มีเพียงมิติเดียว แต่มันไม่จำเป็นต้องเป็นแบบนั้น เป็นเรื่องง่ายที่จะจินตนาการถึงโลกที่มีเวลา 2 มิติหรือมากกว่านั้นและในโลกเหล่านั้นคุณสามารถสร้างคอมพิวเตอร์และใช้งานซอฟต์แวร์กับพวกมันได้เช่นเดียวกับในโลกนี้
ระบบ
นี่คือระบบสำหรับการรันโปรแกรม Brainf * ck ในสองมิติของเวลา:
มิติเวลาสองค่าคือ x และ y โปรแกรม Brainf * ck แต่ละรายการประกอบด้วย x half-program และ ay half-program เช่นโปรแกรมอาจเป็นได้
x: +>+
y: [-]
สองโปรแกรมครึ่งแต่ละโปรแกรมมีตัวชี้โปรแกรมของตัวเอง แต่พวกเขาแชร์ตัวชี้เทปเดี่ยว (นั่นคือพวกเขาทั้งคู่ทำงานในเซลล์เดียวกันของเทป)
เวลาเป็น 2 มิติดังนั้นจึงประกอบด้วยตารางช่วงเวลา:
เมื่อเลื่อนไปตามมิติ x โปรแกรมครึ่ง x จะดำเนินการในขั้นตอนเดียว เมื่อเลื่อนไปตามมิติ y โปรแกรมครึ่ง y จะดำเนินการในขั้นตอนเดียว
ดังนั้นสำหรับตัวอย่างเช่นสมมติว่าเทปเริ่มออกเป็น[0] 0 0
( []
หมายถึงตัวชี้เทป) และ x / y ที่โปรแกรมมีและ+
->-
การทำงานของโปรแกรมนี้จะเป็นดังนี้:
x y tape x-action y-action
0 0 [ 0] 0 0 + at 0 - at 0
1 0 [ 1] 0 0 (done) - at 0
0 1 [-1] 0 0 + at 0 move >
1 1 [ 0] 0 0 (done) move >
ขอให้สังเกตว่าเมื่อเวลาเคลื่อนไปในทิศทาง y โปรแกรม x ครึ่งยังคงทำสิ่งเดียวกันซ้ำไปซ้ำมาเพราะเวลาไม่คืบหน้า
เทปในแต่ละช่วงเวลารวมถึงผลกระทบสะสมของการกระทำทั้งหมดที่ฟีดเข้าไป (แต่ละการกระทำนับครั้งเดียว) ตัวอย่างเช่นเทปที่เวลา (2, 1) มีผลสะสมของ:
- การกระทำ x จาก (0, 0)
- การกระทำ x จาก (1, 0)
- การกระทำ x จาก (0, 1)
- การกระทำ x จาก (1, 1)
- y-action จาก (0, 0)
- y-action จาก (1, 0)
- y-action จาก (2, 0)
วิธีการสะสม:
- การเพิ่มและการลดลงทั้งหมดของผลรวมเซลล์ด้วยกัน
- การเคลื่อนไหวทางซ้ายทั้งหมด (-1) และขวา (+1) ไปยังผลรวมของตัวชี้เทปเข้าด้วยกัน
พอยน์เตอร์การเรียนการสอนไม่สะสม แต่ละโปรแกรมครึ่งได้รับตัวชี้คำแนะนำจากช่วงเวลาก่อนหน้าในมิติของมัน นั่นคือพอยน์เตอร์ของโปรแกรม x คืบหน้าเฉพาะในมิติ x และพอยน์เตอร์ของโปรแกรม y คืบหน้าเฉพาะในมิติ y ตัวอย่างเช่นในโปรแกรม ( []
, +
) เริ่มต้นจาก[0] 0 0
การดำเนินการจะเป็น
x y tape x-action y-action x-prog-ptr y-prog-ptr
0 0 0 0 0 + at 0 0 0
1 0 0 0 0 + at 0 2 (from jump) 0
0 1 1 0 0 0 1
1 1 2 0 0 1 (from NO jump) 1
บางช่วงเวลาเพิ่มเติมจากการจำลองข้างต้น ( +
, ->-
) คือ:
x y tape x-action y-action x-prog-ptr y-prog-ptr
0 0 [ 0] 0 0 + at 0 - at 0 0 0
1 0 [ 1] 0 0 - at 0 1 0
2 0 [ 1] 0 0 - at 0 1 0
0 1 [-1] 0 0 + at 0 > 0 1
1 1 [ 0] 0 0 > 1 1
2 1 [-1] 0 0 > 1 1
0 2 -1 [ 0] 0 + at 1 - at 1 0 2
1 2 0 1 [ 0] - at 2 1 2
2 2 [-1] 1 0 - at 0 1 2
ตัวดำเนินการ Brainf * ck ที่อนุญาตมีดังต่อไปนี้ (มีความหมายมาตรฐาน):
+
,-
: เพิ่มขึ้น, ลดลง;[
,]
: วนซ้ำจนกระทั่งเป็นศูนย์ (การประมวลผล a[
หรือ]
ใช้เวลาหนึ่งขั้นตอนดังเช่นใน Brainf * ck มาตรฐาน);<
,>
: เลื่อนไปทางซ้าย / ขวาบนเทป
ตัวอย่างที่ซับซ้อน
สำหรับโปรแกรม ( >
, +
) เริ่มต้นด้วย[0] 0 0
:
x y tape x-action y-action x-prog-ptr y-prog-ptr
0 0 [ 0] 0 0 > + at 0 0 0
1 0 0 [ 0] 0 + at 1 1 0
0 1 [ 1] 0 0 > 0 1
1 1 1 1 [ 0] 1 1
สำหรับ ( +
, -
) เริ่มต้นด้วย[0] 0 0
:
x y tape x-action y-action x-prog-ptr y-prog-ptr
0 0 [ 0] 0 0 + at 0 - at 0 0 0
1 0 [ 1] 0 0 - at 0 1 0
0 1 [-1] 0 0 + at 0 0 1
1 1 [ 0] 0 0 1 1
โปรดทราบว่าเทปจะสิ้นสุดลง[0] 0 0
เนื่องจากแต่ละครั้ง+
และ-
เกิดขึ้นสองครั้งรวมเป็น 0
สำหรับโปรแกรม ( >+
, [-]
) เริ่มต้นด้วย[0] 0 0
:
x y tape x-action y-action x-prog-ptr y-prog-ptr
0 0 [ 0] 0 0 > 0 0
1 0 0 [ 0] 0 + at 1 1 0
2 0 0 [ 1] 0 2 0
0 1 [ 0] 0 0 > 0 3
1 1 0 0 [ 0] + at 2 1 3
2 1 0 1 [ 1] - at 2 2 1
0 2 [ 0] 0 0 > 0 3
1 2 [ 0] 0 0 + at 0 1 3
2 2 [ 1] 1 0 2 2
ไดอะแกรมที่มีลูกศร
แผนภาพด้านล่างแสดงวิธีการคำนวณการกระทำและเทป:
ปริศนา
เขียนโปรแกรม 2D Brainf * ck (ด้วย x half-program และ ay half-program) เพื่อเรียกใช้บนเทป 3 เซลล์ซึ่งเป็นไปตามเงื่อนไขต่อไปนี้:
- หากเทปเริ่มต้นตาม
[0] 0 0
เวลา (5, 5) จะมี a0
อยู่ในเซลล์ zeroth - หากเทปเริ่มต้นตาม
[1] 0 0
เวลา (5, 5) จะมี a0
อยู่ในเซลล์ zeroth
โปรแกรมที่สั้นที่สุดตรงตามข้อกำหนดที่ชนะ
+
, >
) เพื่อดูว่าฉันได้ผลลัพธ์เดียวกันกับคุณหรือไม่
(1,1)
ผ่าน(1,0)
หรืออย่างใดอย่างหนึ่ง(0,1)
แต่มันเป็นหนึ่งในโปรแกรมเริ่มต้นด้วย>
และหนึ่งเริ่มต้นด้วย+
แล้วแน่นอนลำดับญาติของพวกเขามีความสำคัญ?
+
และ>
? ถ้ามัน1 1 [0]
( มันค่อนข้างบ้า แต่มันเป็นสเป็คที่แนะนำ), พอยน์เตอร์การเรียนการสอนรวมกันได้อย่างไร? หากเธรดทั้งสองเป็น+
และ[]
จากนั้น1 2
เทปข้อมูลจะเป็น[3]
แต่ตัวชี้คำสั่งที่สองภายในลูป ([]+
พา ธ ) หรือภายนอก ([+]
พา ธ ) หรือแม้แต่ผิดกฎหมาย (+[]
)?