Problem
YDKはピクセルの色を操る能力を手に入れた!
早速その力を試してみよう。
なお、色の表現の形式にはいろいろな形式があるが、今回は24bit-RGB形式を扱うものとする(下図参照)。
000000000000000000000000
左から順にR(Red), G(Green), B(Blue)が1Byteずつ、計3ByteのRGBデータである。
Input/Output
Color command1 command2 : commandi quit
1行目に、24bit-RGB形式のデータが16進数表記で与えられる。
データは6桁, 0パディング(0埋め)の書式でで入力される。
以降、そのデータについての操作を指示するcommandが与えられ,
"quit"が入力の終端を表す。
commandは以下の4種類である。
update R G B
10進表記で与えられたRGB値に従って、それぞれの値を更新する。
ただし、YDKは気まぐれなので値が -1 の場合には、その色の更新は行わない。
disp 現在の色を16進表記で1行に出力する。 YDKは見やすくしたいので6桁, 0パディングでの書式で出力すること。 アルファベットは大文字のみを受け付ける。
shift N
右にN bit,論理右シフトする。Nが負数の場合は左にシフトする。
※今回は32bit以上の型を使用すれば気にすることはないが、論理右シフトと算術右シフトは異なる。 算術右シフトの場合は最上位bitが1のときには1で埋められるが, 論理右シフトは最上位bitにかかわらず0で埋められる。
reverse ネガポジ変換を行う。ネガポジ変換とは、下の図のような処理を指す。 RGBそれぞれを階調の最大値(今回は1Byteなので255)から現在の値を引いた値にする。 R = 255-R, G = 255-G, B = 255-B となる(後になって気づいたけど, もっと簡単な方法があります)。
ネガポジ変換の例 ※フリー素材を使用してます
Constraints
- Colorの入力は16進表記、アルファベットは大文字である。
- commandの数は105を超えない。
- -1 ≦ R, G, B ≦ 255
- R, G, B, Nの入力は10進表記
- -24 ≦ N ≦ 24
SampleIO
Sample Input1
6633EE disp update 0 -1 172 disp quit
Sample Output1
6633EE 0033AC
まずRGBの初期値が与えられる。
次に出力命令disp, 更新命令update, そして再び出力をする。
updateのが-1のときはその色を更新しないことと,出力は6桁0パディング(0埋め)をすることに注意せよ。
Sample Input2
11CC77 shift 4 disp shift -8 disp update 255 255 255 shift -8 disp quit
Sample Output2
011CC7 1CC700 FFFF00
11CC77を右に4bitシフトした後,それを左に8bitシフトする。
くれぐれも左シフトしたときに表示桁数が増えることのないように。
2018-04-03: わかりやすくするために"update 255 255 255, shift -8" を追加
Sample Input3
FF0055 reverse disp quit
Sample Output3
00FFAAネガポジ変換をする。
Sample Input4
1F2E3D disp update 254 85 -1 reverse disp update -1 -1 -1 reverse disp update 168 100 32 shift 1 reverse disp quit
Sample Output4
1F2E3D 01AAC2 FE553D ABCDEF