DevQuiz締め切ったのでコード公開 #gdd11jp
Web Game
ブラウザで神経衰弱をひたすら解くという問題。GoogleはChrome拡張を作らせたかったみたいだけどマニフェスト書くのも面倒だったのでuserscriptで作った。
ソース:http://bit.ly/nTWY8B
// ==UserScript== // @name devquiz2011_resolve_webgame // @namespace http://userscripts.org/users/kawaz // @description GDD2011のDevQuizのWebGameを解く // @include http://gdd-2011-quiz-japan.appspot.com/webgame/problem // ==/UserScript== var click = document.createEvent('MouseEvents'); click.initEvent('click', true, true); var cards = Array.prototype.slice.apply(document.querySelectorAll(".card")); var colors = cards.map(function(){return ""}); (function(){ //次の空き地を探す var i = colors.indexOf(""); if(i < 0) { //クリア return; } //空き地を開く cards[i].dispatchEvent(click); //開いたカードの色を取得 var c = cards[i].style.backgroundColor; var j = colors.indexOf(c); console.log("" + i + "," + j + "," + colors); if(j < 0) { //初めてなら覚える colors[i] = c; } else { //既出なら同色のカードを取る cards[j].dispatchEvent(click); if(!cards[i].style.backgroundColor) { cards[i].dispatchEvent(click); } //取ったカードにフラグ立て colors[i] = colors[j] = 'OK'; } //次手へ再帰ループ //arguments.callee(); setTimeout(arguments.callee, 100); //アニメーションを楽しむ為にゆっくり化 })();
実行風景も録画してみたので公開。デフラグぽくて見てると落ち着く(笑
Google Apps Script
GoogleDocsでプログラムが出来るよーというのがAppsScript(通称GAS)。これを使った問題で、与えられたJSONデータからスプレッドシートを作成するという問題。Javascriptで簡単に操作できるのでとても便利です。
var ss = SpreadsheetApp.getActiveSpreadsheet(); function resolveQuiz() { var qs = ss.getActiveSheet(); var q = qs.getRange(1, 1).getValue(); try { var json = JSON.parse(q); } catch($e) { Browser.msgBox("A1セルに問題のJSONを入力しておいて下さい"); return; } //シートを全削除 qs.setName("問題入力用"); ss.getSheets().forEach(function(s){ Logger.log(s.getSheetName()); if(s.getName() != qs.getName()) { s.activate(); ss.deleteActiveSheet(); } }); //回答シートを作成 json.forEach(function(v, i){ var sheet = ss.insertSheet(v.city_name); v.data.forEach(function(d,i){ sheet.getRange(i + 1, 1).setValue(d.capacity); sheet.getRange(i + 1, 2).setValue(d.usage); sheet.getRange(i + 1, 3).setFormula("=B"+(i+1)+"/A"+(i+1)); sheet.getRange(i + 1, 3).setNumberFormat("##.00%"); }); }); //問題入力用シートを削除 ss.getSheetByName("問題入力用").activate(); ss.deleteActiveSheet(); }