3148 ASCII Art

Last-modified: 2010-04-30 (金) 09:46:50

原文


時間制限:2000ミリ秒
メモリ制限:65536KB

アスキーアート

問題

アスキーアートは、ASCII文字を格子状に並べて絵を描くアートである。様々なスタイルのアスキーアートがあるが、ここでは特に有名なもので、次のようなものに興味がある。つまり、文字の種類は、絵の対応する領域の濃さをあらわす。

あなたはデモプログラムとして、中が塗られた多角形をASCII文字の矩形格子で表現するプログラムを書く必要がある。これは以下のようなプロセスを踏む。

OXYを直交座標系とし、OXは右を、OYは上を指すとする。描画キャンバスの範囲は(0,0) - (w,h) の矩形である。キャンバス上のピクセルは、0≦x<wと0≦y<hなる整数x,yを用いて、(x, y) - (x + 1, y + 1)なる正方形であらわされる。自己接触や自己交差のない(ただし凸集合とは限らない)多角形がキャンバスに塗られる。このプロセスによって、各ピクセルは部分的に塗られる。各ピクセルはその中の塗られた部分の割合によって、以下の表に従ってASCII文字で表現される。

ピクセルの塗られた部分の割合文字の名称文字文字のASCIIコード
0%以上25%未満ピリオド.46
25%以上50%未満プラス記号+43
50%以上75%未満小文字のoo111
75%以上100%未満ドル記号$36
100%ハッシュ記号#35

このようにして得たASCII文字の格子は、上から下へ、左から右へ、の順番で出力される。

3148_1.png

入力

入力の最初の行は3つの整数n,w,h(3 ≦ n ≦ 100, 1 ≦ w, h ≦ 100) - それぞれ、多角形の頂点数、キャンバスの高さと幅をあらわす - が書かれている。
続くn行には多角形の頂点が時計回り順に書かれている。i番目の点は2つの整数xiとyi(0 ≦ xi ≦ w, 0 ≦ yi ≦ h)で表現される。

出力

与えられた多角形を描いたASCIIアートを、w文字の行をh行使って出力せよ。

入力例

6 8 7
7 6
1 0
1 7
5 5
2 4
2 3

出力例

.$+.....
.##$+...
.#$oo+..
.#+$o...
.##o....
.#o.....
.o......

出典

Northeastern Europe 2006