オフラインでリアルタイムに「どう書く」をやるイベント第二回の
http://atnd.org/events/30900
atnd を立てた。
で、問題の例を出しておく。難易度と分量はこれを目安に。
二値画像の回転
正方形の二値画像を時計回りに回転する。
画像フォーマットは、x:d のようになっており、x が画像の一辺の長さ(常に正方形)、d は16進表記の画像データ。
例えば、"3:5b8" であれば、3が一辺の長さを表す。
5b8 は 2進数で 0101 1011 1000 となる。
3x3 の画像なので必要なのは 9bit。右端の 3bit を捨ててから三桁ずつに分けて
010
110
111
となる。これが回転前の画像。
これを時計回りに 90度回すと
110
111
100
となる。一列に並べて、16進表記用に末尾に 0 を3つ足すと、
1101 1110 0000
となるので、もとめる答えは "3:de0" となる。
というのが今回のお題。
ただし:
- : の前にあるのは10進数。
- 不正な入力への対処は不要。
- 余ったから捨てる bit はゼロとは限らないが、回転後に末尾に足す bit はゼロ。
- 少なくとも 9x9 の画像に対処できること。
入力と出力の例
以下、「入力 → 出力」という形式で。(Qiita で表が書けないのが不満…)
- 3:5b8 → 3:de0
- 1:8 → 1:8
- 2:8 → 2:4
- 2:4 → 2:1
- 2:1 → 2:2
- 3:5d0 → 3:5d0
- 4:1234 → 4:0865
- 5:22a2a20 → 5:22a2a20
- 5:1234567 → 5:25b0540
- 6:123456789 → 6:09cc196a6
- 7:123456789abcd → 7:f1a206734b258
- 7:fffffffffffff → 7:ffffffffffff8
- 7:fdfbf7efdfbf0 → 7:ffffffffffc00
- 8:123456789abcdef1 → 8:f0ccaaff78665580
- 9:112233445566778899aab → 9:b23da9011d22daf005d40
ruby と C99 でそのうち解答例を書く予定。
コメントで解答例が出てます。
解答を見たくないかたは要注意。