প্রতিযোগিতা শেষ! তাদের স্কোর দেখতে ব্লবগুলিতে মন্তব্য পড়ুন।
এই কোএইচটি আলগাভাবে প্রাইমারের প্রাকৃতিক নির্বাচন সিমুলেশন দ্বারা অনুপ্রাণিত । আপনার বট একটি ব্লব বেঁচে থাকার জন্য, শক্তি পুনরুদ্ধার করতে আপনাকে অবশ্যই ছোঁড়া খেতে হবে, যা চলতে ব্যবহৃত হয়। অতিরিক্ত শক্তি দিয়ে, ব্লবগুলি দুটিতে বিভক্ত হতে পারে।
শক্তি এবং আন্দোলন
আপনার ব্লবটি প্রতিটি জ্বালানী 100 টি শক্তি দিয়ে শুরু হয় এবং এটি কী পরিমাণ শক্তি সংগ্রহ করতে পারে তার কোনও সীমা নেই। প্রতিটি রাউন্ড ঘুরে ফিরে চালানো হয়, প্রতিটি ব্লবকে উত্তর, পূর্ব, দক্ষিণ বা পশ্চিমকে যে কোনও ঘুরিয়ে নিয়ে যাওয়ার বা স্থির হয়ে দাঁড়ানোর বিকল্প রয়েছে। চলন্ত 1 টি শক্তি ব্যবহার করে এবং স্থির স্থানে এখনও 0.25 শক্তি ব্যবহার করে। মানচিত্রের পাশের দৈর্ঘ্যceil(0.25 * blobCount) * 2 - 1
সর্বনিম্ন 9 ইউনিট সহ ইউনিট। সমস্ত ব্লবগুলি মানচিত্রের প্রান্তে শুরু হয়, প্রতিটি কোণায় একটি করে এবং পরবর্তী ব্লবটি অন্য কোনও থেকে 2 ইউনিট দূরে স্থাপন করা হয়। প্রতি 30 টার্নে, ছোঁড়ার একটি তরঙ্গ মানচিত্রের চারপাশে এলোমেলো দাগে স্থাপন করা হয়, কোনও প্রান্ত থেকে কমপক্ষে 1 ইউনিট। প্রতিবার যখন একটি ছোট ছোট তরঙ্গ প্রদর্শিত হয়, পরের তরঙ্গের মধ্যে গুলিগুলির পরিমাণ (মূলত ব্লবের সংখ্যা বা মানচিত্রের প্রস্থের দ্বিগুণ, যা আরও বড় হয়) 1 দ্বারা হ্রাস পেয়েছে, সময়ের সাথে সাথে ব্লবের সংখ্যা হ্রাস করতে বাধ্য করে। প্রতিটি পেললেট 5 থেকে 15 শক্তির মধ্যে পুনরুদ্ধার করে। যখন কোনও ব্লকের শক্তি 0 এর চেয়ে কম বা সমান হয়, তখন এটি মারা যায়।
আহার
যদি দুটি বা ততোধিক ব্লব একই অবস্থান দখল করার চেষ্টা করে, তবে সবচেয়ে বেশি শক্তি সম্পন্ন ব্যক্তিটি তাদের শক্তি গ্রহণ করে অন্যকে খায়। উভয়ের সমান শক্তি থাকলে উভয়ই বিলুপ্ত হয়।
সনাক্তকরণ এবং তথ্য
4 টি ইউনিটের দূরত্বের মধ্যে ব্লবগুলি যে কোনও পেললেট বা অন্যান্য ব্লব দেখতে পাবে। যখন তাদের ফাংশনগুলি বলা হয়, ব্লবগুলি সরবরাহ করা হয়:
- মানচিত্রের পাশের দৈর্ঘ্য
- মানচিত্রে অঙ্কুরের অবস্থান
- তাদের অনুসন্ধান ব্যাসার্ধের মধ্যে থাকা সমস্ত গুলির অবস্থান, পাশাপাশি তাদের মান
- তাদের অনুসন্ধান ব্যাসার্ধের মধ্যে সমস্ত ব্লবগুলির অবস্থান পাশাপাশি তাদের শক্তি এবং ইউআইডি
- যার কার্য সম্পাদন করা হচ্ছে সেই ব্লবের শক্তি, ইউআইডি এবং অবস্থানগুলি
- একটি স্টোরেজ অবজেক্ট ব্লব থেকে অনন্য
- বিভাজনের মাধ্যমে ব্লব সম্পর্কিত সমস্ত ব্লব দ্বারা ভাগ করা একটি স্টোরেজ অবজেক্ট
বিদারক
যদি একটি ফোটাতে 50 টিরও বেশি শক্তি থাকে তবে এটি বিভাজন চয়ন করতে পারে। বিভক্তকরণের জন্য 50 শক্তি ব্যয় হয় এবং অন্য যে কোনও শক্তি দু'টি ব্লকের মধ্যে সমানভাবে বিভক্ত হয়। সমস্ত ব্লব হয় মূল বা বিভক্ত অনুলিপি, প্রতিটি অনুলিপি একটি আসল ফিরে। এই সব একসাথে "আত্মীয়"। সমস্ত আত্মীয়ের একটি সাম্প্রদায়িক স্টোরেজ অবজেক্ট রয়েছে। স্বজনরা এখনও একে অপরকে খেতে পারেন এবং ভাগ করতে পারেন, তাদের নিজস্ব স্টোরেজ অবজেক্ট ব্যবহার করতে পারেন বা অন্যকে প্রভাবিত না করে শক্তি সংগ্রহ করতে পারেন।
শক্তি স্থানান্তর
যদি দুটি ব্লব একে অপরের পাশে থাকে (সরানোর পরে), তবে একটি বট অন্যর মধ্যে শক্তি স্থানান্তর করতে পারে। এই ফিরে সম্পন্ন করা হয় SendNorth(amt)
, SendEast(amt)
, SendSouth(amt)
, অথবা SendWest(amt)
, সঙ্গে amt
হচ্ছে একটি সংখ্যা পরিমাণ প্রতিনিধিত্বমূলক পাঠিয়ে দিলেন। এটি প্রেরক তাদের সমস্ত শক্তি সহ মোটামুটি যে পরিমাণ অর্থ ব্যয় করতে পারে be সুপারিশ করা হয় যে শক্তিটি প্রাপ্ত ব্লবকে সাম্প্রদায়িক স্টোরেজের মাধ্যমে স্থির থাকতে বলা হয়েছে, যাতে শক্তি স্থানান্তরিত হওয়ার সময় এটি সরে না যায় (যদিও এই ক্ষেত্রে প্রেরকের মোট থেকে শক্তি কেটে নেওয়া হবে না)।
ফাংশন, স্টোরেজ এবং ইউআইডি
আরও জটিল শেখার আচরণের অনুমতি দেওয়ার জন্য, সমস্ত ব্লবগুলিকে একটি পূর্ণসংখ্যার ইউআইডি (অনন্য শনাক্তকারী) দেওয়া হবে। এই ইউআইডিগুলি এলোমেলোভাবে প্রতিটি মানচিত্র তৈরি করা হবে, পৃথক লক্ষ্যগুলির উপর ভিত্তি করে কৌশলগুলি প্রতিরোধ করে। যখন কোনও ব্লকের ফাংশন বলা হয়, তখন এটি চারটি আর্গুমেন্ট পাস করা হয়:
- পূর্ণসংখ্যা হিসাবে মানচিত্রের পাশের দৈর্ঘ্য
- দুটি অ্যারে সহ একটি বস্তু:
pellets
এবংblobs
। উভয় অ্যারেতে অবজেক্ট থাকে, উভয়ই একটিpos
সম্পত্তি যার মধ্যে পেল্ট থাকে বা ব্লাবের অবস্থান ফর্ম্যাট থাকে[x,y]
। শিলাগুলির একটিenergy
সম্পত্তি থাকবে এবং ব্লবগুলির একটিuid
সম্পত্তি এবংenergy
সম্পত্তি থাকবে - ফোঁটা বিভিন্ন বৈশিষ্ট্য সম্পর্কে একটি বস্তুর এটা পাস হয়:
energy
,uid
, এবংpos
।pos
অ্যারে হিসাবে ফরম্যাট করা[x,y]
- ব্লবের দুটি স্টোরেজ অবজেক্ট যুক্ত একটি বস্তু। একটি
self
সম্পত্তিতে একটি পৃথক স্টোরেজ অবজেক্ট থাকে যা সংক্ষিপ্ত হতে পারে তবে ব্লবটি উপযুক্ত দেখায় (পাশ করা বস্তুর বৈশিষ্ট্যগুলি ম্যানিপুলেট করে) এবং কোনওcommunal
সম্পত্তি যা কোনও আত্মীয় দ্বারা সংশোধন করা যায়।
প্রথম দিকে / পরে পরিবর্তিত হওয়ার ফলে কোনও সুবিধা হওয়ার সাথে সাথে ব্লবগুলি অবিলম্বে সরানো হয় না are সমস্ত আন্দোলন গোষ্ঠীগুলিতে প্রক্রিয়াজাত করা হয় (সমস্ত সংঘর্ষ / খাওয়া, তারপরে সমস্ত গুলী, তারপরে বিভাজন ইত্যাদি) যদি কোনও ফোটা একটি গুলি বা ছোট ফোটাতে অবতরণ করে এবং প্রক্রিয়াটিতে তার শেষ শক্তি ব্যবহার করে, ব্লবটি তখনও গুলিটি গ্রাস করবে / যে তার সম্পূর্ণ শক্তি 0 এর উপরে আনবে কিনা তা থেকে স্বাধীন শক্তি।
অপেক্ষাকৃত ব্লবগুলি একে অপরকে স্বীকৃতি দেওয়ার জন্য, প্রতিটি ব্লবকে তার ইউআইডি একটি অ্যারে বা অন্য কোনও সিস্টেমের মাধ্যমে রেকর্ড করতে সাম্প্রদায়িক স্টোরেজ ব্যবহার করা উচিত।
রিটার্ন মান
সরানো বা বিভক্ত করার জন্য, ফাংশনের রিটার্ন মান ব্যবহার করা হয়। প্রথমে স্থানাঙ্কের দিক থেকে মূল দিকনির্দেশগুলির অর্থ:
- উত্তর = -ওয়াই
- পূর্ব = + এক্স
- দক্ষিণ = + ওয়াই
- পশ্চিম = এক্স
নোটটি [0,0]
এটি শীর্ষে বাম কোণে এবং আপনি নিচে যেতে যেতে Y বৃদ্ধি পাবে। ফাংশনের রিটার্ন মানটি এই নিয়মগুলি অনুসরণ করা উচিত:
- কিছুই করার নেই: 0, নাল, অপরিজ্ঞাত, মিথ্যা বা অন্য কোনও মান যা মিথ্যের সাথে সমান হয় তা ফেরত পাঠান না
- সরানোর জন্য: চারটি বৈশ্বিক ভেরিয়েবলের মধ্যে একটি ফেরান: উত্তর, পূর্ব, দক্ষিণ বা পশ্চিম, যা "উত্তর", "পূর্ব", "দক্ষিণ" বা "পশ্চিম" এর সমান হয় (যা ফেরতের মান হিসাবেও ব্যবহৃত হতে পারে)
- বিভক্ত করতে: গ্লোবাল ভেরিয়েবল স্প্লিটনার্থ, স্প্লিটএস্ট, স্প্লিটসথ বা স্প্লিটওয়েস্ট ফিরিয়ে দিন, নতুন ব্লবটি কোথায় রাখবেন তা নির্দেশ করে direction
যদি একটি বিভাজন কমান্ডটি ফিরে আসে এবং প্রয়োজনীয় শক্তির পরিমাণ ফোটা শক্তির চেয়ে বড় বা সমান হয়, কিছুই হবে না। ব্লবস মানচিত্র ছেড়ে যেতে সক্ষম হবে না।
পূর্বনির্ধারিত গ্রন্থাগার ফাংশন
কিছু সময় সাশ্রয় করার জন্য ডিফল্টরূপে কয়েকটি বেসিক ফাংশন রয়েছে:
ট্যাক্সিডিস্ট (পিটি 1, পিটি 2)
দুটি পয়েন্টের মধ্যে ট্যাক্সিক্যাব দূরত্ব (এক্স দূরত্ব প্লাস ওয়াই দূরত্ব) প্রদান করে।
taxiDist([0, 0], [2, 2]) //4
taxiDist([3, 4], [1, 5]) //3
taxiDist([1.25, 1.3], [1.3, 1.4]) //0.15
taxiDist([0, 0], [5, 2.5], 2.5) //3
taxiDist([0, 0], [2, 4], 2.5) //2.4
হাইপোডিস্ট (পিটি 1, পিটি 2)
পাইথাগোরিয়ান উপপাদ্য অনুসারে দুটি পয়েন্টের মধ্যে দূরত্ব ফিরে আসে
hypotDist([0, 0], [5, 12]) //13
hypotDist([4, 6], [8, 9]) //5
hypotDist([0, 1], [2, 1]) //2
hypotDist([1, 1], [2, 2]) //sqrt(2)
modDir (dir, amt)
ইনপুটড দিকটি নেয়, 90 ডিগ্রি ঘড়ির কাঁটার amt
সময় ঘোরায় , তারপরে নতুন মানটি দেয়।
modDist(North, 1) //East
modDist(East, 2) //West
modDist(West, 3) //South
modDist(South, 4) //South
উদাহরণ ব্লব
যতক্ষণ না কাছাকাছি একটি পেলিট খুঁজে পাওয়া যায় ততক্ষণ এই ব্লকটি সরবে না। তারপরে, এটি যে দিকে অগ্রসর হবে বলে মনে করে সে দিকে চলে যাবে। এর শক্তি যদি কখনও 150 এর উপরে হয় তবে এটি বিভক্ত হবে।
function(map, near, me, storage) {
if (me.energy > 150)
return SplitNorth;
if (!near.pellets.length)
return null;
var dirs = [0, 0, 0, 0];
for (let p, i = 0; i < near.pellets.length; i++) {
p = near.pellets[i];
dirs[0] += me.pos[1] - p.pos[1];
dirs[1] += p.pos[0] - me.pos[0];
dirs[2] += p.pos[1] - me.pos[1];
dirs[3] += me.pos[0] - p.pos[0];
}
return [North, East, South, West][dirs.indexOf(Math.max(...dirs))];
}
বিধি
- স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ। এছাড়াও, কোনও আনস্ট্যান্ডার্ড লুফোলস নেই।
- কোনও ব্লব এর পরামিতিগুলির মাধ্যমে এতে পাস করা কোনও ডেটা সংশোধন বা পড়ার চেষ্টা করতে পারে না
- কোনও ব্লব অন্য ব্লবগুলিকে নাশকতার জন্য কোনও রিটার্ন-ভেরিয়েবল পরিবর্তন করার চেষ্টা করতে পারে না
- কেবলমাত্র অবশিষ্ট ব্লবগুলি আত্মীয় না হওয়া পর্যন্ত একটি গোল স্থায়ী হয়
- কোনও ব্লব এর পরামিতিগুলিতে ফাংশনগুলি ইনজেকশনের মাধ্যমে ডেটা সংশোধন করতে পারে যা
this
কীওয়ার্ডটি ব্যবহার করে মানগুলি পরিবর্তন করে - সমস্ত সাবমিশন অবশ্যই জাভাস্ক্রিপ্ট বা এমন একটি ভাষায় থাকতে হবে যা জাভাস্ক্রিপ্ট থেকে খুব আলাদা নয় (উদাহরণস্বরূপ পাইথন)। সমস্ত উত্তর প্রতিযোগিতার জন্য জাভাস্ক্রিপ্টে রূপান্তরিত হবে।
- বিজয়ী হ'ল ব্লব যা মোটামুটি সমস্ত রাউন্ডে সর্বাধিক পরিমাণ শক্তি সংগ্রহ করেছে (কোনওভাবে ছোঁড়া বা ছোট ছোট ব্লবগুলি গ্রহণ করে যা আত্মীয় নয়)
নিয়ামক: https://gist.github.com/RedwolfProgram/1facc0afe24c5dfd3ada8b8a2c493242
চ্যাটরুম: https://chat.stackexchange.com/rooms/93370/hungry-blobs-koth