प्रतियोगिता समाप्त! उनके अंकों को देखने के लिए टिप्पणियों पर पढ़ें।
यह KoTH प्राइमर नैचुरल सिलेक्शन सिमुलेशन से बहुत प्रेरित है । आपका बॉट एक बूँद है। जीवित रहने के लिए, आपको ऊर्जा प्राप्त करने के लिए छर्रों का सेवन करना चाहिए, जिसका उपयोग स्थानांतरित करने के लिए किया जाता है। अतिरिक्त ऊर्जा के साथ, बूँदें दो में विभाजित हो सकती हैं।
ऊर्जा और आंदोलन
आपका बूँद 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किया जा रहा है एक नंबर राशि का प्रतिनिधित्व करने के लिए भेजा। यह कोई भी राशि हो सकती है जो प्रेषक अपनी ऊर्जा सहित सभी खर्च कर सकता है। यह अनुशंसा की जाती है कि ऊर्जा प्राप्त करने वाले बूँद को सांप्रदायिक भंडारण के माध्यम से अभी भी रहने के लिए कहा जाता है, ताकि ऊर्जा स्थानांतरित होने पर यह दूर न जाए (हालांकि इस मामले में प्रेषक के कुल से ऊर्जा नहीं काटी जाएगी)।
कार्य, भंडारण और यूआईडी
अधिक जटिल शिक्षण व्यवहारों की अनुमति देने के लिए, सभी ब्लॉब्स को पूर्णांक UID (विशिष्ट पहचानकर्ता) दिया जाएगा। ये यूआईडी व्यक्तिगत लक्ष्य के आधार पर रणनीतियों को रोकने के लिए, प्रत्येक नक्शे को बेतरतीब ढंग से उत्पन्न करेंगे। जब एक बूँद का कार्य कहा जाता है, तो इसे चार तर्क दिए जाते हैं:
- पूर्णांक के रूप में मानचित्र की ओर की लंबाई
- दो सरणियों के साथ एक वस्तु:,
pelletsऔरblobs। दोनों सरणियों में ऑब्जेक्ट होते हैं, दोनों में एकposसंपत्ति होती है जिसमें गोली या बूँद की स्थिति होती है[x,y]। छर्रों में एकenergyसंपत्ति होगी , जबकि बूँद के पास एकuidसंपत्ति और एकenergyसंपत्ति होगी - ब्लॉब के विभिन्न गुणों से युक्त एक वस्तु इसे करने के लिए पारित कर दिया है:
energy,uid, औरpos।posसरणी के रूप में स्वरूपित किया गया है[x,y] - एक वस्तु जिसमें बूँद के दो भण्डार पदार्थ होते हैं। एक
selfसंपत्ति में एक व्यक्तिगत भंडारण वस्तु शामिल होती है जिसे संशोधित किया जा सकता है लेकिन बूँद फिट बैठती है (पास की गई वस्तु के गुणों में हेरफेर करके), और एकcommunalसंपत्ति जिसे किसी भी रिश्तेदार द्वारा संशोधित किया जा सकता है।
पहले / बाद में एक फायदा होने से रोकने के लिए ब्लब्स को तुरंत स्थानांतरित नहीं किया जाता है। सभी आंदोलनों को समूहों में संसाधित किया जाता है (सभी टकराव / खाने, फिर सभी छर्रों, फिर विभाजन, आदि) यदि एक गोली या छोटे बूँद पर एक बूँद भूमि और इस प्रक्रिया में अपनी अंतिम ऊर्जा का उपयोग करता है, तो बूँद अभी भी गोली का उपभोग करेगी / चाहे वह अपनी कुल ऊर्जा को 0 से ऊपर ले आए, उससे स्वतंत्र ऊर्जा।
रिश्तेदार के लिए एक दूसरे को पहचानने के लिए बूँदें, सांप्रदायिक भंडारण के लिए इस्तेमाल किया जाना चाहिए प्रत्येक बूँद एक सरणी में, या किसी अन्य प्रणाली के माध्यम से अपने UID रिकॉर्ड करने के लिए।
वापसी मान
स्थानांतरित करने या विभाजित करने के लिए, फ़ंक्शन के रिटर्न मान का उपयोग किया जाता है। सबसे पहले, निर्देशांक के संदर्भ में कार्डिनल दिशाओं का अर्थ:
- उत्तर = -य
- पूर्व = + एक्स
- दक्षिण = + य
- पश्चिम = -एक्स
ध्यान दें कि [0,0]है ऊपरी बाएं कोने , और वाई बढ़ जाती है के रूप में आप नीचे जाना। फ़ंक्शन के रिटर्न मान को इन नियमों का पालन करना चाहिए:
- कुछ नहीं करने के लिए: कुछ भी नहीं, 0, शून्य, अपरिभाषित, असत्य, या किसी भी अन्य मान को लौटाएं जो असत्य के बराबर है
- स्थानांतरित करने के लिए: चार वैश्विक चर में से एक लौटें: उत्तर, पूर्व, दक्षिण, या पश्चिम, जो "उत्तर", "पूर्व", "दक्षिण", या "पश्चिम" के समान है (जिसका उपयोग वापसी मूल्य के रूप में भी किया जा सकता है)
- स्प्लिट करने के लिए: वैश्विक चर स्प्लिट नॉर्थ, स्प्लिटएस्ट, स्प्लिटसाउथ या स्प्लिटवेस्ट लौटाएं, यह निर्देश देता है कि नए ब्लॉब को कहां रखा जाए।
यदि एक स्प्लिट कमांड वापस किया जाता है और आवश्यक ऊर्जा की मात्रा बूँद की ऊर्जा से अधिक या बराबर होती है, तो कुछ भी नहीं होगा। ब्लब्स नक्शे को नहीं छोड़ पाएंगे।
पूर्वनिर्धारित पुस्तकालय कार्य
कुछ समय बचाने के लिए डिफ़ॉल्ट रूप से कुछ बुनियादी कार्य उपलब्ध हैं:
टैक्सीडिस्ट (pt1, pt2)
दो बिंदुओं (एक्स दूरी प्लस वाई दूरी) के बीच टैक्सीबैक की दूरी लौटाता है।
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
हाइपोडिस्ट (pt1, pt2)
पाइथागोरस प्रमेय के अनुसार दो बिंदुओं के बीच की दूरी
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))];
}
नियम
- मानक ढीले निषिद्ध हैं। इसके अलावा, कोई भी अस्थिर Loopholes नहीं है।
- कोई भी बूँद अपने मापदंडों के माध्यम से उसमें पारित किसी भी डेटा को संशोधित करने या पढ़ने का प्रयास नहीं कर सकती है
- कोई बूँद अन्य रिटर्न को तोड़फोड़ करने के लिए एक वापसी-मूल्य चर को संशोधित करने का प्रयास नहीं कर सकती है
- एक गोल तब तक रहता है जब तक कि केवल शेष बूँद रिश्तेदार नहीं होते हैं
- कोई भी ब्लॉब अपने मापदंडों में कार्यों को इंजेक्ट करके डेटा को संशोधित नहीं कर सकता है जो
thisकीवर्ड का उपयोग करके मूल्यों को संशोधित करता है - सभी प्रस्तुतियाँ या तो जावास्क्रिप्ट में होनी चाहिए या ऐसी भाषा जो जावास्क्रिप्ट (उदाहरण के लिए पायथन) से बहुत अलग नहीं है। प्रतियोगिता के लिए सभी उत्तरों को जावास्क्रिप्ट में बदल दिया जाएगा।
- विजेता वह बूँद है जिसने सभी राउंडों में कुल ऊर्जा की सबसे अधिक मात्रा में एकत्र किया है (या तो छर्रों से या छोटे ब्लब्स का उपभोग करते हैं जो रिश्तेदार नहीं हैं)
नियंत्रक: https://gist.github.com/RedwolfPrograms/1facc0afe24c5dfd3ada8b8a2c493242
टोकन: https://chat.stackexchange.com/rooms/93370/hungry-blobs-koth