Skip to content

Instantly share code, notes, and snippets.

@permil
Created June 12, 2014 17:03
Show Gist options
  • Save permil/52c82884624598829f59 to your computer and use it in GitHub Desktop.
Save permil/52c82884624598829f59 to your computer and use it in GitHub Desktop.
"use strict";
/*
PlayerName="permil"
【感想・作戦・工夫した点など】
勝率が下がる一方なので諦めて戻しました・・・(~_~;)
調整の可能性があるためコピペが多いままですがご容赦ください。
基本ロジックは過去の戦歴から統計を取り、直近数手と同じ進行が過去にあった場合には、
「相手がその次に出していた手に勝てそうな手」を出す、です。
評価順は、
1. 自分と相手の過去3手
2. 相手の過去3手
3. 自分と相手の過去2手
4. 相手の過去2手
5. 当てはまらなければG
1〜4により、「相手の直近数手から次の手を予測」するようなアルゴリズムや、
「相手を見ずに一定のパターンを繰り返す」ような相手に勝つことを期待しています。
また5により、「各手の割合が1:1:1に近くなる」ような相手からも細かく得点を奪い、
合計得点で上回ることを期待しています。
*/
function play(h)
{
var len = h[0].length;
if(len<3) { return "PGP"[len] }
var hist2 = {};
var hist3 = {};
var hist2_en = {};
var hist3_en = {};
for(var i=0;i<len;i++) {
if(i<len-2) {
var me = h[0][i] + h[0][i+1];
var en = h[1][i] + h[1][i+1];
var both = me + en;
if(!hist2_en[en]) { hist2_en[en]={'G':0,'C':0,'P':0}; }
if(!hist2[both]) { hist2[both]={'G':0,'C':0,'P':0}; }
hist2_en[en][h[1][i+2]]++;
hist2[both][h[1][i+2]]++;
}
if(i<len-3) {
me = me + h[0][i+2];
en = en + h[1][i+2];
var both = me + en;
if(!hist3_en[en]) { hist3_en[en]={'G':0,'C':0,'P':0}; }
if(!hist3[both]) { hist3[both]={'G':0,'C':0,'P':0}; }
hist3_en[en][h[1][i+3]]++;
hist3[both][h[1][i+3]]++;
}
}
return select(hist3[h[0][len-3] + h[0][len-2] + h[0][len-1] + h[1][len-3] + h[1][len-2] + h[1][len-1]]) ||
select(hist3_en[h[1][len-3] + h[1][len-2] + h[1][len-1]]) ||
select(hist2[h[0][len-2] + h[0][len-1] + h[1][len-2] + h[1][len-1]]) ||
select(hist2_en[h[1][len-2] + h[1][len-1]]) ||
'G';
}
function select(hist) {
if(!hist) { return null; }
if(hist['G']==0) {
return (hist['P']==0) ? 'G' : 'C';
}
if(hist['P']==0) {
return (hist['C']==0) ? 'P' : 'G';
}
if(hist['C']==0) {
return 'P';
}
return 'G';
}
// イベントを受け取り、グーチョキパーのどれを出すかを返信するための仕組みです。
self.addEventListener('message', function(e) {
self.postMessage( play(e.data.split(",")) );
}, false);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment