文字介面終端機會有序列埠(用來與外部資料作交換)、鍵盤、螢幕、處理器與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| +----------+
原文出處
沒有留言:
張貼留言