একটি রোবট সিমুলেটর লিখুন।
একটি রোবট কারখানার টেস্ট ফ্যাসিলিটির রোবটের নড়াচড়া যাচাই করার জন্য একটি প্রোগ্রাম দরকার।
রোবটদের তিনটি সম্ভাব্য নড়াচড়া আছে:
রোবটদের একটি কাল্পনিক অসীম গ্রিডে রাখা হয়, যেখানে তারা {x,y} কোঅর্ডিনেটে, যেমন {3,8}, একটি নির্দিষ্ট দিকে (উত্তর, পূর্ব, দক্ষিণ বা পশ্চিম) মুখ করে থাকে; উত্তর ও পূর্ব দিকে গেলে কোঅর্ডিনেট বাড়ে।
এরপর রোবট বেশ কিছু নির্দেশনা পায়, আর তখনই টেস্টিং ফ্যাসিলিটি যাচাই করে রোবটের নতুন অবস্থান এবং এটি কোন দিকে মুখ করে আছে।
টেস্টগুলো ৩টি ধাপে ভাগ করা হয়েছে।
সব টেস্ট go test দিয়ে রান করুন, অথবা -tags অপশন দিয়ে নির্দিষ্ট টেস্ট রান করুন।
উদাহরণ:
go test # run all tests
go test -tags step1 # run just step 1 tests.
go test -tags 'step1 step2' # run step1 and step2 tests
আপনাকে defs.go সোর্স ফাইলটি দেওয়া হয়েছে, যেখানে টেস্ট প্রোগ্রামের প্রয়োজন হয় এমন অনেক কিছু ডিফাইন করা আছে। এটি ধাপ অনুযায়ী তিনটি অংশে সাজানো।
ধাপ ১ সম্পূর্ণ করতে হলে আপনি Right, Left, Advance, N, S, E, W এবং Dir ডিফাইন করবেন। ধাপ ২-এ যাওয়ার আগে ধাপ ১ শেষ করুন।
ধাপ ১-এ আপনি রোবটের নড়াচড়া ইমপ্লিমেন্ট করেছিলেন, কিন্তু সেটা তেমন সিমুলেশন নয়। যেমন, সোর্স কোডে "রোবট" কোথায়? "গ্রিড" কোথায়? রোবটের অ্যাকশনকে গ্রিডের অবস্থানে বদলে দেওয়ার হিসাবগুলো কোথায়, রোবটের ভেতরে, নাকি গ্রিডের ভেতরে? বাস্তব জগৎটা আলাদা।
ধাপ ২-এ একটি "রুম" যুক্ত হয়। এটা ছোট একটি সংযোজন মনে হলেও, "রুম", "রোবট" আর "টেস্ট প্রোগ্রাম"-এর ভূমিকা স্পষ্ট করতে এবং সিমুলেশনের ভৌত দিকগুলো পরিষ্কার করতে আমরা বড় পরিবর্তন করব। আপনি Room আর Robot-কে ফাংশন হিসেবে ডিফাইন করবেন, যাদের টেস্ট প্রোগ্রাম গোরুটিন হিসেবে চালু করে "অস্তিত্বে নিয়ে আসে"। টেস্ট প্রোগ্রাম, রোবট আর রুমের মধ্যে তথ্য চলাচল করে Go চ্যানেলের মাধ্যমে।
Room-কে ভাবুন একটি "ফিজিক্স ইঞ্জিন" হিসেবে, যা দেয়াল আর একটি রোবটসহ একটি বাস্তব রুমের মডেল তৈরি করে এবং সিমুলেট করে। এটিকে কোনোভাবে রুমের কোঅর্ডিনেট স্পেস, রোবট ও দেয়ালের অবস্থান মডেল করতে হবে, আর নিশ্চিত করতে হবে যে রোবট দেয়াল ভেদ করে হেঁটে যায় না। আমরা চাই Robot হোক এমন একটি এজেন্ট যা অ্যাকশন সম্পাদন করে, কিন্তু চাই Room একটি সুসংগত সত্য ধরে রাখুক।
টেস্ট প্রোগ্রামটি চ্যানেলগুলো তৈরি করে এবং Room ও Robot দুটোই চালু করে। এরপর টেস্ট প্রোগ্রাম Robot-এর কাছে কমান্ড পাঠায়। কমান্ড পাঠানো শেষ হলে সে কমান্ড চ্যানেলটি বন্ধ করে দেয়। Robot-কে কমান্ড গ্রহণ করতে হবে এবং যে অ্যাকশনগুলো সে করতে যাচ্ছে তা Room-কে জানাতে হবে। কমান্ড চ্যানেল বন্ধ হয়ে যাওয়া টের পেলে তাকে নিজেকে বন্ধ করে দিতে হবে। রুমকে রোবটের অ্যাকশনের ভৌত পরিণতি ব্যাখ্যা করতে হবে। রোবট বন্ধ হয়ে যাচ্ছে টের পেলে সে টেস্ট প্রোগ্রামের কাছে একটি চূড়ান্ত রিপোর্ট পাঠায়, যেখানে রোবটের চূড়ান্ত অবস্থান ও দিক থাকে।
ধাপ ৩-এ তিনটি বড় পরিবর্তন আছে:
Room3 থেকে পাঠানো চূড়ান্ত অবস্থান রিপোর্টের জন্য, robots চ্যানেল থেকে পাওয়া একই স্লাইসই রিটার্ন করতে পারেন, শুধু হালনাগাদ করা অবস্থান ও দিকসহ। নিচের ক্ষেত্রে লগ চ্যানেলে মেসেজ পাঠাতে হবে:
Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 34টি কনসেপ্ট165টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।