Ruby
C
勉強会
どう書く
yhpg

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

More than 5 years have passed since last update.

オフラインでリアルタイムに「どう書く」をやるイベント第二回の

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 でそのうち解答例を書く予定。

 

 

 

 

 

 

 

 

 

 

 

 

コメントで解答例が出てます。

解答を見たくないかたは要注意。