ザウルスをアンドロイドにしてあげる
本館 Android Zaurus
2011-09-12 Top Favorites枠ありがとうございました。
DevQuiz 2011 - Go
解答晒し。誰が書いても似た様になるだろうけど。
1つだけ疑問。オリジナルのCountColorの引数がpngになっていたけど、image/pngをimportした時に、名前が衝突してpng.Decode()が呼び出せない。io.Readerの変数名がpngというのも気持ち悪いのでsrcに変更したけど、本当はどうすべきだったのか*1。
package main
import (
"fmt"
"io"
"strings"
"image"
"image/png"
/* add more */
)
func rgbaToInt(s image.Color) uint32 {
r, g, b, a := s.RGBA()
i32 := r + g<<8 + b<<16 + a<<24
return i32
}
func CountColor(src io.Reader) int {
hash := make(map[uint32] int)
dec, e := png.Decode(src)
if e != nil {
fmt.Println(e)
return -1
}
for y := dec.Bounds().Min.Y; y < dec.Bounds().Max.Y; y++ {
for x := dec.Bounds().Min.X; x < dec.Bounds().Max.X; x++ {
color := dec.At(x, y)
if hash[rgbaToInt(color)] != 1 {
hash[rgbaToInt(color)] = 1
}
}
}
return len(hash)
}
/* これらの関数は提出時に自動挿入されます。 */
func main() {
png := GetPngBinary()
cnt := CountColor(png)
fmt.Println(cnt)
}
DevQuiz 2011 - 一人ゲーム
解答晒し。やや長いのでpatebin。
- まず、ロボット的に最短に近い手数を出す。(ruledengine)
- 奇数かつ5で割り切れる数が1以上なら、取り除く(evalremove5)
- それ以外は半分
- 繰り返せば最短に近い手数が出そう
- ロボットが出した手数まで全探索(walkaroundengine)
- 単純な2分木探索
- 取り除かれた数字には-1をいれておくことで、配列のコピーを避ける
DevQuiz 2011 - スライドパズル
解答晒し。やや長いのでpatebin。
- 単純なA*(のハズ)
- 16個プロセスを立ち上げて分散
- mod16番目の問題をそれぞれが対応
- 1プロセスあたり100MB程度のメモリ消費
- キュー済みかどうかの判定がstrcmp
- ハッシュ関数が思いつかなかった
- 正解文字列生成にsort
- bubble sortを実装
- しかし、100問しか解けなかった
- 参考になりません
C言語だと再発明する車輪が多すぎです。
*1:@adakoda 情報: importでPNG "image/png"とするとエイリアスがつけられる。
コメントを書く
dsk
2011/09/22 15:30
import imgpng "image/png"ならimgpng.Decode()で衝突しません。