仕事
width w
とheightのイメージh
と2つの整数a <= w/2
およびを取りb <= h/2
、寸法のa
xを持つイメージのASCIIアート表現を出力するプログラムまたは関数を記述しますb
。
アスキーアートは、次の手順(または同じ出力を持つ別のプロセス)で生成する必要があります。
サイズを変更する
w
のxh
に画像を2a
X2b
。ピクセルの色(x, y)
リサイズ画像では、以下のコーナーを有する矩形内部原画像からすべてのピクセルの色の平均値に等しくなければなりません。(floor[x * w/2a], floor[y * h/2b]) (ceil[(x+1) * w/2a], ceil[(y+1) * h/2b])
色の赤、緑、青の成分の平均を取り、各成分をこの平均に設定することにより、サイズ変更された画像の彩度を下げる必要があります。
以下のルールに従って、ピクセルの2x2ブロックごとに文字を出力する必要があります。
- Let
e = 3 - floor[color/64]
、ここで、色は、左上のピクセルの色の赤成分を指します(範囲0..255)。ましょうf
、g
と、h
この値を参照しますが、それぞれ右上、左下、および右下の画素について。 - させる
z
の平均でe
、f
、g
、h
。 - 以下に対応する文字を出力します(白
3 - floor[color/64]
はゼロのピクセルを表し、灰色は非ゼロを表します)。 =スペースを出力(
)
または
=出力
"
の場合e (or f) >= 2
と'
そうでありません。または
=出力
,
の場合g (or h) >= 2
と.
そうでありません。または
=出力
-
または
=出力
;
=出力
\
=出力
/
=出力
J
=出力
L
=出力
7
=出力
P
z = 1
:出力*
。z = 2
:出力C
。z = 3
:出力#
。
- Let
その他の注意:上記の手順で取得したすべての平均では、整数除算を使用する必要があります(つまり、0への丸め)。
ライブラリを使用して画像を読み取ることはできますが、ライブラリをサイズ変更および彩度低下の手順に使用することはできません。
入力
プログラムは3つのデータを受け取ります。
- 画像。この画像は、任意の形式(PNG、PPMなど)にすることができます
- アスキーアートの幅(文字数)
- アスキーアートの高さ(文字数)
入力は、STDINを介して読み取られ、コマンドライン引数として渡され、変数として保存されます。
出力
プログラムは、画像から上記のプロセスを経て生成されたアスキーアートを出力します。各行は同じ幅(入力として渡される幅)でなければならず、余分なスペースを追加または削除することはできません。最後の行には末尾の改行が含まれる場合がありますが、これは必須ではありません。空白行(スペースのみの行)は省略できません。
例
すべての画像はウィキペディアから取得され、パブリックドメインにリリースされました。プログラムは、すべての画像と有効な入力に対して機能することが期待されています。
幅= 52、高さ= 25:
.-- ***-----。 -********** L .-- .-- 7 ---- P- .J ****************。。********* \。 、****************** L \ J ********** '。 -********************。J *********** L / J *********************; ./*************.L ; ********************* PJ **************; 7; 。********************** '。*************** ;; * ; **********************; ***************; J *。 *********************** ******* P ******** '**; C ********************* C ******* P; *******。**; C ********************** J ***************; **; C *********************; ****************。**; ********************** '*************** P; ** J ********************* P *************** / *** 。********************** 7 ************* 'J **; ; ******************** C "'P *********** PJ ***' 「7 ****************** C」 '********** P。** C; '* C *************'; *********-J ** CP '* C ********** P 7 ** 7 ** P /-**** P -* CCCCC * P- '7 ******** P' '---' --- '
幅:70、高さ:3:
---------------------------。.---------------- J ***************************** P -J ***************** *** / J **; ---------- ********* P --------- '-------------------- -'
幅:50、高さ:25:
.J --- .J * P --- J * L--。 J *** 'L -J ***********- J ****; **************** L ; ***** '.J ******************** J **** 7 ************************ P ** CC *; 。********* LJ *********** P- ** C * P 'J **********************- 7 * C * L **********************; J * C **; **********************; JC ** C **。; ; ******** CCC * C ** CCCC ** 「7 ***** L。7 ***** CCCCCC **** CC **」 -*****。-J-** C * C * CC ****** CC * ' ; ** CC ***; '** CCC ***** CCCC *; '-****--*** CCCCC ***- '------'
幅:26、高さ:17:
-、L J-** L .C# J '; * PL、C# " .PP 7. JC7P ;; * J ;; 、C'C; J; CC; L C "# * L 7-P; *; PC 7CL *** J * PC '# '7#C * C#P'; P JC#C- J#CCC#L .JC#CJCC ## C; ;#--#、CCC#CCCCCCCC ; * .- -.C; ; CCCCCCCCCCCC ; **** J ** L; CCCCCCCCCCCC ; *******; 'CCCCCCCCCCCP '*******' CCCCCCCCCCC ' 「* P-7 *」「CCCCP」- '---
これはcode-golfであるため、最短の回答が優先されます。