टीएएस गोल्फ
कोड-गोल्फ ट्विस्ट के साथ टूल-असिस्टेड स्पीडरुन की शैली में , इस चुनौती का लक्ष्य NES के लिए मूल सुपर मारियो ब्रोस गेम के 1-1 भाग को अपने चुने हुए प्रोग्रामिंग लैंग्वेज में यथासंभव बाइट्स में पूरा करना है, नीचे दिए गए प्रारूप में केवल इन-गेम कंट्रोलर इनपुट का उपयोग करना। आपका कार्यक्रम इस प्रारूप में लाइनों की एक सूची के लिए आउटपुट होना चाहिए , विशेष रूप से इस चुनौती के लिए बनाया गया है:stdout
up down left right start select A B
पहले फ्रेम से शुरू होकर, प्रत्येक नईलाइन एक विशेष फ्रेम के लिए नियंत्रक 1 के इनपुट का प्रतिनिधित्व करती है। प्रति फ्रेम बटन का क्रम मायने नहीं रखता है, और उन्हें गैर-न्यूलाइन व्हाट्सएप की किसी भी राशि से अलग किया जा सकता है। सभी या कोई भी या कुछ बटन नाम प्रति पंक्ति में शामिल किए जा सकते हैं। उदाहरण के लिए, एक साधारण पायथन प्रोग्राम जो कि 3 फ्रेम के लिए डी-पैड को दबाता है और फिर प्रेस करता है ए इस तरह दिख सकता है:
for _ in range(3): print('right')
print('A')
और इसका आउटपुट (जिसे मैं सत्यापित करने के लिए अपने एमुलेटर में खिलाऊंगा) होगा:
right
right
right
A
यहाँ, हम 'सफलता' को परिभाषित करते हैं, जैसा कि ऊपर चित्र के अनुसार विश्व के अंत में ध्वज तक पहुँच रहा है। इस उदाहरण के लिए स्कोर पायथन सबमिशन, यदि यह सफल हुआ (जो यह नहीं है), 44 बाइट्स या पायथन प्रोग्राम की मूल लंबाई होगी।
एक उदाहरण काम कर रहे इनपुट फ़ाइल के लिए जो मैंने सबसे तेज TAS के आधार पर बनाई है , इस Github Gist को देखें: https://gist.github.com/anonymous/6f1a73cbff3cd46c9e1cf8d5c5cff58e1 नोट करें कि यह फ़ाइल पूरा खेल पूरा करती है।
सबफ़्रेम इनपुट दर्ज करने का कोई तरीका नहीं है । प्लेयर 2 के नियंत्रक में इनपुट दर्ज करने का भी कोई तरीका नहीं है, लेकिन यह भी स्तर या खेल को पूरा करने के लिए आवश्यक (या उपयोगी) नहीं होना चाहिए।
उपयोग किया गया SMB का संस्करण मूल यूएसए / जापान iNES ROM (md5sum 811b027eaf99c2def7b933c5208636de) होगा - संयुक्त राज्य अमेरिका संस्करण ठीक वैसा ही है जैसा जापानी संस्करण या तो काम करेगा, रोम आमतौर पर लेबल Super Mario Bros (JU) (PRG 0)
या समान है)।
सबमिशन का परीक्षण करने के लिए, मैं प्रोग्राम stdout
चलाऊंगा, उन्हें एक input.txt फ़ाइल में पाइप करूँगा, और mario.lua
इस चुनौती के लिए मेरे द्वारा लिखी गई Lua स्क्रिप्ट का उपयोग करके FCEUX में लोड करेगा :
for line in io.lines('input.txt') do
local t = {}
for w in line:gmatch("%S+") do
t[w] = true;
end;
joypad.set(1, t);
emu.frameadvance();
end;
while (true) do
emu.frameadvance();
end;
मैं जिस विशिष्ट कमांड का उपयोग करूंगा वह है fceux mario.nes --loadlua mario.lua
। कार्यक्रमों की कोई समय सीमा नहीं है, हालांकि उन्हें अंततः समाप्त करना होगा।
यह एक छोटा सा बैश वन-लाइनर है जिसे मैंने अपनी स्क्रिप्ट के लिए एक FCEUX मूवी (.fm2) फ़ाइल को इनपुट में बदलने के लिए बनाया है। यदि यह मदद करता है:
cat movie.fm2 | cut -d'|' -f 3 | sed 's/\.//g' | sed 's/R/right /g' | sed 's/L/left /g' | sed 's/D/down /g' | sed 's/U/up /g' | sed 's/T/start /g' | sed 's/S/select /g' | sed 's/B/B /g' | sed 's/A/A /g' | tail -n +13 > input.txt
संदर्भ के लिए, यहाँ विश्व 1-1 का पूर्ण-रिज़ॉल्यूशन मानचित्र है (पूर्ण रिज़ॉल्यूशन के लिए एक नए टैब में छवि खोलें): (स्रोत: mariouniverse.com )
नोट: पहली नज़र में, यह मेरे दिए गए input.txt फ़ाइल पर कोलमोगोरोव जटिलता चुनौती की तरह लग सकता है। हालाँकि, वास्तव में यह चुनौती इससे कहीं अधिक जटिल है क्योंकि (a) मेरे द्वारा प्रदान किया गया input.txt निश्चित रूप से सबसे कम संभव नहीं है और (b) इस प्रारूप में SMB के लिए सबसे कम संभव सेट बनाने का प्रयास कभी नहीं किया गया है। । 'सबसे कम संभव बटन' ज्ञात TAS अलग है, क्योंकि यह लंबे समय तक बटन रखने की अनुमति देता है, जो इस चुनौती में वांछित आउटपुट में लंबाई जोड़ देगा।