টিএএস গল্ফ
একটি কোড-গল্ফ টুইস্ট সহ কোনও সরঞ্জাম-সহিত স্পিডরনের স্টাইলে, এই চ্যালেঞ্জের লক্ষ্যটি আপনার নির্বাচিত প্রোগ্রামিং ভাষায় যতটা সম্ভব কম বাইটে 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
এখানে, আমরা উপরের চিত্রের 1-1-এর শেষে পতাকাটিতে পৌঁছানোর হিসাবে 'সাফল্য' সংজ্ঞায়িত করেছি। উদাহরণস্বরূপ পাইথন জমা দেওয়ার স্কোর যদি এটি সফল হয় (যা এটি না ঘটে), 44 বাইট বা পাইথন প্রোগ্রামের মূল দৈর্ঘ্য হবে।
বর্তমানের দ্রুততম টিএএসের ভিত্তিতে আমি তৈরি করা ইনপুট ফাইলের উদাহরণের জন্য , এই গিথুব গিস্টটি দেখুন: https://gist.github.com/anonymous/6f1a73cbff3cd46c9e1cf8d5c2ff58e1 নোট করুন যে এই ফাইলটি পুরো গেমটি সম্পূর্ণ করেছে tes
সাবফ্রেম ইনপুট প্রবেশের কোনও উপায় নেই । প্লেয়ার 2 এর নিয়ামকের ইনপুট প্রবেশের কোনও উপায় নেই তবে স্তর বা গেমটি শেষ করার জন্য এটি প্রয়োজনীয় (বা দরকারী )ও হওয়া উচিত নয়।
ব্যবহৃত এসএমবি এর সংস্করণটি মূল মার্কিন যুক্তরাষ্ট্র / জাপান আইএনইএস রম হবে (এমডি 5sum 811b027eaf99c2def7b933c5208636de - ইউএসএ সংস্করণটি জাপানি সংস্করণের সাথে হুবহু হ'ল হয় কাজ করবে, রমটি সাধারণত লেবেলযুক্ত Super Mario Bros (JU) (PRG 0)
বা অনুরূপ)।
stdout
সাবমিশনগুলি পরীক্ষা করার জন্য, আমি প্রোগ্রামগুলি চালাব, তাদের একটি ইনপুট.টিএসটি ফাইলের মধ্যে পাইপ করব , এবং mario.lua
এই চ্যালেঞ্জের জন্য আমি যে লুয়া স্ক্রিপ্টটি লিখেছিলাম তা ব্যবহার করে এফসিইউএক্স এ লোড করব :
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 )
দ্রষ্টব্য: প্রথম নজরে, এটি আমার প্রদত্ত ইনপুট.টিএসটি ফাইলের উপর কোলমোগোরভ জটিলতার চ্যালেঞ্জ বলে মনে হতে পারে। তবে, বাস্তবে চ্যালেঞ্জটি এর চেয়ে জটিলতর কারণ (ক) আমি সরবরাহ করা ইনপুট.টিএসটি অবশ্যই খুব কমতম সম্ভব নয় এবং (খ) এই ফর্ম্যাটে এসএমবি-র জন্য সবচেয়ে কম কিপ্রেসের সংক্ষিপ্ততম সেট তৈরি করার চেষ্টা করা হয়নি never । টিএএস-এর পরিচিত 'কয়েকটি সম্ভাব্য বোতামগুলি আলাদা' কারণ এটি দীর্ঘ সময়ের জন্য বোতামগুলি ধরে রাখার অনুমতি দেয় যা এই চ্যালেঞ্জের মধ্যে কাঙ্ক্ষিত আউটপুটটির দৈর্ঘ্য যোগ করবে।