September 12, 2011

Google Developer Day 2011:DevQuiz解答晒し大会(2)

分野別問題(1) Web Game

24問目くらいまでは手で解いていたが、さすがにめげて、素直にChrome Extensionを拡張して解いた。

方針は、カードを順番にめくっていって、まだ出ていないカードなら色と位置を記録、すでに出てきたカードならペアになるカードをめくっていくというもの。1 passで解けるので楽といえば楽。

var openElement = function(id) {
    var element = document.getElementById(id);
    if (element == null) {
	return null;
    } else {
	var myevent = document.createEvent('MouseEvents');
	myevent.initEvent('click', false, true);
	element.dispatchEvent(myevent);
	return 'color' + element.style.backgroundColor;
    }
}

var color = {};
var i = 0;

alert('Start');

while(true) {
    var elementId = 'card' + i;
    var elementColor = openElement(elementId);
    if (elementColor == null) {
	break;
    }
    
    if (color[elementColor] == undefined) {  // 1枚目が未知のカード
	color[elementColor] = elementId;
	i = i + 1;
	elementId = 'card' + i;
	elementColor = openElement(elementId);
	if (color[elementColor] == undefined) { // 2枚目が未知のカード
	    color[elementColor] = elementId;
	} else { // 2枚目が既知のカード
	    var elementId1 = color[elementColor];
	    openElement(elementId);
	    openElement(elementId1);
	}
    } else { // 1枚目が既知のカード
	elementId = color[elementColor];
	openElement(elementId);
    }
    i = i + 1;
}
alert('Solved!!!');