Цей конкурс офіційно закінчений. Перемогла синя команда!
Я авторан два комплекти по 50 боїв і дивно, Блакит виграв усі 100 з них. Подивившись на статистику, видно, що спільні записи PhiNotPi та Sp3000 були справжніми героями. Чудова робота ви двоє! Насправді, якщо ви дискваліфікуєте всіх інших членів «Синьої команди» , Сфіботи все-таки влаштують дуже хороший бій . Деякі люди Червоної Команди планували зняти Сфіботів, але це зусилля, здавалося, вирішило. Вибачте Red Team.
Конкурс офіційно закінчений, але це не означає, що ви більше не можете відповідати, це означає лише те, що я ніколи не перейменую офіційного переможця. Обидві команди можуть продовжувати подавати ботів, просто заради задоволення. Контролер залишатиметься функціонуючим та залишатиметься функціональним до тих пір, поки його не порушить майбутні записи.
Це змагання короля гірки , але замість того, щоб усі боролися один проти одного, змагатимуться дві команди: Червона та Синя. Лише один буде переможцем.
Команда, на якій ви знаходитесь, залежить від вашого ідентифікаційного номера користувача PPCG . Щоб знайти це, натисніть свій аватар у верхній частині екрана (ви повинні увійти в систему) та подивіться на URL-адресу сторінки, що відкривається. Номер після users/
- ваш ідентифікаційний номер:
https://codegolf.stackexchange.com/users/[id number]/[display name]
Наприклад, мій ідентифікаційний номер PPCG - 26997:
https://codegolf.stackexchange.com/users/26997/calvins-hobbies
Зауважте, що це число відрізняється для різних сайтів обміну стеками.
Якщо ваш ідентифікатор - це парне число , то ви в команді "Червоних" .
Якщо ваш ідентифікатор є непарним номером , то ви в команді синіх .
Немає можливості змінити команди.
Ви повинні працювати зі своєю командою, щоб спробувати перемогти іншу команду у своєрідному бойовому королівстві, коли кожен користувач контролює «піксель» кольору своєї команди на сітці 128 × 128, яка є полем бою. Пікселі можуть пересуватися, спілкуватися зі своїми товаришами по команді та виймати пікселі іншої команди. Це вийде з рук, якби хто-небудь міг створити будь-яку кількість пікселів, тому кожен користувач може надіслати лише одну відповідь на це питання.
Цей фрагмент стека (мінімізована версія цієї скрипки [ повноекранний ]) є контролером для всього конкурсу. Він автоматично читає подані матеріали, переконується, що вони є дійсними, і проводить етапи боїв між командами. Це робиться правильно у вашому браузері в будь-який час, коли ви хочете, використовуючи JavaScript . Оскільки JavaScript є єдиною мовою скриптування на стороні клієнта, яка підтримує більшість браузерів, всі матеріали також повинні бути написані на JavaScript.
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.
Pixel Team Battlebots - Огляд
гравці
Кожна дійсна відповідь на це запитання представляє гравця . (Докладніше про дійсність див. У розділі "Правила та дискваліфікація" .) Кожен гравець має контроль над однією клітиною 1 × 1 (ака пікселем) на полі бою 128 × 128 комірок . У гравців команди Red є червоні пікселі, а у гравців команди Blue - сині пікселі.
Битви
Битва боротьба між усіма гравцями обох команд, навіть якщо команди не мають однакову кількість гравців. Бій починається з того, що кожен гравець розміщується у випадковій позиції на полі бою, тобто будь-яка ціла координата від (0,0) вгорі ліворуч до (127,127) в нижньому правому куті. Гарантується, що жоден два гравці не стартують на одній позиції.
Рухи
Кожен бій розбивається на 2048 рухів . Лише одна команда насправді отримує можливість переміщати своїх гравців під час кожного ходу. Ця команда чергується з червоного на синій, тому кожна команда робить 1024 ходи в цілому (якщо гра закінчується достроково).
Команда, яка першою рухається, - це варіант, який потрібно встановити в контролері.
Коли бої є автозапуском, команда, яка рухається першою, чергується в кожному бою.
Гравець рухається
Коли команда рухається, всі гравці цієї команди покликані рухатися самі. Ці дзвінки здійснюються в абсолютно випадковому порядку для кожного ходу. Коли телефонують, кожному гравцеві надаються дані про стан бою, щоб вони могли вирішити, яким шляхом рухатися.
Усі рухи лише на один піксель. Темні кола на цих діаграмах позначають, на яких позиціях кожен кольоровий гравець (квадрати) може перейти до:
Обидва кольори можуть рухатися по діагоналі в будь-якому напрямку або залишатися нерухомими, але тільки гравці Червоного можуть рухатися праворуч і ліворуч, і тільки гравці Синього можуть рухатися вниз і вгору. Дякую Фі та ін.
Якщо гравець намагається вийти за межі поля бою або забирає занадто багато часу, вирішуючи, яким способом рухатися, або має якусь помилку, вони автоматично залишаються на місці.
На додаток до руху, під час повороту гравець може читати повідомлення, написані своїми товаришами по команді, та писати повідомлення, які, в свою чергу, можуть бути прочитані. Це дозволяє отримати грубу форму спілкування в команді.
Код, який ви подаєте як відповідь, - це логіка, яка визначає, яким способом рухати програвач та які повідомлення читати та писати (див. "Як відповісти" ).
Видалення ворожих гравців
Коли гравець переміщується в ту саму клітинку, що і гравець команди, яка протиставляється, той противник негайно видаляється з бою. Гравець, який щойно перемістився, продовжується як завжди. Це єдиний механізм, який виводить гравців з битви, а оволодіння ним - запорука перемоги!
Якщо в комірці є кілька ворожих гравців, до яких гравця просто перемістилися, то всі ворожі гравці будуть видалені. Нічого не відбувається, якщо два гравці в одній команді займають одну і ту ж клітинку.
Виграв битву
Бій закінчується після того, як були зроблені всі 2048 рухів або коли в одній команді немає гравців. Перемагає команда з найбільшою кількістю гравців, що вижили. Це нічия Якщо обидві команди мають рівну кількість гравців, що вижили.
Як відповісти
У своїй відповіді вам потрібно вказати код JavaScript, який визначає, в який спосіб рухатиметься ваш піксель, коли його закликають.
У першому зразковому зразку коду у вашій відповіді (ті, які мають 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
прекрасно.
Параметри
Перші 7 функціональних параметрів moveMe
дають інформацію про стан бою:
move
це ціле число, яке починається з 1 і з кроком після кожного ходу, поки воно не стане 1024 на останньому кроці вашої команди.x
ваша поточна позиція x, ціле число від 0 (крайній зліва) до 127 (крайній правий край).y
ваша поточна y-позиція, ціле число від 0 (верхнє) до 127 (найнижче).tCount
- поточна загальна кількість гравців, що вижили у вашій команді.eCount
- поточна загальна кількість гравців, що вижили в команді противникаtNear
- це список поточних гравців, які вижили у вашій команді, на відстані менше 16 пікселів (евклідова відстань). Кожен елементtNear
представляє собою об'єкт зx
,y
іid
властивостями:
x
- х позиція іншого гравцяy
- y позиція іншого гравцяid
- ідентифікаційний номер користувача PPCG іншого гравця (як ціле число)eNear
точно так,tNear
за винятком того, що це список сусідніх ворожих гравців, а не товаришів по команді.
Коло у фрагменті - це обсяг tNear
та eNear
діапазон кожного гравця .
Повідомлення
Останні 2 параметри, setMsg
і getMsg
, мають дещо інше призначення.
Протягом бою кожен гравець має рядком до 64 символів, якими він може маніпулювати під час кожного ходу, щоб зберігати дані та потенційно спілкуватися зі своїми товаришами по команді. Кожен рядок гравця починається як порожній рядок. Коли гравець виймається з бою, їх рядок встановлюється на "X".
setMsg
є функцією одного аргументу, яка встановлює ваш рядок на передану рядок.- Якщо передане значення не є рядком, то ваша рядок не змінюється.
- Якщо значення - це рядок з більш ніж 64 символами, зберігаються лише перші 64.
getMsg
є функцією одного аргументу, яка приймає ідентифікаційний номер користувача PPCG (як ціле число) когось із вашої команди та повертає їх рядок.- Цей гравець може бути в будь-якій точці сітки. Їм не потрібно бути в радіусі 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 годин чи щось подібне, але не лише тому, що ви знайшли помилку.
Якщо ви видалите свою публікацію і вирішите її відновити, правило редагування все ще застосовується. (Контролер не може бачити видалені відповіді.)
При оголошенні нової змінної JavaScript ви повинні використовувати
var
ключове слово.
Це тому, що змінна, оголошена без,var
стає глобальною, а не локальною, тому було б легко випадково (або навмисно) зіпсуватись з контролером або вільно спілкуватися з іншими гравцями. Повинно бути зрозуміло, що ви не намагаєтеся обдурити.При оголошенні функцій найкраще також використовувати
var
ключове слово. тобто використовуватиvar f = function(...) {...}
замістьfunction f(...) {...}
. Я не зовсім впевнений, чому, але іноді, здається, це має значення.Ваш код не повинен працювати надто довго.
Якщо для запуску коду потрібно більше 15 мілісекунд, ваш піксель взагалі не переміститься. Однак, оскільки в JavaScript важко зупинити функції середнього виконання, всі сценарії гравців запускаються до завершення на кожному кроці, а час перевіряється після цього. Це означає, що якщо ваш код зробить якийсь інтенсивний час, усі , хто працює на контролері, помітять і будуть роздратовані.
Автоматичні дискваліфікації
Контролер автоматично дискваліфікує записи з цих причин:
- Користувач вже відповів.
- Зміни були внесені через 8 годин після створення.
- Користувач спеціально позначений як дискваліфікований.
Інші правила
У своєму коді ви не можете ...
- спроба отримати доступ або змінити код контролера чи іншого гравця.
- спроба змінити все, що вбудовано в JavaScript.
- намагання спілкуватися з іншими гравцями, за винятком використання
getMsg
таsetMsg
. - робити веб-запити.
- робити інакше шкідливі речі.
Я буду стежити за іншими неспортивними поведінками, такими як крадіжка дослівного коду з інших відповідей або використання ляльок-шкарпеток, щоб возитися з іншою командою.
Ви можете співпрацювати та планувати свою команду, але зберігайте змагання дружніми та етичними.
Якщо ви думаєте, що когось потрібно дискваліфікувати або вважаєте, що ви виправили причину дискваліфікації, залиште тут коментар для мене або в чаті, що стосується конкретного питання . Я не беру участь у конкурсі.
Запропонований формат відповідей
#[team color] Team - [entry title]
//function body
//probably on multiple lines
Explanations, notes, etc.
Назва запису - необов’язкове ім’я, яке ви можете вказати, якщо хочете. Контролер з цим нічого не робить.
Оцінка балів
Цей конкурс буде офіційно закінчений 19 квітня 2015 року. У цей день (близько 23:00 за UTC) я розпочну щонайменше 100 боїв (можливо, ще багато, залежно від тривалості битв). Команда, яка виграє найбільше, стане загальним переможцем. Якщо це нічия чи надзвичайно близько, я буду вести більше боїв, поки не стане ясно, що одна команда має перевагу.
(Ви можете відповісти, коли вирішиться переможець, але офіційний результат я не зміню.)
Я запускаю їх в останній версії Google Chrome на ноутбуці з 64-розрядним Windows 8.1, 4 ГБ та операційним чотирьохядерним процесором 1,6 ГГц. Переконайтеся, що ваш JavaScript працює в Chrome.
Перемога стосується передусім командної слави, але я прийму найвищу відповідь на команду-переможницю.
Протягом змагань майте на увазі, що аспект, заснований на команді, і той факт, що він повністю працює у фрагменті стека, є дуже експериментальним. Я покладаю великі надії, але не можу точно сказати, наскільки добре все буде працювати.
Поради:
- Ви можете перевірити записи, перш ніж відповісти. Відредагуйте текстове поле "Тестова запис" біля нижньої частини фрагмента стека та натисніть "Перезавантажити за допомогою тестового запису". Якщо він не порожній, він стає гравцем вказаної команди.
- Відповіді виконуються в масках, тому такі речі, як
alert
іconsole.log
не спрацюють.console
Об'єкт може бути використаний тільки в запису тесту. - Поставте прапорець "Налагодження повідомлень" у нижній частині фрагмента стека та подивіться на консоль браузера (F12). Під час ведення боїв друкується багато корисної інформації.
- Ви можете використовувати посаду Meta Sandbox як своєрідну область постановки. Відповіді там, звичайно, різні, ніж тут, і контролер там може застаріти.
- Оскільки це не офіційний стек-додаток , контролер може перестати завантажувати відповіді для вас, якщо перезапустити його більше 300 разів на день.
"Продовження" цього виклику: Блок побудови бот-стай!
Швидкі посилання
Повний екран Fiddle Controller Загальний чат Червоний чат (синій чат?) SandboxPost