GDD2011JP DevQuiz 私の書いた回答コードその1
今年の11月に、Google Developer's Dayというイベントがあります。
一昨年までは先着順で瞬間的にチケットがなくなっていたらしいです(参加してないので知りませんが)
昨年から参加者には基本的に「開発者向けクイズを解く」ことが課せられるようになりました。その得点上位のひとから順に、入場の権利が与えられるのです。開発者向けイベントなのだから、合理的ですね。
昨年にひきつづき、今年も挑戦しました。各問題のために書いたコードをここにだしておきます。まずは、簡単なほうの問題5つのうち、私がといた3つから。
(この5つの問題は、2つだけ点数にカウントされるのです)
Web Game
シンプルな神経衰弱ゲームです。カードはクリックすることでめくることができます。全 64 セットを解くことで問題クリアとなります。
色が違うだけのカードが、最大1024枚出てくる神経衰弱。これを手でやろうなんていうプログラマはほとんどいないでしょう。
親切なことに、「ヒント」としてGoogle Chromeの機能拡張の例が出ています。これをベースに使えばとても簡単。JavaScriptでDOMさわってクリックして色チェックして覚えて、というだけOKです。
manifestを含むコードはここに置いています。
https://gist.github.com/1213056
Go!
Go 言語で、PNG 画像を入力として受け取り、その画像が何色使っているかを返す関数func CountColor(png io.Reader) intを実装してください。PNG 画像は io.Reader 型で与えられます。なお、入力の画像は R G B の各色の値が 0 から 255 までの 256 段階のいずれかであり、不透明(アルファチャンネルの値が常に 255)であることが保証されています。
これも、goのimage/pngライブラリを使えば実に簡単です。
一人ゲーム
数がいくつか与えられます。なるべく少ない手数で数を全て取り除いてください。あなたは 1 手で、
- 全ての数を半分にする(端数は切り捨て)
- 5 の倍数 (0 を含む) を全て取り除く
のどちらかの操作をすることができます。
簡単簡単、とおもったらちょっとだけひっかかりました。
「5で割りきれてかつ2で割りきれない数が残っている」ときに、その数を含めて5の倍数を取り除くのが良い場合と、良くない場合があるのです。
結局、こんなコード書きました。幅優先探索。
- キューから取り出した数セットの要素すべて5でわりきれれば終了
- 要素のなかに5で割り切れるが2で割りきれないものがあったら、5の倍数を取り除いたものをキューに入れる
- 全要素を2で割ったものをキューに入れる