このコンテストは正式に終了しました。ブルーチームが勝ちました!
私は50回の戦闘で2 セットを自動実行しましたが、驚いたことに、Blueは100回すべてに勝ちました。統計を見ると、PhiNotPiとSp3000の協力的なエントリーが本当のヒーローだったことは明らかです。お疲れ様でした!実際、Blue Teamの他のすべてのメンバーを失格させた場合、Sphibotsは依然として非常に良い戦いをしました。レッドチームの一部の人々は、Sphibotを倒すことを計画していましたが、この努力は衰えたようです。申し訳ありませんがレッドチーム。
コンテストは正式に終了しましたが、それはあなたがもはや答えられないということではなく、私が公式の勝者を再宣言しないことを意味するだけです。どちらのチームも、楽しみのためだけにボットを送信し続けることができます。コントローラーは、今後のエントリーが中断しない限り、稼働したまま機能し続けます。
これはキングオブザヒルコンテストですが、全員が互いに戦う代わりに、赤と青の2つのチームが競います。勝者は1人だけです。
所属チームは、PPCGユーザーID番号によって異なります。これを見つけるには、画面上部のアバターをクリックして(ログインする必要があります)、開いたページのURLを確認します。後の番号users/
はID番号です。
https://codegolf.stackexchange.com/users/[id number]/[display name]
https://codegolf.stackexchange.com/users/26997/calvins-hobbies
この数値は、Stack Exchangeサイトごとに異なることに注意してください。
あなたのIDが偶数なら、あなたはレッドチームにいます。
あなたのIDが奇数なら、あなたはブルーチームにいます。
チームを変更する方法はありません。
チームと協力して、すべてのユーザーが戦場である128×128グリッドでチームの色の「ピクセル」を制御するようなバトルロイヤルのような他のチームを倒そうとする必要があります。ピクセルは動き回り、チームメイトと通信し、他のチームのピクセルを取り出します。誰でも任意の数のピクセルを作成できると手に負えなくなるため、すべてのユーザーがこの質問に対して1つの回答しか送信できません。
このスタックスニペット(このフィドル [ フルスクリーン ]の縮小版)は、コンテスト全体のコントローラーです。自動的に提出物を読み取り、それらが有効であることを確認し、チーム間の戦いをステージングします。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 x 384の実ピクセルであり、「ピクセル」は3 x 3です。
Pixel Team Battlebots-概要
プレイヤー
この質問に対する有効な各回答は、プレーヤーを表しています。(有効性の詳細については、「ルールと失格」を参照してください。)すべてのプレーヤーは、128×128セルの戦場で 1つの1×1セル(ピクセル)を制御できます。赤チームのプレイヤーには赤のピクセルがあり、青チームのプレイヤーには青のピクセルがあります。
バトル
戦いは間の戦いである、すべてのチームが選手の同じ数を持っていない場合でも、両チームの選手。戦闘は、すべてのプレイヤーが戦場のランダムな位置、つまり左上の(0,0)から右下の(127,127)までの任意の整数座標に配置されることから始まります。2人のプレーヤーが同じポジションでスタートしないことが保証されています。
動き
各バトルは2048手に分けられます。各移動中に実際にプレーヤーを移動できるのは1つのチームだけです。そのチームは赤から青に交互に前後するので、各チームは合計1024の動きをします(ゲームが早期に終了しない限り)。
最初に移動するチームは、コントローラーで設定する必要があるオプションです。
戦闘が自動実行されると、最初に移動したチームがすべての戦闘で交代します。
プレイヤーの動き
チームが移動すると、そのチームのすべてのプレイヤーは自分自身を移動するように求められます。これらの呼び出しは、移動ごとに完全にランダムな順序で実行されます。呼び出されると、各プレイヤーは戦闘の状態に関するデータを受け取り、どの方向に移動するかを決定できます。
すべての動きは最大1ピクセル離れています。これらの図の暗い円は、各色のプレーヤー(正方形)が移動できる位置を示しています。
どちらの色も任意の方向に斜めに移動したり静止したりできますが、赤のプレイヤーのみが左右に移動でき、青のプレイヤーのみが上下に移動できます。ファイと他の人に感謝します。
プレイヤーが戦場の外に出ようとする場合、またはどちらの方法で移動するかを決定するのに時間がかかりすぎる場合、または何らかのエラーが発生した場合、自動的に静止します。
移動に加えて、プレイヤーはターン中にチームメイトが書いたメッセージを読み、順番に読むことができるメッセージを書くことができます。これにより、チームコミュニケーションの粗い形式が可能になります。
回答として送信するコードは、プレーヤーを移動する方法と、読み書きするメッセージを決定するロジックです(「回答方法」を参照)。
敵プレイヤーの削除
プレイヤーが対戦チームのプレイヤーと同じセルに移動すると、その対戦プレイヤーはすぐに戦闘から除外されます。移動したばかりのプレーヤーは通常どおり続行します。これは、プレイヤーを戦闘から排除する唯一のメカニズムであり、それをマスターすることが勝利の鍵です!
プレイヤーが移動したばかりのセルに複数の敵プレイヤーがいる場合、すべての敵プレイヤーが削除されます。同じチームの2人のプレイヤーが同じセルを占領しても、何も起こりません。
戦いに勝つ
2048の移動がすべて完了するか、1つのチームにプレイヤーが残っていない場合、戦闘は終了します。生き残ったプレイヤーの数が最も多いチームが勝利します。両方のチームに同数の生き残っているプレイヤーがいる場合、それは同点です。
回答方法
あなたの答えでは、そうするために呼び出されたときにピクセルがどのように移動するかを決定する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
他のプレイヤーのx位置ですy
他のプレイヤーのy位置ですid
他のプレーヤーのPPCGユーザーID番号(整数)eNear
tNear
チームメイトではなく、近くの敵プレイヤーのリストであること以外はまったく同じです。
スニペットの円は、各プレイヤーtNear
とeNear
範囲です。
メッセージ
最後の2つのパラメーターsetMsg
とgetMsg
には、わずかに異なる目的があります。
戦闘中、各プレイヤーには最大64文字の文字列があり、データを保存してチームメイトと通信する可能性があるすべての移動中に操作できます。各プレイヤーの文字列は、空の文字列から始まります。プレイヤーが戦闘から除外されると、そのストリングは「X」に設定されます。
setMsg
文字列を渡された文字列に設定する1つの引数関数です。- 渡された値が文字列でない場合、文字列は変更されません。
- 値が64文字を超える文字列の場合、最初の64文字のみが保持されます。
getMsg
は、チームの誰かのPPCGユーザーID番号(整数)を受け取り、その文字列を返す1つの引数関数です。- そのプレーヤーはグリッド内のどこにいてもかまいません。16ピクセルの半径内にある必要はありません。
undefined
指定されたIDが見つからない場合に返されます。
提出例
このプレイヤーは、左に敵がいる場合は上下に移動し、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時間のマークまたはそのようなものの後、あなたの投稿を不注意に編集した場合にこれを与えます。
投稿を削除し、削除を取り消すことを選択した場合、編集ルールは引き続き適用されます。(コントローラーは削除された回答を見ることができません。)
新しいJavaScript変数を宣言するときは、
var
キーワードを使用する必要があります。
これは、変数なしで宣言された変数がvar
ローカルではなくグローバルになるため、誤って(または意図的に)コントローラーをいじったり、他のプレイヤーと自由に通信したりするためです。あなたが不正行為をしようとしていないことを明確にする必要があります。関数を宣言するときは、
var
キーワードも使用するのが最善です。すなわち、のvar f = function(...) {...}
代わりに使用しますfunction f(...) {...}
。理由は完全にはわかりませんが、時々違いを生じるようです。コードを長時間実行しないでください。
コードの実行に15ミリ秒以上かかる場合、ピクセルはまったく移動しません。ただし、JavaScriptでは実行中に機能を停止することは難しいため、すべてのプレーヤースクリプトは移動ごとに完了まで実行され、その後に時間がチェックされます。これは、コードが時間のかかることをすると、コントローラーを実行しているすべての人が気づいてイライラすることを意味します。
自動失格
これらの理由により、コントローラーは自動的にエントリーを失格にしました。
- ユーザーはすでに回答しています。
- 編集は、作成後8時間を超えて行われました。
- ユーザーは特に失格とマークされます。
その他の規則
あなたのコードではあなたはできないかもしれません...
- コントローラーまたは他のプレーヤーのコードにアクセスまたは変更しようとします。
- JavaScriptに組み込まれているものを変更しようとします。
getMsg
およびを使用しない限り、他のプレーヤーと通信しようとしsetMsg
ます。- Webクエリを作成します。
- そうでなければ悪意のあることを行います。
他のアンサーからコードを逐語的に盗んだり、ソックパペットを使用して他のチームをいじったりするなど、他のスポーツマンらしくない振る舞いに目を光らせます。
チームと協力して計画を立てることはできますが、コンテストは友好的で倫理的なものにしてください。
誰かが失格する必要があると思う場合、または失格した理由を修正したと思う場合は、ここにコメントを残すか、質問固有のチャットにコメントを残してください。私はコンテストに参加していません。
推奨される回答形式
#[team color] Team - [entry title]
//function body
//probably on multiple lines
Explanations, notes, etc.
エントリのタイトルは、必要に応じて付けることができるオプションの名前です。コントローラは何もしません。
得点
このコンテストは2015年4月19日に正式に終了します。その日(UTC午後11時ごろ)に少なくとも100回の戦闘を自動実行します(戦闘の所要時間に応じてさらに多くの戦闘を実行します)。最も勝ったチームが全体的な勝者になります。同点の場合、または非常に近い場合、1つのチームに優位性があることが明確になるまで、さらに戦闘を行います。
(勝者が決定した後に答えることができますが、公式の結果は変更しません。)
Windows 8.1 64ビット、4 GB RAM、1.6 GHzクアッドコアプロセッサを搭載したラップトップで、最新バージョンのGoogle Chromeで実行します。JavaScriptがChromeで動作することを確認してください。
勝利は主にチームの栄光に関するものですが、私は勝利したチームで最高の投票結果を受け入れます。
コンテスト全体を通して、チームベースの側面と、それが完全にスタックスニペットで実行されるという事実は非常に実験的であることに留意してください。私は高い希望を持っていますが、物事がうまくいくかどうかは確かに言えません。
ヒント:
- 回答する前にエントリをテストできます。スタックスニペットの下部にある[テストエントリ]テキストボックスを編集し、[テストエントリで再読み込み]をクリックします。空でない場合、指定されたチームのプレイヤーになります。
- 以下のようなものので回答は、マスクされた範囲内で実行されている
alert
とはconsole.log
動作しません。console
オブジェクトは、テストエントリに使用することができます。 - スタックスニペットの下部にある[デバッグメッセージ]を確認し、ブラウザのコンソール(F12)を確認します。戦闘の実行中に、多くの有用な情報が印刷されます。
- Meta Sandboxの投稿は、一種のステージングエリアとして使用できます。もちろん、ここでの答えはこことは異なり、コントローラーが古くなっている可能性があります。
- これは公式のStack Appではないため、1日に300回以上再起動すると、コントローラーは回答の読み込みを停止する場合があります。
この課題の「続編」:ブロックビルディングボットの群れ!
クイックリンク
Fiddle Controller フルスクリーン General Chat Red Chat (Blue Chat?) SandboxPost