এই প্রতিযোগিতাটি সরকারীভাবে শেষ হয়েছে। জিতেছে নীল দল!
আমি 50 টি যুদ্ধের দুটি সেট অটোরান করেছি এবং আশ্চর্যরকমভাবে, নীল তাদের 100 টি জিতেছে। পরিসংখ্যানগুলির দিকে তাকালে, স্পষ্ট হয় যে ফিনোটপি এবং এসপি 3000 এর সমবায় এন্ট্রিগুলি আসল নায়ক ছিল। দুর্দান্ত কাজ আপনি দুজন! আসলে, আপনি যদি নীল দলের প্রত্যেকটি সদস্যকে অযোগ্য ঘোষণা করেন তবে স্পিবিটস এখনও একটি খুব ভাল লড়াই চালিয়ে যাবে । কিছু রেড টিমের লোকেরা স্পিবিটগুলি নামানোর পরিকল্পনা করছিল, তবে এই প্রচেষ্টাটি শেষ হয়ে গেছে বলে মনে হয়েছিল। দুঃখিত রেড দল।
প্রতিযোগিতাটি আনুষ্ঠানিকভাবে শেষ হয়েছে, তবে এর অর্থ এই নয় যে আপনি আর উত্তর দিতে পারবেন না, এর অর্থ কেবলমাত্র আমি সরকারী বিজয়ীকে পুনরায় ঘোষনা করব না। উভয় দলই কেবল বিনোদনের জন্য বট জমা দেওয়ার জন্য স্বাগত। নিয়ামক যতক্ষণ না ভবিষ্যতে কোনও এন্ট্রিগুলি ভঙ্গ করে না ততক্ষণ পর্যন্ত কার্যকর থাকবে।
এটি একটি পাহাড়ের কিংবদন্তি প্রতিযোগিতা, তবে প্রত্যেকে একে অপরের বিরুদ্ধে লড়াইয়ের পরিবর্তে দুটি দল হবে প্রতিযোগিতা: লাল এবং নীল। কেবল একজনই বিজয়ী হবেন।
আপনি যে দলটির উপরে রয়েছেন তা আপনার পিপিসিজি ব্যবহারকারী আইডি নম্বরের উপর নির্ভর করে । এটি সন্ধানের জন্য, পর্দার শীর্ষে আপনার অবতারটি ক্লিক করুন (আপনাকে অবশ্যই লগ ইন করতে হবে) এবং খোলার পৃষ্ঠার ইউআরএলটি দেখুন। এর পরে নম্বরটি users/
আপনার আইডি নম্বর:
https://codegolf.stackexchange.com/users/[id number]/[display name]
উদাহরণস্বরূপ, আমার পিপিসিজি ব্যবহারকারী আইডি নম্বরটি 26997:
https://codegolf.stackexchange.com/users/26997/calvins-hobbies
নোট করুন যে এই সংখ্যাটি বিভিন্ন স্ট্যাক এক্সচেঞ্জ সাইটের জন্য পৃথক।
আপনার আইডি যদি একটি সমান নম্বর হয় তবে আপনি রেড দলে রয়েছেন ।
যদি আপনার আইডি একটি বিজোড় নম্বর হয় তবে আপনি নীল দলে রয়েছেন ।
দল বদলানোর কোনও উপায় নেই।
আপনি আপনার টিমের সাথে কাজ করে এমন সাজানোর মধ্যে অন্য দলের সর্বনাশ চেষ্টা করতে হবে যুদ্ধ রাজকীয় যেখানে প্রত্যেক ব্যবহারকারী একটি 128 × 128 গ্রিড যুদ্ধক্ষেত্র যে তাদের দলের রং এর "পিক্সেল" নিয়ন্ত্রণ করে। পিক্সেলগুলি ঘোরাফেরা করতে পারে, তাদের সতীর্থদের সাথে যোগাযোগ করতে পারে এবং অন্য দলের পিক্সেলগুলি বের করতে পারে। যদি কেউ কোনও সংখ্যক পিক্সেল তৈরি করতে পারে তবে এটি হাতছাড়া হয়ে যাবে, সুতরাং প্রতিটি ব্যবহারকারী কেবল এই প্রশ্নের একটি উত্তর জমা দিতে পারে।
এই স্ট্যাক স্নিপেট ( পুরো এই প্রতিযোগিতার জন্য এই ফুলের একটি সম্পূর্ণ সংস্করণ [ পূর্ণস্ক্রিন ]) ler এটি স্বয়ংক্রিয়ভাবে জমাগুলি পড়ে, তা বৈধ কিনা তা নিশ্চিত করে এবং দলগুলির মধ্যে লড়াই শুরু করে। এটি জাভাস্ক্রিপ্ট ব্যবহার করে যে কোনও সময় আপনার ব্রাউজারে এটি করতে পারে । যেহেতু জাভাস্ক্রিপ্ট হ'ল একমাত্র ক্লায়েন্ট-সাইড স্ক্রিপ্টিং ভাষা বেশিরভাগ ব্রাউজার সমর্থন করে, তাই সমস্ত জমাটি অবশ্যই জাভাস্ক্রিপ্টে লিখতে হবে।
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 চাল চালায় (যদি খেলাটি শেষ না হয়)।
যে দলটি প্রথমে সরে যেতে পারে সেটি হ'ল একটি বিকল্প যা আপনাকে অবশ্যই নিয়ামকের মধ্যে সেট করতে হবে।
যুদ্ধগুলি যখন অটোোরান হয়, তখন যে দলটি প্রতিটি যুদ্ধে প্রথম বিকল্পে চলে যায়।
প্লেয়ার মুভস
যখন কোনও দল নড়াচড়া করে, তখন সেই দলের সমস্ত খেলোয়াড়কে নিজেরাই সরানোর জন্য আহ্বান জানানো হয়। এই কলগুলি প্রতিটি পদক্ষেপের জন্য সম্পূর্ণ এলোমেলো ক্রমে করা হয়। যখন ডাকা হয়, প্রতিটি খেলোয়াড়কে যুদ্ধের অবস্থা সম্পর্কে ডেটা দেওয়া হয় যাতে তারা সিদ্ধান্ত নিতে পারে যে কোন পথে সরানো যায়।
সমস্ত চালগুলি কেবল এক পিক্সেল দূরে। এই চিত্রগুলির অন্ধকার চেনাশোনাগুলি চিহ্নিত করে যে প্রতিটি রঙিন প্লেয়ার (স্কোয়ারগুলি) যেতে পারে:
উভয় রঙই যে কোনও দিকে তির্যকভাবে অগ্রসর হতে পারে বা স্থির থাকতে পারে, তবে কেবলমাত্র লাল প্লেয়ারগুলি ডান এবং বাম দিকে যেতে পারে এবং কেবল নীল খেলোয়াড়ই নীচে এবং উপরে যেতে পারে। ধন্যবাদ ফি ও অন্যান্য
কোনও খেলোয়াড় যদি যুদ্ধক্ষেত্রের সীমানা থেকে সরে যাওয়ার চেষ্টা করে, বা কোন পথে যেতে হবে সে সিদ্ধান্ত নিতে খুব বেশি সময় নেয় বা কোনওরকম ত্রুটি থাকে তবে তারা স্বয়ংক্রিয়ভাবে স্থির থাকবে।
চলার পাশাপাশি, কোনও পালা চলাকালীন কোনও প্লেয়ার তাদের সতীর্থদের লেখা বার্তা পড়তে এবং বার্তাগুলি লিখতে পারে যা ঘুরে দেখা যায়। এটি টিম যোগাযোগের একটি অশোধিত ফর্মের জন্য অনুমতি দেয়।
উত্তর হিসাবে আপনি যে কোডটি জমা দিচ্ছেন তা হ'ল যুক্তি যা আপনার প্লেয়ারকে কীভাবে সরানো যায় এবং কোন বার্তা পড়তে এবং লিখতে হবে তা নির্ধারণ করে ( "কীভাবে উত্তর দিতে হবে" দেখুন )।
শত্রু খেলোয়াড়দের সরানো হচ্ছে
যখন কোনও খেলোয়াড় প্রতিপক্ষ দলের একজন খেলোয়াড়ের মতো একই কক্ষে চলে যায়, তখন বিরোধী খেলোয়াড়কে তত্ক্ষণাত যুদ্ধ থেকে সরিয়ে দেওয়া হয়। সবেমাত্র প্লেয়ারটি সরানো স্বাভাবিক হিসাবে চালিয়ে যায়। এটিই একমাত্র প্রক্রিয়া যা খেলোয়াড়দের যুদ্ধ থেকে সরিয়ে দেয় এবং এটি মাস্টারিংই জয়ের চাবিকাঠি!
সেলে যদি একাধিক শত্রু প্লেয়ার থাকে তবে কোনও প্লেয়ার সবেমাত্র সরে গেছে তবে সমস্ত শত্রু খেলোয়াড় সরানো হবে। একই দলের দুজন খেলোয়াড় একই কক্ষ দখল করলে কিছুই হয় না।
একটি যুদ্ধ জয়
সমস্ত যুদ্ধের একবার 2030 টি পদক্ষেপ নেওয়া বা যখন একটি দলের কোনও খেলোয়াড় বাকি না থাকে তখন যুদ্ধ শেষ হয়। বেঁচে থাকা খেলোয়াড়দের সর্বাধিক সংখ্যক দল জয়ী দল। এটি উভয় দলেরই যদি সমান সংখ্যক বেঁচে থাকা খেলোয়াড় থাকে তবে এটি সমান।
কিভাবে উত্তর দিতে হবে
আপনার উত্তরে, আপনাকে জাভাস্ক্রিপ্ট কোড সরবরাহ করতে হবে যা সিদ্ধান্ত নেবে যে কখন আপনার পিক্সেলটি চলবে।
ইন প্রথম আপনার উত্তর (বেশী 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
আপনার বর্তমান এক্স অবস্থান, 0 (বামতম) থেকে 127 (ডানেদিকের) থেকে পূর্ণসংখ্যাy
আপনার বর্তমান y অবস্থান, 0 (শীর্ষস্থানীয়) থেকে 127 (নীচে) এর পূর্ণসংখ্যাtCount
আপনার দলে বেঁচে থাকা খেলোয়াড়দের বর্তমান মোট সংখ্যা।eCount
শত্রু দলে বেঁচে থাকা মোট খেলোয়াড়ের বর্তমান সংখ্যা।tNear
আপনার দলের বর্তমান বেঁচে থাকা খেলোয়াড়দের একটি তালিকা যা 16 পিক্সেলের চেয়ে কম দূরে (ইউক্লিডিয়ান দূরত্ব)। প্রত্যেকটি উপাদানtNear
সঙ্গে একটি অবজেক্টx
,y
এবংid
বৈশিষ্ট্য:
x
অন্যান্য প্লেয়ারের এক্স পজিশনy
অন্য প্লেয়ারের ওয়াই পজিশনid
অন্যান্য প্লেয়ারের পিপিসিজি ব্যবহারকারী আইডি নম্বর (পূর্ণসংখ্যা হিসাবে)eNear
একেবারেtNear
শত্রু খেলোয়াড়দের নয়, কাছের শত্রু খেলোয়াড়ের তালিকা বাদে ঠিক এটির মতো ।
স্নিপেটের চেনাশোনাগুলি প্রতিটি প্লেয়ার tNear
এবং eNear
ব্যাপ্তি।
বার্তা
শেষ 2 পরামিতি, setMsg
এবং getMsg
, কিছুটা ভিন্ন উদ্দেশ্য আছে।
পুরো যুদ্ধের মধ্যে প্রতিটি খেলোয়াড়ের 64৪ টি অক্ষরের স্ট্রিং থাকে যা তারা প্রতিটি স্ট্রাক চলাকালীন ডেটা সঞ্চয় করতে এবং তাদের সতীর্থদের সাথে সম্ভাব্য যোগাযোগ করার জন্য ম্যানিপুলেট করতে পারে। প্রতিটি খেলোয়াড়ের স্ট্রিং খালি স্ট্রিং হিসাবে শুরু হয়। যখন কোনও খেলোয়াড় যুদ্ধ থেকে সরানো হয়, তাদের স্ট্রিংটি "এক্স" তে সেট করা থাকে।
setMsg
একটি আর্গুমেন্ট ফাংশন যা আপনার স্ট্রিংটি স্ট্রিংয়ে প্রবেশ করে।- যদি পাস করা মানটি কোনও স্ট্রিং না হয় তবে আপনার স্ট্রিংটি পরিবর্তন হয় না।
- মানটি যদি 64 টিরও বেশি অক্ষরের স্ট্রিং থাকে তবে কেবল প্রথম 64 টি রাখা হয়।
getMsg
এটি একটি যুক্তি ফাংশন যা আপনার দলের কোনও ব্যক্তির পিপিসিজি ব্যবহারকারী আইডি নম্বর (পূর্ণসংখ্যা হিসাবে) নেয় এবং তার স্ট্রিংটি ফেরত দেয়।- সেই প্লেয়ার গ্রিডের যে কোনও জায়গায় থাকতে পারে। এগুলি আপনার 16 পিক্সেলের ব্যাসার্ধে থাকার দরকার নেই।
undefined
প্রদত্ত আইডি না পাওয়া গেলে ফেরত দেওয়া হয়।
উদাহরণ জমা দেওয়া
এই খেলোয়াড় বামদিকে শত্রু থাকলে উপরে এবং ডানে সরে যায়, অথবা আইডি 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 ঘন্টা চিহ্ন বা এরকম কিছু পরে আপনার পোস্ট সম্পাদনা করে তবে আমি এটি দেব just
আপনি যদি আপনার পোস্ট মুছে ফেলেন এবং এটি মুছে ফেলার জন্য চয়ন করেন তবে সম্পাদনার নিয়ম এখনও প্রযোজ্য। (নিয়ামক মুছে ফেলা উত্তরগুলি দেখতে পারে না))
নতুন জাভাস্ক্রিপ্ট ভেরিয়েবল ঘোষণার সময়, আপনাকে অবশ্যই
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- এ শেষ হবে day এদিন (রাত 11 টা ইউটিসি) আমি কমপক্ষে 100 টি যুদ্ধ (স্বতঃস্ফূর্তভাবে কতটা বেশি সময় নেয় তার উপর নির্ভর করে আরও অনেকগুলি) অটোরিয়ন করব। যে দলটি সবচেয়ে বেশি বিজয়ী হবে তারা সামগ্রিক বিজয়ী হবে। এটি যদি টাই বা চূড়ান্ত কাছাকাছি হয় তবে একটি দলের সুবিধা আছে তা স্পষ্ট না হওয়া পর্যন্ত আমি আরও লড়াই করব।
(বিজয়ীর সিদ্ধান্ত নেওয়ার পরে আপনি উত্তর দিতে পারেন, তবে আমি অফিসিয়াল ফলাফল পরিবর্তন করব না))
আমি এগুলিকে উইন্ডোজ 8.1 64-বিট, 4 জিবি র্যাম এবং একটি 1.6GHz কোয়াড কোর প্রসেসর সহ ল্যাপটপে গুগল ক্রোমের সর্বশেষ সংস্করণে চালাচ্ছি। আপনার জাভাস্ক্রিপ্ট ক্রোমে কাজ করে তা নিশ্চিত করুন।
বিজয়টি মূলত দলের গৌরব সম্পর্কে, তবে আমি বিজয়ী দলের পক্ষে সর্বাধিক ভোট প্রাপ্ত উত্তরটি গ্রহণ করব।
প্রতিযোগিতা জুড়ে, মনে রাখবেন যে টিম ভিত্তিক দিক এবং এটি পুরোপুরি স্ট্যাক স্নিপেটে চালিত হয়েছে, এটি অত্যন্ত পরীক্ষামূলক। আমার উচ্চ আশা আছে, তবে জিনিসগুলি কীভাবে কার্যকর হবে তা নিশ্চিত করে বলতে পারি না।
পরামর্শ:
- উত্তর দেওয়ার আগে আপনি এন্ট্রি পরীক্ষা করতে পারেন। স্ট্যাক স্নিপেটের নীচে "টেস্ট এন্ট্রি" পাঠ্যবক্সটি সম্পাদনা করুন এবং "পরীক্ষার এন্ট্রি সহ পুনরায় লোড করুন" এ ক্লিক করুন। এটি খালি না হলে এটি নির্দিষ্ট দলের খেলোয়াড় হয়ে যায়।
- উত্তরগুলি একটি মুখোশযুক্ত সুযোগে চালানো হয়, সুতরাং জিনিসগুলি পছন্দ করে
alert
এবংconsole.log
কাজ করে না।console
বস্তুটি কেবল পরীক্ষার প্রবেশে ব্যবহার করা যেতে পারে। - স্ট্যাক স্নিপেটের নীচে "ডিবাগ বার্তাগুলি" চেক করুন এবং আপনার ব্রাউজারের কনসোলটি দেখুন (F12)। যুদ্ধ চলাকালীন প্রচুর দরকারী তথ্য মুদ্রিত হয়।
- আপনি এক ধরণের মঞ্চ অঞ্চল হিসাবে মেটা স্যান্ডবক্স পোস্টটি ব্যবহার করতে পারেন । উত্তরগুলি এখানে অবশ্যই অবশ্যই আলাদা এবং সেখানকার নিয়ামক পুরানো হয়ে যেতে পারে।
- যেহেতু এটি কোনও অফিশিয়াল স্ট্যাক অ্যাপ নয় , আপনি যদি দিনে দিনে 300 বারের বেশি পুনরায় চালু করেন তবে নিয়ামক আপনার জন্য উত্তরগুলি লোড করা বন্ধ করতে পারে।
এই চ্যালেঞ্জের "সিক্যুয়েল": ব্লক বিল্ডিং বট ফ্লক্স!
দ্রুত লিঙ্ক
ফিডল কন্ট্রোলার ফুলস্ক্রিন সাধারণ চ্যাট রেড চ্যাট (নীল চ্যাট?) স্যান্ডবক্সপোস্ট ost