0900 - あーるじーびー操作

時間制限 1 秒 / メモリ制限 64 MB / 得点 3 / Writer Arumakan_ei1727 / x 5 / 統計 /


TLE
1sec
MLE
64MB
得点
3

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