Help us understand the problem. What is going on with this article?

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

 
 
 
 
 
 

 
 
 
 
 
 

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

 
 
 
 
 
 

 
 
 
 
 
 

Nabetani
横浜へなちょこプログラミング勉強会をやっていました。 / CodeIQ の出題者でした。 / 日経 WinPC に連載を持っていました(名義が違うけど) / Yokohama rb に半分ぐらい参加しています。 / twitter : http://twitter.com/Nabetani
https://nabetani.hatenadiary.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away