DevQuizに参加しました(2)
Web Game
次はWeb Gameを解きました。
神経衰弱ができるWebページクリアすればOK。でも、この神経衰弱、カードは色を塗ってあるだけ。人間の目にはほとんど区別できない似た色のカードがあったり、枚数が異常に多かったりでとても人間が解くのは不可能。というわけでプログラミングで解きましょう、というクイズ。
オススメのChrome Extensionで解きました。
function clickCard(card) { var myevent = document.createEvent('MouseEvents'); myevent.initEvent('click', false, true); card.dispatchEvent(myevent); } function getColorNo(colorstr) { var pattern = /[0-9]+/g; var bai = 1; var result = 0; while((res = pattern.exec(colorstr)) !== null){ result += res * bai; bai *= 256; } return result; } var elements = document.getElementsByTagName('div'); var cards = []; for(var i = 0; i < elements.length; i++) { var elm = elements[i]; clickCard(elm); cards.push({element:elm, color: getColorNo(elm.style.backgroundColor)}); } var unopens = []; for(var i = 0; i < cards.length / 2; i++) { var card1 = cards[i * 2]; var card2 = cards[i * 2 + 1]; if (card1.color !== card2.color){ unopens.push(card1); unopens.push(card2); } } var message = ''; unopens.sort(function(a, b){ return a.color - b.color; }); for(var i = 0; i < unopens.length; i++) { var elm = unopens[i].element; clickCard(elm); message += unopens[i].color + "\n" }
全部のカードをクリックして、色を把握し、色順で並べ替えてクリック順を割り出しました。
あっという間にカードがめくれるのを見るのは面白かったです。
最初のクリックで色が揃ったものを把握して、無駄なクリックをしないようにしました。