}0
--@2
@2/\=0MB
}0@1\/
&0/\>0!!
--
@1
00@0
--/\=0
\\@0&0
Marbelous เป็นภาษา 8 บิตที่มีค่าแสดงโดยหินอ่อนในเครื่องที่เหมือน Rube Goldberg ดังนั้นนี่จึงไม่ใช่เรื่องง่าย วิธีนี้เทียบเท่ากับหลอกรหัสต่อไปนี้:
function recursiveFunction(int i)
{
for(int j = i*512; j > 0; j--)
{
recursiveFunction(i - 1);
}
}
เนื่องจากค่าสูงสุดคือ 256 (แสดงด้วย 0 ในโปรแกรม Marbleous ซึ่งถูกจัดการแตกต่างกันในสถานที่ต่างกัน) recursiveFunction (1) จะได้รับการเรียกว่าจำนวนทั้งหมด256!*512^256
เท่ากับเท่ากับ10^1200
ง่ายพอที่จะอยู่รอดในจักรวาล
Marbelous ไม่มีล่ามที่รวดเร็วมากดูเหมือนว่ามันจะทำงานเกี่ยวกับการ10^11
เรียกใช้ฟังก์ชั่นนี้ต่อปีซึ่งหมายความว่าเรากำลังมองหารันไทม์ของ10^1189
ปี
คำอธิบายเพิ่มเติมของคณะ Marbelous
00@0
--/\=0
\\@0&0
00
เป็นตัวอักษรภาษา (หรือหินอ่อน) แสดงเป็นเลขฐานสิบหก (ดังนั้น 0) หินอ่อนนี้ตกลงไปบน--
ซึ่งจะลดหินอ่อนใด ๆ ลง 1 (00 ล้อมรอบและเปลี่ยนเป็น FF หรือ 255 เป็นทศนิยม) หินอ่อนที่มีในขณะนี้ FF ค่าลงบนซึ่งผลักมันเป็นหนึ่งในคอลัมน์ทางด้านขวาบนล่าง\\
@0
นี่คือพอร์ทัลและเคลื่อนย้ายหินอ่อนไปยัง@0
อุปกรณ์อื่น ที่นั่นหินอ่อนวางอยู่บน/\
อุปกรณ์ซึ่งเป็นนักทำสำเนาวางสำเนาหินอ่อนไว้--
ทางด้านซ้ายหนึ่งชุด (หินอ่อนนี้จะวนซ้ำระหว่างพอร์ทัลและทำให้ลดลงทุกวง) และอีกอันอยู่=0
ทางขวา=0
เปรียบเทียบหินอ่อนกับค่าศูนย์และให้รางหินอ่อนตกลงถ้ามันเท่ากันและผลักมันไปทางขวาถ้าไม่ หากหินอ่อนมีค่า 0 มันตกลง&0
มาเป็นซินโคไนเซอร์ซึ่งฉันจะอธิบายเพิ่มเติมในภายหลัง
ทั้งหมดนี้เพียงเริ่มต้นด้วยหินอ่อนมูลค่า 0 ในวงและลดลงจนกว่าจะถึง 0 อีกครั้งจากนั้นก็ใส่หินอ่อนมูลค่า 0 นี้ใน synchronizer และทำให้วนรอบในเวลาเดียวกัน
}0@1
&0/\>0!!
--
@1
}0
เป็นอุปกรณ์อินพุตโดยเริ่มแรกอินพุตบรรทัดคำสั่ง nth (ฐาน 0) เมื่อเรียกใช้โปรแกรมที่ได้รับในทุก}n
อุปกรณ์ ดังนั้นถ้าคุณเรียกโปรแกรมนี้มีการป้อนข้อมูลบรรทัดคำสั่งที่ 2, หินอ่อน 02 }0
ค่านี้จะเข้ามาแทนที่ แผ่นหินอ่อนนี้จะตกลงไปใน&0
อุปกรณ์, ตัวซิงโครไนซ์ตัวอื่น, ตัว&n
ซิงโครไนซ์จะจับตัวเป็นหินอ่อนจนกว่า&n
จะมีการยื่นคำร้องที่เกี่ยวข้อง จากนั้นหินอ่อนจะลดน้อยลงเทเลพอร์ทและทำซ้ำเหมือนในลูปที่อธิบายก่อนหน้านี้ สำเนาที่ถูกต้องจะได้รับการตรวจสอบความไม่เท่าเทียมกับศูนย์ ( >0
) ถ้าไม่ใช่ 0 มันจะผ่าน ถ้าเป็น 0 มันจะถูกผลักไปทางขวาและเข้าสู่ตำแหน่ง!!
ซึ่งจะยกเลิกบอร์ด
โอเคจนถึงตอนนี้เรามีการวนซ้ำที่นับถอยหลังจาก 255 เป็น 0 อย่างต่อเนื่องและให้วนซ้ำคล้ายกัน (ถูกป้อนโดยอินพุตบรรทัดคำสั่ง) วิ่งหนึ่งครั้งทุกครั้งที่มันเข้าชม 0 เมื่อวนซ้ำที่สองนี้วิ่ง n ครั้ง (สูงสุด 256 ) โปรแกรมหยุดทำงาน นั่นคือจำนวนลูปสูงสุด 65536 ครั้ง ไม่เพียงพอที่จะอยู่ได้นานกว่าเอกภพ
}0
--@2
@2/\=0MB
สิ่งนี้ควรเริ่มดูคุ้นเคยอินพุตจะลดลงหนึ่งครั้งจากนั้นค่านี้จะวนไปมาและคัดลอก (โปรดทราบว่าหินอ่อนจะลดลงเพียงครั้งเดียวไม่ใช่ในทุกการวิ่งของลูป) จากนั้นจะได้รับการตรวจสอบเพื่อความเท่าเทียมกัน 0 MB
และถ้ามันไม่เป็นศูนย์ในดินแดน นี้เป็นฟังก์ชั่นใน Marbelous :[name]
แฟ้มทุกคนสามารถมีหลายบอร์ดและคณะกรรมการแต่ละคนเป็นฟังก์ชั่นการทำงานของทุกคนจะต้องมีการตั้งชื่อโดยก่อนหน้านี้ตารางโดย ทุกฟังก์ชั่นยกเว้นฟังก์ชั่นแรกในไฟล์ซึ่งมีชื่อมาตรฐาน: MB ดังนั้นลูปนี้จะเรียกกระดานหลักอย่างต่อเนื่องอีกครั้งด้วยค่าn - 1
ที่ n คือค่า teh ซึ่งอินสแตนซ์ของฟังก์ชั่นนี้ถูกเรียก
แล้วทำไมn*512
ล่ะ
งั้นวงแรกวิ่งเป็น 4 เห็บ (และ 256 ครั้ง) และวงที่สองวิ่ง n ครั้งก่อนที่บอร์ดจะหยุด ซึ่งหมายความว่าบอร์ดจะทำงานเกี่ยวกับn*4*256
เห็บ การวนซ้ำล่าสุด (ซึ่งการเรียกฟังก์ชันแบบเรียกซ้ำ) คือการรวบรวมและเรียกใช้ใน 2 เห็บซึ่งหมายความว่ามันจัดการเพื่อเรียกn*4*256/2 = n*512
เวลาฟังก์ชั่น
สัญลักษณ์อะไรที่คุณไม่ได้พูดถึง?
\/
เป็นถังขยะซึ่งนำหินอ่อนออกจากกระดานทำให้แน่ใจว่าหินอ่อนที่ถูกแยกออกจะไม่ยุ่งกับหินอ่อนอื่น ๆ ที่วนรอบและป้องกันไม่ให้โปรแกรมหยุดทำงาน
โบนัส
เนื่องจากหินอ่อนที่ตกลงมาจากด้านล่างของบอร์ดที่น่ากลัวจะได้รับการส่งออกไปยัง STDOUT โปรแกรมนี้จะพิมพ์อักขระ ASCII จำนวนมากในขณะที่ทำงาน