LoginSignup
2

More than 5 years have passed since last update.

第2回 オフラインリアルタイムどう書くの参考問題

Last updated at Posted at 2012-07-23

オフラインでリアルタイムに「どう書く」をやるイベント第二回の
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 でそのうち解答例を書く予定。

 
 
 
 
 
 

 
 
 
 
 
 

コメントで解答例が出てます。
解答を見たくないかたは要注意。

 
 
 
 
 
 

 
 
 
 
 
 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2