यह प्रतियोगिता आधिकारिक रूप से समाप्त हो गई है। ब्लू टीम जीती!
मैंने 50 लड़ाइयों के दो सेट और आश्चर्यजनक रूप से, ब्लू ने उनमें से सभी 100 जीते। आंकड़ों को देखते हुए, यह स्पष्ट है कि PhiNotPi और Sp3000 की सहकारी प्रविष्टियाँ असली हीरो थीं। महान काम आप दो! वास्तव में, यदि आप ब्लू टीम के हर दूसरे सदस्य को अयोग्य ठहराते हैं, तो स्फीबॉट्स अभी भी एक बहुत अच्छी लड़ाई डालते हैं । रेड टीम के कुछ लोग स्फीबोट्स को उतारने की योजना बना रहे थे , लेकिन यह प्रयास कमतर लग रहा था। सॉरी रेड टीम।
प्रतियोगिता आधिकारिक तौर पर खत्म हो गई है, लेकिन इसका मतलब यह नहीं है कि आप अब जवाब नहीं दे सकते हैं, इसका केवल यह मतलब है कि मैं कभी भी आधिकारिक विजेता को फिर से घोषित नहीं करूंगा। दोनों टीमों को केवल मनोरंजन के लिए बॉट्स जमा करने के लिए स्वागत किया जाता है। नियंत्रक तब तक बना रहेगा और तब तक कार्यशील रहेगा जब तक भविष्य में कोई प्रविष्टि उसे तोड़ न दे।
यह एक राजा-की-पहाड़ी प्रतियोगिता है, लेकिन सभी के लिए एक-दूसरे के खिलाफ लड़ने के बजाय, दो टीमें होंगी जो प्रतिस्पर्धा करेंगी: रेड और ब्लू। केवल एक ही विजेता होगा।
आप जिस टीम में हैं, वह आपके पीपीसीजी उपयोगकर्ता आईडी नंबर पर निर्भर करता है । इसे खोजने के लिए, स्क्रीन के शीर्ष पर अपना अवतार क्लिक करें (आपको लॉग इन होना चाहिए) और खुलने वाले पृष्ठ के यूआरएल को देखें। users/
आपके आईडी नंबर के बाद का नंबर है:
https://codegolf.stackexchange.com/users/[id number]/[display name]
उदाहरण के लिए, मेरा PPCG उपयोगकर्ता आईडी नंबर 26997 है:
https://codegolf.stackexchange.com/users/26997/calvins-hobbies
ध्यान दें कि यह संख्या विभिन्न स्टैक एक्सचेंज साइटों के लिए अलग है।
यदि आपकी आईडी एक सम संख्या है , तो आप रेड टीम पर हैं ।
यदि आपकी आईडी एक विषम संख्या है , तो आप ब्लू टीम पर हैं ।
टीमों को बदलने का कोई तरीका नहीं है।
आपको अपनी टीम के साथ दूसरी टीम को एक तरह से युद्ध के मैदान में हराने की कोशिश करनी चाहिए, जहाँ प्रत्येक उपयोगकर्ता 128 × 128 ग्रिड पर अपनी टीम के रंग के "पिक्सेल" को नियंत्रित करता है। पिक्सेल चारों ओर घूम सकते हैं, अपने साथियों के साथ संवाद कर सकते हैं, और दूसरी टीम के पिक्सेल निकाल सकते हैं। यह किसी भी संख्या में पिक्सेल बना सकता है, तो यह हाथ से निकल जाएगा, इसलिए प्रत्येक उपयोगकर्ता केवल इस प्रश्न का एक उत्तर प्रस्तुत कर सकता है।
यह स्टैक स्निपेट ( इस फिडल का पूर्ण संस्करण [ फुलस्क्रीन ]) संपूर्ण प्रतियोगिता का नियंत्रक है। यह स्वचालित रूप से प्रस्तुतियाँ पढ़ता है, यह सुनिश्चित करता है कि वे मान्य हैं, और टीमों के बीच लड़ाई लड़ते हैं। यह आपके ब्राउज़र में किसी भी समय, जावास्क्रिप्ट का उपयोग करते हुए आपके अधिकार में है । चूंकि जावास्क्रिप्ट एकमात्र क्लाइंट-साइड स्क्रिप्टिंग भाषा है जिसे अधिकांश ब्राउज़र समर्थन करते हैं, सभी प्रस्तुतियाँ जावास्क्रिप्ट में भी लिखी जानी चाहिए।
function toggleDebug(){debug=$("#debug").is(":checked")}function rnd(e){return Math.floor(Math.random()*e)}function shuffle(e){for(var t,a,r=e.length;r;t=rnd(r),a=e[--r],e[r]=e[t],e[t]=a);return e}function maskedEval(e,t){var a={};for(i in this)a[i]=void 0;for(i in t)t.hasOwnProperty(i)&&(a[i]=t[i]);return new Function("with(this) { "+e+";}").call(a)}function createBattle(e,t,a,r){function n(){var e=rnd(i.length),t=i[e];return i.splice(e,1),t}var l={};l.width=l.height=128,l.totalMoves=2048,l.radius=16,l.msgMaxLength=64,l.timeLimit=15,l.move=0,l.redToMove=a,l.animated=r,l.running=!1,l.over=!1;for(var o=0,i=new Array(l.width*l.height),d=0;d<l.height;d++)for(var s=0;s<l.width;s++)i[o++]={x:s,y:d};l.redTeam=shuffle(e.slice()),l.redMsgs={},l.redKills={};for(var o=0;o<l.redTeam.length;o++){var u=n();l.redTeam[o].x=u.x,l.redTeam[o].y=u.y,l.redMsgs[l.redTeam[o].id]="",l.redKills[l.redTeam[o].id]=0}l.blueTeam=shuffle(t.slice()),l.blueMsgs={},l.blueKills={};for(var o=0;o<l.blueTeam.length;o++){var u=n();l.blueTeam[o].x=u.x,l.blueTeam[o].y=u.y,l.blueMsgs[l.blueTeam[o].id]="",l.blueKills[l.blueTeam[o].id]=0}return l}function drawBattle(e){function t(e){var t=3*e.x,a=3*e.y;ctx.fillRect(t,a,3,3),showNames.is(":checked")&&ctx.fillText(e.title,t+5,a+12)}function a(t){ctx.beginPath(),ctx.arc(3*t.x,3*t.y,3*e.radius,0,2*Math.PI),ctx.closePath(),ctx.fill()}e.animated&&(ctx.clearRect(0,0,canvas.width,canvas.height),showCircles.is(":checked")&&(ctx.fillStyle="rgba(255, 0, 0, 0.1)",e.redTeam.forEach(a),ctx.fillStyle="rgba(0, 0, 255, 0.1)",e.blueTeam.forEach(a)),ctx.fillStyle="red",e.redTeam.forEach(t),ctx.fillStyle="blue",e.blueTeam.forEach(t),moveCounter.text((e.move+1).toString()))}function movePlayer(e,t,a,r,n,l,o,i){function d(a){t.id!==a.id&&Math.sqrt(Math.pow(t.x-a.x,2)+Math.pow(t.y-a.y,2))<e.radius&&(u.push({x:a.x,y:a.y,id:a.id}),debug&&console.log(a.title+" is near"))}debug&&(console.log("--- Moving "+t.title+" ---"),console.log("position before move = ("+t.x.toString()+", "+t.y.toString()+")"));var s={};s.move=a,s.x=t.x,s.y=t.y,s.tCount=r.length,s.eCount=n.length,s.setMsg=function(a){"string"==typeof a&&(l[t.id]=a.length>e.msgMaxLength?a.substring(0,e.msgMaxLength):a,debug&&console.log('set message to "'+l[t.id]+'"'))},s.getMsg=function(e){var t=l.hasOwnProperty(e)?l[e]:void 0;return debug&&console.log('got message "'+t+'" from player with id '+e.toString()),t};var u=[];r.forEach(d),s.tNear=u,u=[],n.forEach(d),s.eNear=u,-1===t.id&&(s.console=console);var c=0,g=performance.now();try{c=maskedEval(t.code,s)}catch(v){c=0,debug&&(console.log("encountered error:"),console.log(v))}g=performance.now()-g,debug&&console.log("time taken = "+g.toString()+"ms"),g>e.timeLimit&&(c=0,debug&&console.log("went over the time limit of "+e.timeLimit+"ms"));var m=t.x,h=t.y;switch(c){case 1:e.redToMove?++m:++h;break;case 2:e.redToMove?--m:--h;break;case 3:++m,--h;break;case 4:--m,--h;break;case 5:--m,++h;break;case 6:++m,++h}m>=0&&m<e.width&&h>=0&&h<e.height&&(t.x=m,t.y=h),debug&&console.log("move direction = "+c);for(var f=0;f<n.length;f++)t.x===n[f].x&&t.y===n[f].y&&(debug&&console.log("took out "+n[f].title),++i[t.id],o[n[f].id]="X",n.splice(f--,1))}function advanceBattle(e){debug&&console.log("====== "+(e.redToMove?"Red ":"Blue ")+e.move.toString()+" ======");var t,a,r,n,l;e.redToMove?(t=e.redTeam,a=e.blueTeam,r=e.redMsgs,n=e.blueMsgs,l=e.redKills):(t=e.blueTeam,a=e.redTeam,r=e.blueMsgs,n=e.redMsgs,l=e.blueKills),t.forEach(function(o){movePlayer(e,o,Math.floor(e.move/2)+1,t,a,r,n,l)}),drawBattle(e);var o;return 0===a.length?(o=e.redToMove?1:-1,e.over=!0):++e.move>=e.totalMoves&&(o=e.redTeam.length>e.blueTeam.length?1:e.redTeam.length<e.blueTeam.length?-1:0,e.over=!0),e.redToMove=!e.redToMove,debug&&"undefined"!=typeof o&&console.log("win status = "+o.toString()),o}function newBattle(){if(0===redTeam.length||0===blueTeam.length)return void alert("Each team must have at least one player.");"undefined"!=typeof interval&&clearInterval(interval);var e=parseInt($("#delay").val());return isNaN(e)||0>e?void alert("Delay must be a non-negative integer."):(debug&&console.log("Created new battle with delay "+e.toString()),battle=createBattle(redTeam,blueTeam,$("#redMovesFirst").is(":checked"),!0),drawBattle(battle),void moveCounter.text("0").css("color","black"))}function reportKills(e,t){for(var a="Red Kills:\n",r=0;r<redTeam.length;r++)a+=e[redTeam[r].id].toString()+" by "+redTeam[r].title+"\n";a+="\nBlue Kills:\n";for(var r=0;r<blueTeam.length;r++)a+=t[blueTeam[r].id].toString()+" by "+blueTeam[r].title+"\n";return a}function intervalCallback(){var e=advanceBattle(battle);"undefined"!=typeof e&&(clearInterval(interval),battle.running=!1,alert([0===e?"Tie!":e>0?"Red Wins!":"Blue Wins!","Red remaining: "+battle.redTeam.length,"Blue remaining: "+battle.blueTeam.length,"\n"].join("\n")+reportKills(battle.redKills,battle.blueKills)))}function run(){if("undefined"!=typeof battle&&!battle.running&&!battle.over){battle.running=!0;var e=parseInt($("#delay").val());if(isNaN(e)||0>e)return void alert("Delay must be a non-negative integer.");interval=setInterval(intervalCallback,e)}}function pause(){"undefined"!=typeof battle&&(battle.running=!1),"undefined"!=typeof interval&&clearInterval(interval)}function step(){"undefined"==typeof battle||battle.running||battle.over||intervalCallback()}function autorunBattles(){function e(e){for(var t,i=createBattle(redTeam,blueTeam,e,!1);!i.over;)if(t=advanceBattle(i),"undefined"!=typeof t){i.over=!0,1===t?++a:-1===t?++n:++r;for(var d in i.redKills)i.redKills.hasOwnProperty(d)&&(l[d]+=i.redKills[d]);for(var d in i.blueKills)i.blueKills.hasOwnProperty(d)&&(o[d]+=i.blueKills[d])}}if(pause(),battle=void 0,0===redTeam.length||0===blueTeam.length)return void alert("Each team must have at least one player.");var t=parseInt($("#N").val());if(isNaN(t)||0>t)return void alert("N must be a non-negative integer.");console.log("Autorunning "+t.toString()+" battles");for(var a=0,r=0,n=0,l={},o={},i=0;i<redTeam.length;i++)l[redTeam[i].id]=0;for(var i=0;i<blueTeam.length;i++)o[blueTeam[i].id]=0;for(var i=0;t>i;i++)console.log("Battle "+i.toString()),e(i%2===0);alert([a===n?"Tie overall!":a>n?"Red wins overall!":"Blue wins overall!","Red wins: "+a.toString(),"Blue wins: "+n.toString(),"Ties: "+r.toString(),"\n"].join("\n")+reportKills(l,o))}function changeSelect(e){var t=e?redTeam:blueTeam,a=$(e?"#redSelect":"#blueSelect").val(),r=$(e?"#redCode":"#blueCode"),n=$(e?"#redLink":"#blueLink");null!==a&&a>-1?(r.text(t[a].code),n.attr("href",t[a].link)):(r.text(""),n.attr("href","javascript:;"))}function loadEntries(){function e(e,t){url="https://api.stackexchange.com/2.2/questions/"+qid.toString()+"/answers?page="+e.toString()+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter=!JDuPcYJfXobC6I9Y-*EgYWAe3jP_HxmEee",$.get(url,t)}function t(d){d.items.forEach(function(e){function t(e,t){t.append(" ").append($("<a>").text(e.owner.display_name).attr("href",e.link))}function n(e){return $("<textarea>").html(e).text()}var d=e.owner.user_id%2===0,s=d?redTeam:blueTeam;if(e.owner.display_name=n(e.owner.display_name),e.hasOwnProperty("last_edit_date")&&e.last_edit_date-e.creation_date>r||dq.indexOf(e.owner.user_id)>-1||l.indexOf(e.owner.user_id)>-1)return void t(e,o);l.push(e.owner.user_id);var u=a.exec(e.body);if(null===u||u.length<=1)return void t(e,i);var c={};c.id=e.owner.user_id,c.title=e.owner.display_name+" ["+e.owner.user_id.toString()+"]",c.code=n(u[1]),c.link=e.link;var g=$(d?"#redSelect":"#blueSelect");g.append($("<option>").text(c.title).val(s.length)),s.push(c)}),d.has_more?e(++n,t):($("#loadStatus").hide(),$("#redCount").text(redTeam.length.toString()),$("#blueCount").text(blueTeam.length.toString()),0===o.html().length&&o.html(" none"),0===i.html().length&&i.html(" none"))}var a=/<pre><code>((?:\n|.)*?)\n<\/code><\/pre>/,r=28800,n=1,l=[],o=$("#disqualified"),i=$("#invalid");pause(),battle=void 0,redTeam=[],blueTeam=[],$("#loadStatus").show(),$("#redSelect").empty(),$("#redCode").empty(),$("#redLink").attr("href","javascript:;"),$("#blueSelect").empty(),$("#blueCode").empty(),$("#blueLink").attr("href","javascript:;");var d=$("#testbot").val();if(d.length>0){debug&&console.log("Using test entry");var s={id:-1,title:"TEST ENTRY [-1]",link:"javascript:;",code:d};$("#testbotIsRed").is(":checked")?(redTeam.push(s),$("#redSelect").append($("<option>").text(s.title).val(0))):(blueTeam.push(s),$("#blueSelect").append($("<option>").text(s.title).val(0)))}e(1,t)}var qid=48353,dq=[],ctx,moveCounter,showNames,showCircles,debug=!1,battle,redTeam,blueTeam,interval;$(document).ready(function(){ctx=$("#canvas")[0].getContext("2d"),moveCounter=$("#moveCounter"),showNames=$("#showNames"),showCircles=$("#showCircles"),loadEntries()});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><style>html *{font-family: Consolas, Arial, sans-serif;}select{width: 100%; margin: 12px 0 0 0;}button, select, input{font-size: 100%;}input{text-align: right;}textarea{font-family: "Courier New", monospace;}textarea[readonly]{background-color: #eee; width: 100%;}canvas{margin: 12px 0 0 0; border: 2px solid gray;}.redWrapper, .blueWrapper{width: 30%;}.redWrapper{float: left;}.blueWrapper{float: right;}.arenaWrapper{width: 40%; display: inline-block;}.redTeam, .blueTeam, .arena{padding: 12px;}.arena{text-align: center;}.redTeam, .blueTeam{border-style: solid; border-width: medium;}.redTeam{border-color: red; background-color: #fee;}.blueTeam{border-color: blue; background-color: #eef;}.redTitle, .blueTitle, .arenaTitle{text-align: center; font-size: 200%;}.redTitle, .blueTitle{font-weight: bold;}.redTitle{color: red;}.blueTitle{color: blue;}.control{margin: 12px 0 0 0;}.count{font-size: 75%; margin: 0 0 12px 0;}.footnotes{font-size: 75%; clear: both; padding: 12px;}</style><div id='loadStatus'> Loading entries...</div><div> <div class='redWrapper'> <div class='redTeam'> <div class='redTitle'> Red Team </div><select id='redSelect' size='20' onchange='changeSelect(true)'> </select> <div class='count'> <span id='redCount'></span> players </div>Code: <br><textarea id='redCode' rows='12' readonly></textarea> <br><a id='redLink' href='javascript:;'> Answer Link </a> </div></div><div class='arenaWrapper'> <div class='arena'> <div class='arenaTitle'> Battlefield </div><canvas id='canvas' width='384' height='384'> Your browser does not support the canvas tag. </canvas> <div>Move <span id='moveCounter'>0</span></div><br><div> <div class='control'> <input id='showNames' type='checkbox'>show names <input id='showCircles' type='checkbox'>show circles </div><div class='control'> <input id='redMovesFirst' type='checkbox'>red moves first </div><div class='control'> <input id='delay' type='text' size='4' value='20'> millisecond delay </div><div class='control'> <button type='button' onclick='newBattle()'> New Battle </button> <button type='button' onclick='run()'> Run </button> <button type='button' onclick='pause()'> Pause </button> <button type='button' onclick='step()'> Step </button> </div><hr class='control'> <div class='control'> <button type='button' onclick='autorunBattles()'> Autorun N Battles </button> N = <input id='N' type='text' size='4' value='16'> </div><div class='footnotes'> Autoruns may hang browser tab until complete. </div></div></div></div><div class='blueWrapper'> <div class='blueTeam'> <div class='blueTitle'> Blue Team </div><select id='blueSelect' size='20' onchange='changeSelect(false)'> </select> <div class='count'> <span id='blueCount'></span> players </div>Code: <br><textarea id='blueCode' rows='12' readonly></textarea> <br><a id='blueLink' href='javascript:;'> Answer Link </a> </div></div></div><div class='footnotes'> Test Entry: (id = -1) <input id='testbotIsRed' type='checkbox'>On Red Team <br><textarea id='testbot' rows='1' cols='32'></textarea> <br><button type='button' onclick='loadEntries()'> Reload with test entry </button> <br><br>This was designed and tested in Google Chrome. It might not work in other browsers. <br>Disqualified entries:<span id='disqualified'></span> <br>Could not find code block:<span id='invalid'></span> <br><input id='debug' type='checkbox' onclick='toggleDebug()'>Debug messages <br></div>
दृश्यता के लिए, स्निपेट का युद्धक्षेत्र 3 के एक कारक द्वारा बढ़ाया जाता है, इसलिए यह 384 × 384 वास्तविक पिक्सेल है और "पिक्सेल" 3 × 3 हैं।
पिक्सेल टीम बैटलबोट्स - ओवरव्यू
खिलाड़ियों
इस प्रश्न का प्रत्येक मान्य उत्तर एक खिलाड़ी का प्रतिनिधित्व करता है । (वैधता के विवरण के लिए, "नियम और अयोग्यता" देखें ।) प्रत्येक खिलाड़ी का 128 × 128 सेल युद्ध के मैदान पर एक एकल 1 × 1 सेल (उर्फ पिक्सेल) पर नियंत्रण होता है । रेड टीम के खिलाड़ियों के पास लाल पिक्सेल होते हैं और ब्लू टीम के खिलाड़ियों के पास नीले पिक्सेल होते हैं।
लड़ाई
एक लड़ाई दोनों टीमों के सभी खिलाड़ियों के बीच की लड़ाई है , भले ही टीमों के पास समान संख्या में खिलाड़ी न हों। युद्ध के मैदान में प्रत्येक खिलाड़ी को एक यादृच्छिक स्थिति में रखा जाता है, अर्थात, कोई भी पूर्णांक बाईं ओर (0,0) से नीचे दाईं ओर (127,127) में समन्वयित करता है। यह गारंटी है कि कोई भी दो खिलाड़ी एक ही स्थिति में शुरू नहीं करेंगे।
चालें
प्रत्येक लड़ाई 2048 चालों में टूट जाती है । केवल एक टीम वास्तव में प्रत्येक चाल के दौरान अपने खिलाड़ियों को स्थानांतरित करने के लिए मिलती है। वह टीम रेड से ब्लू तक आगे और पीछे चलती है, इसलिए प्रत्येक टीम कुल 1024 चालें बनाती है (जब तक कि खेल जल्दी समाप्त नहीं होता)।
टीम जो पहले स्थानांतरित होती है वह एक विकल्प है जिसे आपको नियंत्रक में सेट करना होगा।
जब लड़ाई ऑटोरन होती है, तो जो टीम हर लड़ाई में पहले विकल्प को आगे बढ़ाती है।
प्लेयर मूव्स
जब एक टीम चलती है, तो उस टीम के सभी खिलाड़ियों को खुद को स्थानांतरित करने के लिए कहा जाता है। ये कॉल प्रत्येक चाल के लिए पूरी तरह से यादृच्छिक क्रम में किए जाते हैं। जब बुलाया जाता है, तो प्रत्येक खिलाड़ी को लड़ाई की स्थिति के बारे में डेटा दिया जाता है ताकि वे तय कर सकें कि किस रास्ते पर चलना है।
सभी चालें केवल एक पिक्सेल दूर तक होती हैं। इन रेखाचित्रों में काले घेरे जो प्रत्येक रंगीन खिलाड़ी (चौकों) को बनाते हैं:
दोनों रंग किसी भी दिशा में तिरछे चल सकते हैं या स्थिर रह सकते हैं, लेकिन केवल लाल खिलाड़ी दाएं और बाएं हिल सकते हैं, और केवल नीले खिलाड़ी नीचे और ऊपर जा सकते हैं। धन्यवाद फी और अन्य।
यदि कोई खिलाड़ी युद्ध के मैदान से बाहर निकलने की कोशिश करता है, या बहुत लंबा निर्णय लेता है कि किस रास्ते पर चलना है, या किसी तरह की त्रुटि है, तो वे स्वचालित रूप से स्थिर रहेंगे।
घूमने के अलावा, एक मोड़ के दौरान एक खिलाड़ी अपने साथियों द्वारा लिखित संदेश पढ़ सकता है और ऐसे संदेश लिख सकता है जो बदले में पढ़े जा सकते हैं। यह टीम संचार के कच्चे रूप के लिए अनुमति देता है।
कोड जो आप एक उत्तर के रूप में प्रस्तुत करते हैं, वह तर्क है जो आपके खिलाड़ी को स्थानांतरित करने का तरीका निर्धारित करता है और क्या संदेश पढ़ना और लिखना है ( "उत्तर कैसे दें" देखें )।
दुश्मन के खिलाड़ियों को हटाना
जब कोई खिलाड़ी विरोधी टीम के खिलाड़ी के रूप में एक ही सेल में जाता है, तो उस विरोधी खिलाड़ी को लड़ाई से तुरंत हटा दिया जाता है। खिलाड़ी जो बस चला गया वह सामान्य रूप से जारी है। यह एकमात्र तंत्र है जो खिलाड़ियों को लड़ाई से निकालता है और इसमें महारत हासिल करता है।
यदि सेल में एक से अधिक दुश्मन खिलाड़ी होते हैं, तो एक खिलाड़ी को स्थानांतरित कर दिया जाता है, तो सभी दुश्मन खिलाड़ी हटा दिए जाते हैं। अगर एक ही टीम के दो खिलाड़ी एक ही सेल पर कब्जा कर लेते हैं तो कुछ नहीं होता।
एक लड़ाई जीतना
एक बार लड़ाई शुरू हो जाती है जब सभी 2048 चालें चली जाती हैं या जब एक टीम में कोई खिलाड़ी नहीं बचता है। जीवित खिलाड़ियों की सबसे बड़ी संख्या वाली टीम जीतती है। यह एक टाई है यदि दोनों टीमों में जीवित खिलाड़ियों की संख्या समान है।
कैसे जवाब दें
आपके उत्तर में, आपको जावास्क्रिप्ट कोड प्रदान करने की आवश्यकता है जो यह तय करता है कि ऐसा करने पर आपका पिक्सेल किस रास्ते पर जाएगा।
में पहले अपने जवाब (लोगों को 4 स्थानों के साथ उपसर्ग) में दांतेदार कोड नमूना, इस कार्य के लिए एक शरीर बारे में:
function moveMe(move, x, y, tCount, eCount, tNear, eNear, setMsg, getMsg) {
//the body goes here
}
अपने कोड को गोल्फ करने की कोई आवश्यकता नहीं है।
क्या लौटना है?
फ़ंक्शन का रिटर्न मान यह निर्धारित करता है कि आपका पिक्सेल किस ओर जाता है:
0
1
रेड टीम के लिए सही स्थानांतरित करने के लिए अभी भी बने रहने के लिए, ब्लू टीम के
2
लिए नीचे जाने के लिए रेड टीम के लिए बाईं ओर, ब्लू टीम
3
के लिए तिरछे ऊपर
4
जाने के लिए और तिरछे स्थानांतरित करने के लिए दाएं और
5
तिरछे नीचे
6
जाने के लिए छोड़ दिया और तिरछे स्थानांतरित करने के लिए छोड़ दिया सही और सही
आरेख के रूप में:
यदि आपका कोड इनमें से कोई भी काम करता है, तो आपका पिक्सेल डिफ़ॉल्ट रूप से बना रहेगा:
- 0 से 6 तक पूर्णांक के अलावा कुछ भी देता है।
- युद्ध के मैदान से पिक्सेल को बाहर निकालने का प्रयास।
- चलाने के लिए 15 मिलीसेकंड से अधिक समय लगता है।
- किसी भी प्रकार के अपवाद को फेंकता है।
आपके प्रवेश को निर्धारक होने की आवश्यकता नहीं है; उपयोग Math.random
ठीक है।
पैरामीटर्स
moveMe
लड़ाई की स्थिति के बारे में जानकारी देने के पहले 7 फ़ंक्शन पैरामीटर :
move
एक पूर्णांक है जो 1 पर शुरू होता है और हर कदम के बाद वृद्धि होती है जब तक कि यह आपकी टीम के अंतिम कदम पर 1024 नहीं है।x
आपका वर्तमान x स्थान है, 0 (बायीं ओर) से 127 (सबसे दाएं) का पूर्णांक।y
आपकी वर्तमान y स्थिति, 0 (शीर्षतम) से 127 (बॉटलमोस्ट) पर पूर्णांक है।tCount
आपकी टीम में जीवित खिलाड़ियों की वर्तमान कुल संख्या है।eCount
दुश्मन टीम पर जीवित खिलाड़ियों की वर्तमान कुल संख्या है।tNear
आपकी टीम के उन बचे हुए खिलाड़ियों की सूची है जो 16 पिक्सेल से कम दूरी पर हैं (यूक्लिडियन दूरी)। के प्रत्येक तत्वtNear
के साथ एक वस्तु हैx
,y
औरid
गुण:
x
दूसरे खिलाड़ी की x स्थिति हैy
अन्य खिलाड़ी की y स्थिति हैid
PPCG उपयोगकर्ता आईडी दूसरे खिलाड़ी की संख्या है (पूर्णांक के रूप में)eNear
बिल्कुल वैसा ही है जैसेtNear
कि यह पास के दुश्मन खिलाड़ियों की सूची है, न कि टीम के साथी।
स्निपेट में वृत्त प्रत्येक खिलाड़ी के हैं tNear
और eNear
सीमा है।
संदेश
पिछले 2 मापदंडों, setMsg
और getMsg
, थोड़ा अलग उद्देश्य हैं।
एक लड़ाई के दौरान, प्रत्येक खिलाड़ी के पास 64 अक्षरों तक का एक तार होता है जिसे वे डेटा को संग्रहीत करने के लिए हर चाल के दौरान हेरफेर कर सकते हैं और संभावित रूप से अपने साथियों के साथ संवाद कर सकते हैं। प्रत्येक खिलाड़ी का स्ट्रिंग खाली स्ट्रिंग के रूप में बाहर शुरू होता है। जब एक खिलाड़ी को लड़ाई से हटा दिया जाता है, तो उनकी स्ट्रिंग "X" पर सेट हो जाती है।
setMsg
एक तर्क फ़ंक्शन है जो आपके स्ट्रिंग को पास किए गए स्ट्रिंग पर सेट करता है।- यदि इसमें दिया गया मान स्ट्रिंग नहीं है, तो आपका स्ट्रिंग नहीं बदलता है।
- यदि मान 64 से अधिक वर्णों वाला एक स्ट्रिंग है, तो केवल पहले 64 रखे जाते हैं।
getMsg
एक तर्क फ़ंक्शन है जो आपकी टीम के किसी व्यक्ति का पीपीसीजी उपयोगकर्ता आईडी नंबर (पूर्णांक के रूप में) लेता है और उनकी स्ट्रिंग लौटाता है।- वह खिलाड़ी ग्रिड में कहीं भी हो सकता है। उन्हें आपके 16 पिक्सेल के दायरे में रहने की आवश्यकता नहीं है।
undefined
दी गई आईडी नहीं मिलने पर वापस कर दी जाती है।
उदाहरण प्रस्तुत करना
यह खिलाड़ी ऊपर उठता है और दायाँ होता है अगर कोई दुश्मन बाईं ओर है, या फिर नीचे और बाएँ है अगर ID 123 के साथ टीममेट कहता है, लेकिन अन्यथा अभी भी रुकता है:
for (var i = 0; i < eNear.length; i++) {
if (eNear[i].x === x - 1)
return 3
}
if (getMsg(123) === 'move down and left')
return 5
return 0
ध्यान दें कि यह कोड ब्लॉक सभी आवश्यक है। फ़ंक्शन की परिभाषा और कोष्ठक मौजूद नहीं होने चाहिए।
नियम और अयोग्यता
यदि कोई उपयोगकर्ता नीचे सूचीबद्ध नियमों का पालन नहीं कर रहा है, तो मैं उन्हें अयोग्य घोषित कर सकता हूं और नियंत्रक स्वचालित रूप से उनके उत्तरों की अनदेखी करेगा। मुझे विश्वास है कि यहां अधिकांश उपयोगकर्ता जानबूझकर नियमों को नहीं तोड़ेंगे और आकस्मिक कारणों से केवल कुछ अस्थायी अयोग्यताएं होंगी।
महत्वपूर्ण नियम
आप इसे पोस्ट करने के बाद सीधे 8 घंटे की विंडो के दौरान केवल अपना उत्तर संपादित कर सकते हैं।
जब वे पोस्ट किए गए थे, तो 8 घंटे बाद संपादित किए गए उत्तर स्वचालित रूप से नियंत्रक द्वारा अयोग्य घोषित कर दिए जाएंगे। यह नियम प्रारंभिक उत्तरों को उनके दृष्टिकोण के लगातार अनुकूलन से रोकने के लिए है, संभवतः बाद के उत्तरों से विचारों को चुरा रहा है। आपकी टीम को जो भी जवाब देना शुरू किया है, उसके साथ करना है।आप विशेष अनुमति के बिना अपने उत्तर को हटा और हटा नहीं सकते हैं। मैं इसे दे दूंगा अगर कोई अनजाने में 8 घंटे के निशान या उसके बाद आपके पोस्ट को संपादित करता है, लेकिन सिर्फ इसलिए कि आपको बग नहीं मिला।
यदि आप अपनी पोस्ट हटाते हैं और इसे हटाना रद्द करते हैं, तो संपादन नियम अभी भी लागू होता है। (नियंत्रक हटाए गए उत्तर नहीं देख सकता है।)
एक नया जावास्क्रिप्ट चर घोषित करते समय, आपको
var
कीवर्ड का उपयोग करना चाहिए ।
ऐसा इसलिए है क्योंकि बिना घोषित किया गया एक वैरिएबलvar
स्थानीय के बजाय वैश्विक हो जाता है, इसलिए नियंत्रक के साथ गलती से (या जानबूझकर) गड़बड़ करना या अन्य खिलाड़ियों के साथ स्वतंत्र रूप से संवाद करना आसान होगा। यह स्पष्ट करना होगा कि आप धोखा देने की कोशिश नहीं कर रहे हैं।फ़ंक्शंस की घोषणा करते समय
var
कीवर्ड का उपयोग करना सबसे अच्छा है । केvar f = function(...) {...}
बजाय का उपयोग करेंfunction f(...) {...}
। मुझे पूरी तरह से यकीन नहीं है कि क्यों, लेकिन कभी-कभी यह एक फर्क पड़ता है।आपका कोड अत्यधिक समय तक नहीं चलना चाहिए।
यदि आपका कोड चलने में 15 मिलीसेकंड से अधिक लगता है, तो आपका पिक्सेल बिल्कुल भी नहीं चलेगा। हालाँकि, चूंकि फंक्शंस को मध्य-निष्पादन को रोकना जावास्क्रिप्ट में मुश्किल है, सभी खिलाड़ी स्क्रिप्ट को हर कदम पर पूरा करने के लिए चलाया जाता है, और बाद में जाँच की जाती है। इसका मतलब है, यदि आपका कोड कुछ समय के लिए गहन कार्य करता है, तो नियंत्रक को चलाने वाला हर कोई नोटिस करेगा और नाराज होगा।
स्वचालित अयोग्यताएं
नियंत्रक ने इन कारणों से स्वचालित रूप से प्रविष्टियाँ अयोग्य घोषित कर दी हैं:
- उपयोगकर्ता पहले ही उत्तर दे चुका है।
- निर्माण के 8 घंटे से अधिक बाद संपादन किया गया था।
- उपयोगकर्ता को विशेष रूप से अयोग्य घोषित किया गया है।
अन्य नियम
आपके कोड में आप नहीं हो सकते हैं ...
- नियंत्रक या अन्य खिलाड़ी के कोड को एक्सेस या संशोधित करने का प्रयास।
- जावास्क्रिप्ट में निर्मित कुछ भी संशोधित करने का प्रयास।
- का उपयोग करके
getMsg
और को छोड़कर अन्य खिलाड़ियों के साथ संवाद करने का प्रयासsetMsg
। - वेब सवाल करें।
- अन्यथा दुर्भावनापूर्ण बातें करें।
मैं अन्य असुरक्षित व्यवहार के लिए नजर रखूंगा, जैसे कि अन्य उत्तरों से कोड वर्बेटीम चोरी करना या दूसरी टीम के साथ गड़बड़ करने के लिए जुर्राब की कठपुतलियों का उपयोग करना।
आपकी टीम के साथ सहयोग और योजना के लिए आपका स्वागत है, लेकिन प्रतियोगिता को अनुकूल और नैतिक बनाए रखें।
यदि आपको लगता है कि किसी को अयोग्य घोषित करने की आवश्यकता है या आपको लगता है कि आपने अयोग्य घोषित कर दिया था, तो मेरे लिए एक टिप्पणी छोड़ दो या प्रश्न विशेष चैट में । मैं प्रतियोगिता में भाग नहीं ले रहा हूं।
सुझाए गए उत्तर प्रारूप
#[team color] Team - [entry title]
//function body
//probably on multiple lines
Explanations, notes, etc.
प्रविष्टि शीर्षक एक वैकल्पिक नाम है जिसे आप चाहें तो दे सकते हैं। नियंत्रक इसके साथ कुछ भी नहीं करता है।
स्कोरिंग
यह प्रतियोगिता आधिकारिक रूप से 19 अप्रैल, 2015 को समाप्त हो जाएगी। उस दिन (लगभग 11 बजे यूटीसी) मैं कम से कम 100 लड़ाइयों को अंजाम दूंगा। जो टीम सबसे अधिक जीतती है, वह समग्र विजेता होगी। यदि यह एक टाई या बेहद करीबी है, तो मैं और लड़ाइयाँ चलाऊंगा जब तक यह स्पष्ट न हो जाए कि एक टीम को फायदा है।
(विजेता के निर्णय के बाद आप जवाब दे सकते हैं, लेकिन मैं आधिकारिक परिणाम नहीं बदलूंगा।)
मैं उन्हें विंडोज 8.1 64-बिट, 4 जीबी रैम और 1.6 गीगाहर्ट्ज़ क्वाड कोर प्रोसेसर वाले लैपटॉप पर Google क्रोम के नवीनतम संस्करण में चला रहा हूं। सुनिश्चित करें कि आपका जावास्क्रिप्ट क्रोम में काम करता है।
जीत मुख्य रूप से टीम के गौरव के बारे में है, लेकिन मैं विजेता टीम पर सबसे ज्यादा वोट देने वाले जवाब को स्वीकार करूंगा।
प्रतियोगिता के दौरान, ध्यान रखें कि टीम आधारित पहलू, और यह तथ्य कि यह पूरी तरह से एक स्टैक स्निपेट में चलाया जाता है, बहुत ही प्रयोगात्मक हैं। मुझे उच्च उम्मीदें हैं, लेकिन मैं यह सुनिश्चित करने के लिए नहीं कह सकता कि चीजें कितनी अच्छी होंगी।
सुझाव:
- जवाब देने से पहले आप प्रविष्टियों का परीक्षण कर सकते हैं। स्टैक स्निपेट के निचले भाग के पास "टेस्ट एंट्री" टेक्स्टबॉक्स को संपादित करें और "टेस्ट एंट्री के साथ रीलोड" पर क्लिक करें। यदि यह खाली नहीं है, तो यह निर्दिष्ट टीम पर एक खिलाड़ी बन जाता है।
- उत्तर एक नकाबपोश दायरे में चलाए जाते हैं, इसलिए चीजें पसंद होती हैं
alert
औरconsole.log
काम नहीं करेंगी।console
वस्तु केवल परीक्षण प्रविष्टि में इस्तेमाल किया जा सकता है। - स्टैक स्निपेट के निचले भाग में "डिबग संदेश" जांचें और अपने ब्राउज़र के कंसोल (F12) को देखें। जब लड़ाइयाँ चल रही हों तो लॉट्स ऑफ़ उपयोगी जानकारी छपी है।
- आप मेटा सैंडबॉक्स पोस्ट का उपयोग एक प्रकार के मंचन क्षेत्र के रूप में कर सकते हैं । वहाँ जवाब निश्चित रूप से यहाँ से अलग हैं, और वहाँ नियंत्रक तारीख से बाहर हो सकता है।
- चूंकि यह एक आधिकारिक स्टैक ऐप नहीं है , इसलिए यदि आप इसे एक दिन में 300 से अधिक बार पुनरारंभ करते हैं, तो नियंत्रक आपके लिए उत्तर लोड करना बंद कर सकता है।
इस चुनौती की "अगली कड़ी": ब्लॉक बिल्डिंग बॉट फ्लक्स!
त्वरित सम्पक
फिडेल कंट्रोलर फुलस्क्रीन जनरल चैट रेड चैट (ब्लू चैट?) सैंडबॉक्सपोस्ट