ในความท้าทายนี้คุณจะเขียนล่ามสำหรับ2 Ω (ถ่ายเมื่อTwoMega ) ภาษาเคร่งครัดตามbrainfuckที่มีพื้นที่จัดเก็บอนันต์มิติ
ภาษา
2 Ωมีสถานะสามส่วน:
เทปซึ่งเป็นรายการที่ไม่มีที่สิ้นสุดของบิตทั้งหมดเริ่มต้นได้ที่ 0 มันมีองค์ประกอบทางด้านซ้ายสุด แต่ไม่มีองค์ประกอบด้านขวาสุด
หน่วยความจำตัวชี้ซึ่งเป็นติดลบที่เป็นดัชนีขององค์ประกอบในเทป ตัวชี้หน่วยความจำที่สูงกว่าหมายถึงเซลล์เทปทางด้านขวา ตัวชี้หน่วยความจำ 0 หมายถึงองค์ประกอบด้านซ้ายสุด ตัวชี้หน่วยความจำถูกเตรียมใช้งานเป็น 0
Hypercubeซึ่งเป็นแนวคิด∞มิติ "กล่อง" ของเซลล์แต่ละที่มีบิตเริ่มต้น 0 ความกว้างของ Hypercube ถูกผูกไว้ในทุกมิติให้เพียง 2 เซลล์ แต่อินฟินิตี้ของมิติหมายถึงจำนวนของ เซลล์คือนับไม่ได้
ดัชนีเข้า hypercube เป็นรายการที่ไม่มีที่สิ้นสุดของบิตที่หมายถึงเซลล์ใน hypercube ที่ (ในทางเดียวกันว่าเป็นรายการที่ จำกัด ของบิตสามารถนำมาใช้ในการอ้างถึง hypercube ของมิติ จำกัด ก) เนื่องจากเทปเป็นรายการที่ไม่มีที่สิ้นสุดของบิตเทปทั้งหมดจึงอ้างอิงองค์ประกอบของ Hypercube เสมอ องค์ประกอบนี้จะเรียกว่าอ้างอิง
2 Ωให้ความหมายถึง 7 ตัวอักษรที่แตกต่างกัน:
<
ลดค่าตัวชี้หน่วยความจำลงด้วย 1 การลดระดับลงต่ำกว่า 0 เป็นพฤติกรรมที่ไม่ได้กำหนดดังนั้นคุณไม่จำเป็นต้องจัดการมัน>
เพิ่มตัวชี้หน่วยความจำทีละ 1!
พลิกบิตที่ผู้อ้างอิง.
ส่งออกบิตที่อ้างอิง^
แทนที่บิตที่เซลล์ที่ชี้โดยตัวชี้หน่วยความจำบนเทปด้วยค่าผกผันของบิตที่ตัวอ้างอิง[x]
รันโค้ดx
ตราบเท่าที่บิตที่ผู้อ้างอิงคือ 1
ความท้าทาย
งานของคุณคือการเขียนโปรแกรมที่ใช้เวลาสตริงเป็น input และดำเนินการป้อนข้อมูลที่เป็น 2 Ωโปรแกรม
นี่คือ รหัสกอล์ฟดังนั้นคำตอบที่ถูกต้องสั้นที่สุด (วัดเป็นไบต์) ชนะ
หมายเหตุ
- คุณสามารถสันนิษฐานได้ว่าโปรแกรมจะมีเพียงตัวอักษร
<>!.^[]
และ[]
จะซ้อนกันอย่างเหมาะสม - ล่ามของคุณควรถูก จำกัด ด้วยหน่วยความจำที่มีอยู่ในระบบ มันควรจะสามารถรันโปรแกรมตัวอย่างในเวลาที่เหมาะสม
โปรแกรมตัวอย่าง
พิมพ์ 1:
!.
พิมพ์ 010:
.!.!.
พิมพ์ 0 ตลอดไป:
![!.!]
พิมพ์ 0 ตลอดไปหรือ 1 ตลอดกาลหากได้!
รับการเติม:
[.]![!.!]
cat
โปรแกรม: ดูเหมือนจะไม่มีคำแนะนำสำหรับการป้อนข้อมูล
.
- พิมพ์ศูนย์เดียวแล้วมีอยู่; !^!.
- พิมพ์หนึ่งเดียวจากนั้นออก จะดีกว่านี้อีก ในขณะนี้เราต้องเข้าใจสิ่งที่ส่งมาเพื่อตรวจสอบความถูกต้องของพวกเขา (และเพิ่มการโหวตขึ้น!)
[0,0,0,0,0,0,0...]
(เช่นการมีอยู่ของ a !
เมื่อเริ่มต้นโปรแกรม)
[.]![!.!]
พิมพ์ค่าของเซลล์นั้นได้ตลอดไป
1
s บนเทปนั้น จำกัด เสมอ ในความเป็นจริงมี bijection ค่อนข้างง่ายระหว่างตัวเลขธรรมชาติและรัฐเทป (ตีความเนื้อหาเทปเป็นเลขฐานสองย้อนหลัง) ซึ่งแสดงให้เห็นว่า Hypercube นั้นเป็นอาร์เรย์อนันต์ 1D เข้าถึงโดยพลิกบิตในค่าตัวชี้จำนวนเต็ม แทนที่จะเป็นใน / ลดลงเช่นเดียวกับใน brainfuck