PNGの圧縮アルゴリズムの重要な部分の1つはPaeth変換です。これは、(通常)より適切に圧縮されるように画像を変換します。この課題の課題は、ペース変換を計算するプログラムを作成することです。ペース変換の操作を以下に説明します。
ペースの変容
Paeth変換Xは、2次元配列の各メンバーから予測子を差し引きます。予測は、左(のアレイメンバーの元素であるA)、上部(B)、および左上(C)のXその値に対して最小の差を有しますA + B - C。
┼─┼─┼
│C│B│
┼─┼─┼
│A│X│
┼─┼─┼
いずれかがA、BまたはがC、範囲外となり、その値はここでは0に置き換えられてからの擬似コードであるPNGの仕様この予測値を計算する方法を概説:
function PaethPredictor (a, b, c)
begin
; a = left, b = above, c = upper left
p := a + b - c ; initial estimate
pa := abs(p - a) ; distances to a, b, c
pb := abs(p - b)
pc := abs(p - c)
; return nearest of a,b,c,
; breaking ties in order a,b,c.
if pa <= pb AND pa <= pc then return a
else if pb <= pc then return b
else return c
end
この課題では、配列のメンバーは0〜255の範囲の自然数です。Paeth変換の結果がその範囲外の値になる場合は、256を法としてその範囲の値に削減されます。
入出力
入力は、2から1023の範囲の2つの整数xとyで、変換する行列の幅と高さ、およびx × y要素の配列を示します。入力は、改行で終了する1つの空白文字で区切られた10進数としてフォーマットされます。この入力は次のようになります。
2 3 4 5 6 7 8 9
これは、エントリを持つ2 x 3の行列を表します。
4 5
6 7
8 9
出力は、数字が任意のゼロ以外の量の空白文字(スペース、水平または垂直タブ、ラインまたはフォームフィード)で区切られ、任意の量の空白文字。
入力はから受信されstdin、出力はに送信されstdoutます。これが不可能な場合は、入力のハードコーディングではない、入力の受信と出力の書き込みの別の方法を選択してください。
無効な入力が提示されたときのプログラムの動作は、この課題の一部ではありません。
審査と参照の実装
ANSI Cプログラムは、サンプル入力を生成し、インスタンスを解決し、ソリューションを検証するために提供されています。プログラム呼び出しgにGと、enerate入力sへの入力インスタンスをOLVEととvにV液の正確さをerify。
参照実装に問題があると思われる場合は、できるだけ早く修正できるようにお知らせください。
入力と出力の例
ご要望によります。
10 5 166 156 108 96 63 227 122 99 117 135 125 46 169 247 116 55 151 1 232 114 214 254 6 127 217 88 206 102 252 237 75 250 202 145 86 198 172 84 68 114 58 228 66 224 186 217 210 108 11 179
配列を表す
166 156 108 96 63 227 122 99 117 135
125 46 169 247 116 55 151 1 232 114
214 254 6 127 217 88 206 102 252 237
75 250 202 145 86 198 172 84 68 114
58 228 66 224 186 217 210 108 11 179
に変換されます
166 246 208 244 223 164 151 233 18 18
215 177 123 78 125 84 96 135 231 138
89 129 8 121 101 228 55 101 20 123
117 175 196 199 125 112 222 238 72 46
239 234 120 158 41 19 12 24 183 111
これは次のようにエンコードされます
10 5 166 246 208 244 223 164 151 233 18 18 215 177 123 78 125 84 96 135 231 138 89 129 8 121 101 228 55 101 20 123 117 175 196 199 125 112 222 238 72 46 239 234 120 158 41 19 12 24 183 111
勝利条件
この課題のために、入力の正しいPaeth変換を生成してそれらを書き出すプログラムを作成します。これはコードゴルフであり、ソースコードの文字数が最も少ないプログラムが勝ちます。他の人がそれが何をするかを見ることができるように、あなたの提出物に説明とあなたのコードの読みやすいバージョンを添付してみてください。