ফিরে আসার জন্য স্বাগতম! আমি তৃতীয় কোডবট চ্যালেঞ্জ উপস্থাপন করতে আগ্রহী। এটি তৈরিতে দীর্ঘ সময় হয়েছে। এই চ্যালেঞ্জটি 3 টি বিভাগে বিভক্ত হবে: সংক্ষিপ্ত সংস্করণ, দীর্ঘ সংস্করণ এবং অতিরিক্ত বিশদ।
সংক্ষিপ্ত সংস্করণ
প্রতিটি প্রতিযোগী একটি 24-কমান্ড প্রোগ্রাম লিখবে। এই বটগুলি বিশ্বজুড়ে চলাফেরা করবে এবং তাদের কোডগুলি অন্য বটগুলিতে অনুলিপি করবে, অন্য বটগুলি এটি করতে বাধা দেওয়ার চেষ্টা করবে। সম্ভাব্য কমান্ডগুলির মধ্যে একটি হ'ল নো অপ্ট Flag
। Flag
অন্য কোনও বটের তুলনায় যদি কোনও বোটের আপনার বেশি থাকে তবে Flag
আপনি একটি পয়েন্ট পাবেন। আপনি সবচেয়ে পয়েন্ট পেয়ে জয়।
উপরের সমস্তগুলি গত দুটি চ্যালেঞ্জের জন্য সত্য ছিল। এবার প্রায়, বটগুলি একই সাথে একাধিক লাইনের কোড চালাতে সক্ষম হবে।
দীর্ঘ সংস্করণ
এপিআই
প্রতিটি বোটের ঠিক 24 টি লাইন থাকবে, যেখানে প্রতিটি লাইন নিম্নলিখিত বিন্যাসে থাকে:
$label command parameters //comments
লেবেল এবং মন্তব্যগুলি alচ্ছিক এবং প্রতিটি কমান্ডের বিভিন্ন পরামিতি রয়েছে। সবকিছুই সংবেদনশীল।
পরামিতি
প্যারামিটারগুলি টাইপ করা হয়, এবং নিম্নলিখিত ফর্ম্যাটে থাকতে পারে:
- 0 থেকে 23 এর মান।
- একটি পরিবর্তনশীল:
A
,B
,C
,D
- সংযোজন ব্যবহার করে একটি মান:
A+3
বা2+C
- কোডের একটি লাইন, যা
#
সাইন ব্যবহার করে মনোনীত করা হয়েছে (#4
5 তম লাইন#C+2
উপস্থাপন করবে , যখন গণনা করা রেখাটি উপস্থাপন করবেC+2
)। - আপনি
$label
কোডের একটি লাইন নির্দিষ্ট করার পরিবর্তে একটি ব্যবহার করতে পারেন । - আপনার প্রতিপক্ষের পরিবর্তনশীল বা কোডের লাইন, দ্বারা মনোনীত
*
। আপনার প্রতিপক্ষটি আপনি যে স্কোয়ারের মুখোমুখি হচ্ছেন সেটিই বট। (*B
আপনার প্রতিপক্ষেরB
মানকে*#9
উপস্থাপন করে যখন আপনার প্রতিপক্ষের দশম লাইন উপস্থাপন করে)। Square স্কোয়ারে কেউ না থাকলে কমান্ড কার্যকর হয় না not
কমান্ড
সরানো ভি
বট সরায় North+(V*90 degrees clockwise)
। চলাচলের দিক পরিবর্তন হয় না।
টার্ন ভি
বটকে V*90 degrees
ঘড়ির কাঁটার দিকে ঘুরিয়ে দেয়।
অনুলিপি করুন
কপি যাই হোক না কেন হয় V
মধ্যে W
। যদি V
একটি লাইন নম্বর হয়, তবে W
একটি লাইন নম্বর হতে হবে। যদি V
ভেরিয়েবল বা মান হয় তবে W
অবশ্যই একটি পরিবর্তনশীল হতে হবে।
পতাকা
কিছুই করে না।
স্তর টেলিভশন
ভেরিয়েবলের সাথে যুক্ত একটি নতুন থ্রেড শুরু করে V
। তাত্ক্ষণিকভাবে এবং প্রতিটি ভবিষ্যতের পাল্লায়, থ্রেডটি লাইনে থাকা কমান্ডটি কার্যকর করবে V
।
যদি V
ইতিমধ্যে কোনও থ্রেডের সাথে সংযুক্ত থাকে, তবে এই আদেশটি কোনও অপ-অপশন is যদি V
কোনও প্রতিপক্ষের পরিবর্তনশীল হয়, তবে প্রতিপক্ষ সেই চলকের সাথে সংযুক্ত একটি থ্রেড শুরু করবে।
স্টপ ভি
এই টার্নের V
শেষে চলকের সাথে সংযুক্ত থ্রেডটি থামায় ।
লক ভি
লাইন বা পরিবর্তনশীল আটকান V
ব্যবহৃত হচ্ছে থেকে কোন ভাবেই থ্রেড যে বলা ছাড়া Lock
। পরবর্তী Lock
থ্রেডের পরে একই কলটি আনলক করে V
। প্রতিপক্ষের পরিবর্তনশীল বা লাইনগুলিতে লকগুলি কল করা যায় না।
কনড ভিডাব্লু
এই পরীক্ষা হবে Cond
। যদি শর্তটি সত্য হয়, তবে এটি থ্রেড পয়েন্টারটিকে লাইন নম্বরটিতে সরিয়ে ফেলবে V
, অন্যথায় লাইন নম্বরে W
। তারপরে সেই লাইনটি তত্ক্ষণাত কার্যকর করা হবে।
Conditionals কে হতে পারে X=Y
, X<Y
, !X
, অথবা ?X
:
X=Y
দুটি লাইন একই ধরণের এবং একই বট থেকে হয় কিনা তা পরীক্ষা করে, বা আপনি দুটি মান একই পরিমাণের সমান কিনা তা পরীক্ষা করেন।X<Y
এর মানX
কম কিনা তা পরীক্ষা করেY
।!X
ভেরিয়েবল বা লাইনX
লক করা আছে কিনা তা পরীক্ষা করে (তালাবদ্ধ থাকলে সত্যটি প্রত্যাবর্তন করে)?X
প্রদত্ত ভেরিয়েবলের সাথে একটি থ্রেড যুক্ত রয়েছে কিনা তা পরীক্ষা করে
অতিরিক্ত তথ্য
বহু-থ্রেডযুক্ত মিথস্ক্রিয়া
একই ধরণের ক্রিয়াকলাপ একই সময়ে কার্যকর করা হয়। নিম্নলিখিত ক্রমে ক্রিয়াগুলি কার্যকর করা হয়:
লক। বেশ কয়েকটি থ্রেড যদি কোনও ভেরিয়েবল লক করার চেষ্টা করে তবে সেগুলি সমস্ত ব্যর্থ হবে। অন্য কোনও এটি লক করার চেষ্টা করার সময় কোনও থ্রেড যদি কোনও ভেরিয়েবল আনলক করে থাকে তবে ভেরিয়েবলটি আনলক থাকবে।
স্টার্ট। যদি বেশ কয়েকটি থ্রেড কোনও ভেরিয়েবলের উপর কোনও থ্রেড শুরু করার চেষ্টা করে তবে এটি একটি একক সূচনা হিসাবে গণ্য হবে।
কপি। যদি দুটি থ্রেড উভয়ই একই ভেরিয়েবলের অনুলিপি করে তবে চলকটি এলোমেলো মান হিসাবে শেষ হবে। যদি তারা উভয়ই একই লাইনে অনুলিপি করে তবে উভয়ই কাজ করবে না। যদি কোনও থ্রেড একই ভেরিয়েবলের অনুলিপি করে অন্য থ্রেড থেকে অনুলিপি করে থাকে, তবে পরবর্তী থ্রেডটি এলোমেলো মানটি অনুলিপি করে। যদি দুটি থ্রেড উভয়ই একই ভেরিয়েবল থেকে অনুলিপি করা হয় তবে তারা উভয়ই ঠিকঠাক কাজ করবে।
করে। সমস্ত শর্তাদি একই সাথে পরীক্ষা করা হবে এবং তারপরে থ্রেড ভেরিয়েবলগুলি আপডেট করা হবে। একটি কার্যকর করা
If
উচ্চতর অগ্রাধিকার সহ একটি ক্রিয়া যুক্ত হতে পারে। উচ্চ অগ্রাধিকার সহ ক্রিয়াকলাপ অতীতে অগ্রসর হওয়ার আগে কার্যকর করা হবেIf
, যখন নিম্ন অগ্রাধিকার সহ ক্রিয়াকলাপগুলি এর পরে কার্যকর করা হবেIf
।নিয়ে যান। একই বটের একাধিক চলনগুলি বোটকে সমস্ত পদক্ষেপের যোগফলকে সরায়। যদি একাধিক বট একই স্থানে শেষ হয় তবে সেগুলি তাদের প্রারম্ভিক স্পটে ফিরে আসবে।
চালু করুন। একই বটে একাধিক টার্নের যোগফল হবে।
স্টপ। একই ভেরিয়েবলের একাধিক স্টপ কমান্ডগুলি একক স্টপ হিসাবে গণ্য হবে।
অন্যান্য বিস্তারিত
আপনার প্রাথমিক থ্রেডটি D
ভেরিয়েবলের সাথে সংযুক্ত হতে শুরু করে
কোনও দিয়ে পুনরাবৃত্তি করা If
( If
নিজের প্রতি নির্দেশ দেওয়া একটি বিবৃতি থাকা) আপনার বটকে কিছুই করতে পারে না
লক করার পরে যদি কোনও থ্রেড বন্ধ হয়ে যায় তবে সেই লকগুলি আনলক হয়ে যাবে
লক করা ভেরিয়েবল বা লাইন ব্যবহারের ক্রিয়াগুলি কিছুই করবে না।
যদি কোনও বট 24 টি লাইনের চেয়ে কম হয়, অবশিষ্ট রেখাগুলি পূরণ করা হবে Flag
কোনও চলকটিতে একটি লেখার সম্পাদন যা একটি প্রারম্ভিক থ্রেডের সাথেও সংযুক্ত থাকে প্রকৃতপক্ষে থ্রেডটি নিম্নলিখিত মানটি শুরু হওয়ার সাথে সাথে নতুন মানটিতে এটি কার্যকর করা শুরু করবে।
বটগুলি নিম্নোক্ত প্যাটার্নে টরয়েডিয়াল বিশ্বে স্থাপন করা হয়:
B...B...B...
..B...B...B.
B...B...B...
আমি বেশ কয়েকটি নমুনা বট যুক্ত করেছি যা একটি ভাষা রেফারেন্স হিসাবে মন্তব্য করা হয়েছে।
নিয়ামক এখানে অবস্থিত । আমি এটিতে দীর্ঘ সময় ধরে কাজ করেছি, তবে সম্ভবত এটিতে বাগ রয়েছে। যখন চশমা এবং নিয়ামক পরস্পরবিরোধী হন, তখন অনুমানটি সঠিক।
স্কোরবোর্ড
1. 771 LockedScannerBot
2. 297 CopyAndSelfFlag
3. 289 DoubleTapBot
4. 197 ThreadCutterBot
5. 191 TripleThread
6. 180 ThickShelled
7. 155 Attacker
8. 99 RandomMover
9. 90 BananaBot
10. 56 LockedStationaryDoubleTap