2011年11月18日 星期五

337 - Interpreting Control Sequences

文字介面終端機會有序列埠(用來與外部資料作交換)、鍵盤、螢幕、處理器與RAM。

當一個字元被送到終端機的時候(透過鍵盤或序列埠),終端機上的軟體會判斷該字元為可顯示的字元(此時直接輸出到螢幕)或是控制字元,控制字元用來做類似將螢幕畫面清除、移動游標或改變字型的動作。

本題請你寫一個用於10x10大小的螢幕上的軟體,用來處理並顯示送到螢幕上的字元。螢幕的列與行被編號為0~9,控制字元以 ^ 表示,一個或兩個字元緊接著在 ^ 符號之後表示特殊的控制功能,所有功能如下所述:
^b
將遊標移動到該列的最前面。
^c
清除整個螢幕畫面,游標不動。
^d
如果可能的話將遊標移至下一列,直行位置不變。
^e
清除遊標所在位置之後該列的字元(包含游標上的字元),且游標位置不動。
^h
將游標位置移動到列編號0、行編號0的位置。
^i
切換到插入模式insert mode(請見下面說明)。
^l
如果可能的話將游標左移一行。
^o
切換到覆寫模式overwrite mode(請見下面說明)。
^r
如果可能的話將游標右移一行。
^u
如果可能的話將游標上移一列,直行位置不變。
^^
表示輸出字元^,輸出的結果視「輸入模式」或「覆寫模式」而定。
^##
##分別表示兩個0~9的數值,表示要將游標移動到哪一列、哪一行。
不會有不合法的字元被送到螢幕上,且游標不會超出螢幕的範圍。

當一個非控制字元被送到螢幕時,其顯示的方式視目前螢幕的顯示模式而定,當為「覆寫模式」時(這也是螢幕一開始的顯示模式),抵達的字元會取代游標所在的字 元。當螢幕為「插入模式」時,游標所在字元及其之後該列的字元向右移一位(該列最右邊的字元會遺失),且新的字元會被寫在游標所在位置上。在這兩種模式之 下,輸出一個字元後遊標皆會向右移動一位(如果可能的話)。

Input

輸入會有多組測試資料,每組資料的第一列有一個整數N表示接下來有N列資料,每列資料的每個字元應被視為螢幕的輸入字元,不會出現tab字元,且每列最後的換行字元也請忽略,而空白字元應被視為需顯示在螢幕上的字元,當N=0表示測式資料結束。

每組測試資料的一開始你必須假定螢幕是清空的(即顯示空白字元),且游標位於第0列第0行的位置。

Output

請對每組測試資料輸出資料編號,並輸出螢幕最後顯示的畫面,畫面必須被框起來,如範例資料所示。

Sample Input

7
This is bad^h^c
^05^^
^14/ \^d^b   /   \
^u^d^d^l^l^l^l^l^l^l^l^l
^r^r< ACM >^l^l^d/^b   \
^b^d    \ /
^d^l^lv
7
^i9^l8^l7^l6^l5^l4^l3^l2^l1^l0
^o^d^lThis is #1^d^bThis is #2
^d^bThis is #3^d^bThis is #4
^d^bThis is #5^d^bThis is #6
^d^bThis is #7^d^bThis is #8
^i^d^bThis is #9^d^bThis is #10
^54^e Hello^d^l^l^l^lWorld
0

Sample Output

Case 1
+----------+
|     ^    |
|    / \   |
|   /   \  |
|  < ACM > |
|   \   /  |
|    \ /   |
|     v    |
|          |
|          |
|          |
+----------+
Case 2
+----------+
|0123456789|
|This is #1|
|This is #2|
|This is #3|
|This is #4|
|This Hello|
|This World|
|This is #7|
|This is #8|
|This is #0|
+----------+

原文出處

沒有留言:

張貼留言