[Google][Developer][Day][2011] Web Gameのソースコード

毎年恒例のhttp://www.google.com/events/developerday/2011/が今年も開かれます。
今年も入場するためにはDevQuizを解きボーダーラインをクリアする必要があります。

今年は

  • ウォームアップクイズ
    • クイズ
  • 分野別クイズ
  • チャレンジクイズ
    • スライドパズル

という構成となりました。


まず、分野別クイズのWeb Gameを解いてみたのでそのソースコードを記してみます。
Web Gameと銘打っておりますが、いわゆる神経衰弱です。


コレぐらいなら手動でもまだしも

これは・・・ (^ω^;)


ということで(?)プログラムで解こうということになるわけです。


Web GameのページにはChrome Extensionのサンプルコード(開いたカードの色を
取得する)が配布されていました。(最初、その存在に気が付いていなかった。)
GoogleさんによるChrome Extensionへの誘いです。どうもありがとうございました。

以下が回答に用いたコードです。

var cardNum = $(".cell").length;

var cards = new Array(cardNum);

for(var i = 0; i < cardNum; i++) {
  conc.flip(i);
  var elm = document.getElementById("card" + i);
  var color = elm.style.backgroundColor
  cards[i] = color;
}

var cardsIdx = new Array(cards.length);
for(var j = 0; j < cards.length; j++) {
  var color = cards[j];
  for(var k = 0; k < cards.length; k++) {
    if(j == k) {
      continue;
    } else {
      if(color == cards[k]) {
        cardsIdx[j] = k;
      }
    }
  }
}
$("#answer").val(cardsIdx.join(","));
$("#solve").submit(); 

このコードをFirebugのコンソールに貼り付けて、問題毎に実行ボタンをポチポチする
という半自動コードです。
Firefox 6.0からはスクラッチパッドが搭載されているのでそれも使えそうですね!
Chrome Extension使ってません。Googleさん、ごめんなさい。


当初は、

  1. あるカードをひっくり返す。
  2. それ以降のカードを順々にひっくり返す。

といった総当り的なコードを書こうとしましたが、どうも上手く動作しませんでした。
(コーディングの問題ですね。ええ。)
そこで、せっかく配布してくれているサンプルコードですからダウンロードして
コードを見てみました。
カードの色の取得方法が分かったところで
「いっぺん全部ひっくり返して色を取得してから回答用の配列作ればいんじゃね。」
と思い作ったのが上記のコードです。


全自動にしたい気もしましたが、全64問だったのでそれぐらいのポチポチは勘弁して
やろうということで回答完了。