2013年2月8日金曜日

どうぶつしょうぎカップの棋譜

第23回1DAYトーナメント・どうぶつしょうぎカップのページに 同大会での棋譜がある。

棋譜はこのページで対局ごとに Flash で再生できるのだが、 データ自体は、 http://www.liblog-sns.jp/doubutsu/XXX.txt という形式で入っている。
対局は4局同時対局で7局目まであるので、XXXの部分は、 101~104、・・・、161~164まで計28局分。

どうぶつしょうぎカップは第33回1DAYトーナメントでも開催されているが、こちらの棋譜は見当たらなかった。


データの中身を見てみよう。

一局分のデータはこんな感じ
sente=大地&gote=はな&te1=c3k&te2=a2k&te3=b2p&te4=b2z&te5=b3z&te6=c3z&te7=c3l&te8=b2k&te9=a3zt&te10=b3k&te11=b3l&te12=a2zt&te13=a4l&te14=c2l&te15=b4l&te16=b3pt&te17=b2z&te18=b4cn&te19=a3l&te20=b3z&te21=c3p&te22=b1l&te23=b4l&te24=a2l&te25=a3p&te26=b3l&te27=a2p&te28=a4k&te29=end&te30=&name=black


先手と後手の名前があって、あとは te1 から実際の手が並んでいる。

  • 最初の二文字が座標(左からABC、上から1234)
  • 次がコマ( l:ライオン、k:きりん、z:ぞう、p:ひよこ、c :にわとり)
  • 4文字目の t は持ち駒から打ったことを表す。
  • 4文字目の n はコマが成ったことを表す。常ににわとりなので XXcn
  • 4文字目がそれ以外の時には、盤上の同じ種類のコマが同じ場所に進めるときのコマの動いた方向。
    u :上、d:下、l:左、r:右、urとか dlとかの2文字組み合わせはななめ方向。
  • 終局したらend。千日手の場合どうなのかは不明。
  • name パラメータは何に使っているのか不明。全局 black だった。



早速、Google Apps Script で、Google SpreadSheet に読み込んでみた。
Script はこんな感じ。
function loadKifu() {
  const BASEURL = "http://www.liblog-sns.jp/doubutsu/";
  const SUFFIX = ".txt";
  const KIFUNO_ARRAY = [
    "101", "102", "103", "104", "111", "112", "113", "114",
    "121", "122", "123", "124", "131", "132", "133", "134",
    "141", "142", "143", "144", "151", "152", "153", "154",
    "161", "162", "163", "164"];

  var kifuArray = [];
  var maxTe = 0;
  for (var i = 0; i < KIFUNO_ARRAY.length; i++) {
    var kifuObj = loadSingleKifu(
        KIFUNO_ARRAY[i], BASEURL + KIFUNO_ARRAY[i] + SUFFIX);
    maxTe = (maxTe > kifuObj.te.length) ? maxTe : kifuObj.te.length;
    kifuArray.push(kifuObj);
  }
  
  var header = ["No", "先手", "後手", "手数"];
  for (var i = 1; i <= maxTe; i++) header.push(i);

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet.appendRow(header);
  for (var i = 0; i < kifuArray.length; i++ ) {
    var kifu = kifuArray[i];
    if (kifu.te.length > 0) {
      sheet.appendRow([
        kifu.no,
        kifu.sente, kifu.gote,
        kifu.te.length].concat(kifu.te));
    }
  }   
}

function loadSingleKifu(no, url) {
  var response = UrlFetchApp.fetch(url);
  var kifuString = response.getContentText("Shift_JIS");
  var kifuParamArray = kifuString.split("&");
  var kifuParamMap = new Object();
  for (var i = 0 ; i< kifuParamArray.length; i++ ) {
      var kv = kifuParamArray[i].split("=");
      kifuParamMap[kv[0]] = kv[1];
  }

  var kifuObj = new Object();
  kifuObj.no = no;
  kifuObj.sente = kifuParamMap.sente;
  kifuObj.gote = kifuParamMap.gote;
  kifuObj.name = kifuParamMap.name;
  kifuObj.te = [];
  for (var i=1; i<100; i++) {
    var te = kifuParamMap[ "te" + i ];
    if (te === "end") break;
    kifuObj.te.push(te);
  }
  return kifuObj;
}

全28局が予定されていたがデータが入っていないものもあるのでデータは21局分。
読み込んだ結果を CSV にすると以下の通り。
次回、傾向を見てみよう。
No,先手,後手,手数,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41
101,北尾,大地,22,c3k,a2k,b2p,b2z,b3z,a3k,c2z,a2l,b3k,c1pt,b2k,b2l,b3pt,c2l,a3l,c3l,b4kt,b2zt,b2p,b3kt,b3k,c4l,,,,,,,,,,,,,,,,,,,
102,藤田,はな,37,b2p,b2z,b3z,a2k,c3k,c3z,c3l,b2pt,c2z,c1l,b3pt,b3p,b3z,b2k,c2pt,b1l,a3zt,b3k,b3l,a2zt,c4l,c2l,b2kt,c1l,a2k,c2l,b3zt,b1l,c3l,a1pt,a1k,a1l,b2z,b1l,c2zur,a2l,a3pt,,,,
103,泉對,大庭,37,b2p,b2z,b3z,a2k,a2z,a2l,b3kt,a3pt,c3ku,a4zt,b2k,b2l,b3pt,b1l,a3l,b3z,b3l,b2kt,a3l,c2pt,c4k,a2k,b4l,b2l,b3pt,b1l,a4l,c1l,a3zt,b1l,b2zt,b2k,b2z,a1zt,a1z,a2l,b2z,,,,
104,中田,武田,41,b2p,b2z,b3z,a2k,a2z,a2l,b3kt,c2zt,a3pt,b1l,a4l,c1l,b4l,b1l,c3ku,c3zdl,c3k,b2kt,c4l,b3pt,a4zt,c2zt,b3z,b3z,b3k,b3k,b3l,b2kt,b4l,c2l,c3kt,c1l,b3pt,c2k,c2k,c2l,b2kt,c1l,c3l,b1zt,c2zt
111,大庭,北尾,21,b2p,b2z,b3z,c2pt,a3pt,c1z,c2z,c2l,c3k,b1l,b3l,b2z,a2pt,a4zt,a4l,a2k,a2p,a3pt,b3l,c3z,c2z,,,,,,,,,,,,,,,,,,,,
113,中田,はな,15,c3k,a2k,b2p,b2z,b3z,c3z,c3l,b2pt,a2z,a2l,c2l,b1kt,a3pt,a1l,a2kt,,,,,,,,,,,,,,,,,,,,,,,,,,
114,泉對,武田,24,b2p,b2z,b3z,a2k,a2z,a2l,b3kt,c2zt,a3pt,b1l,c3ku,b3zdl,b3k,c2kt,a4l,c3z,b4zt,b2z,b2k,b2k,b3zt,b3k,b3l,b2p,,,,,,,,,,,,,,,,,
122,中田,藤田,23,c3k,a2k,b2p,b2z,b3z,a3z,a4l,b2z,a2z,a2l,b3k,a3pt,b4l,c3zt,c3k,c3z,c3l,b2kt,b3zt,b3k,c2l,b2zt,b1zt,,,,,,,,,,,,,,,,,,
123,大庭,大地,16,b2p,b2z,b3z,a2k,a2z,a2l,b3kt,c2zt,c3kr,b3pt,a4l,c3zdl,a3pt,b2l,c3k,b4kt,,,,,,,,,,,,,,,,,,,,,,,,,
124,はな,泉對,30,c3k,a2k,b2p,b2z,b3z,c3z,c3l,b2kt,a2z,a2l,a4pt,c2pt,c4l,b3zt,b4l,b1l,a3kt,a2z,b3zt,b3z,b3k,b3k,b3l,a2zt,c4l,c3kt,b4l,b3k,c4l,c3p,,,,,,,,,,,
131,北尾,はな,28,c3k,a2k,b2p,b2z,b3z,a3k,a4pt,c3z,c3l,b3kt,b3l,c2zt,c4l,b3k,b4zt,b2l,c3kt,c1pt,a3z,a3k,a3p,a3l,b4k,b3zt,b3k,b3z,c3l,c2p,,,,,,,,,,,,,
132,藤田,泉對,20,b2p,b2z,b3z,a2k,c3k,a3k,c2z,a2l,b3pt,c3z,c3l,a4k,b2p,a3l,b1cn,c4kt,c4l,b4k,c3l,a4l,,,,,,,,,,,,,,,,,,,,,
133,大庭,武田,25,b2p,b2z,b3z,a2k,c3k,a3z,a4l,b2l,c2k,a1l,a2z,a2l,b3kt,b2zt,a3k,a3z,b3zt,b1l,a3l,a2pt,a2z,c2l,b3zt,c3l,c4pt,,,,,,,,,,,,,,,,
141,北尾,藤田,29,c3l,b3p,b3z,b2z,b4l,a3pt,c2pt,a2k,a2z,a2l,b3kt,b1zt,c1cn,c1zur,a3k,a1l,b3pt,b2pt,c3k,b3p,b3l,a2pt,a4k,b2z,a3pt,a3z,a3k,a3p,b2z,,,,,,,,,,,,
143,中田,泉對,21,b2p,b2z,b3z,a2k,c3k,a3k,c2z,a2l,b3k,b3k,b3z,b1l,c2kt,a2pt,b2k,b2l,c3zt,a1l,a3pt,b2kt,a2p,,,,,,,,,,,,,,,,,,,,
144,武田,大地,18,b2p,b2z,b3z,a2k,c3k,a3k,c2z,a2l,b3k,c1pt,a4pt,a4k,a4l,a3pt,a3k,a3z,b3z,b2l,,,,,,,,,,,,,,,,,,,,,,,
151,北尾,中田,20,c3k,a2k,c4k,b3p,b3z,b2z,a2z,a2l,b3kt,c2zt,a3pt,b1l,b2k,b2l,c3zt,b1l,a4l,b3kt,b4z,b2l,,,,,,,,,,,,,,,,,,,,,
152,大庭,藤田,21,b2p,b2z,b3z,a2k,c3k,a3k,c2z,a2l,a4pt,c3z,c3l,a4k,b3z,b1l,c2zt,a1l,a4z,b2kt,b3zu,b3k,b3z,,,,,,,,,,,,,,,,,,,,
153,はな,武田,22,c3l,a2k,b2p,b2z,b4l,a3z,b3l,b2z,c3k,a3k,b4l,a4k,a4l,c3z,b3l,c2zt,c4l,b4kt,c3l,b3k,c4l,c3pt,,,,,,,,,,,,,,,,,,,
162,武田,藤田,15,b2p,b2z,b3z,a2k,c3k,a1l,c2k,a3z,c3l,b2k,c1k,b1pt,a4pt,b3k,b3l,,,,,,,,,,,,,,,,,,,,,,,,,,
164,大地,はな,28,c3k,a2k,b2p,b2z,b3z,c3z,c3l,b2k,a3zt,b3k,b3l,a2zt,a4l,c2l,b4l,b3pt,b2z,b4cn,a3l,b3z,c3p,b1l,b4l,a2l,a3p,b3l,a2p,a4k,,,,,,,,,,,,,


0 件のコメント:

コメントを投稿