2011年9月29日 星期四

11956 - Brainfuck

你的朋友Bob最近買了一組可用「Brainfuck」程式語言控制的LED顯示器,但是直接在該LED顯示器開發、執行程式並不是很有效率,為了測試與除錯上的需要,他決定在PC上開發該顯示器指令集的轉譯器,但是他只會寫brainfuck程式語言,所以需要你來幫他完成這項工作。

顯示器的程式是一道道循序執行的指令,僅包含五個brainfuck指令:'>', '<', '+', '-', '.',請見下表說明。該顯示器的記憶體大小為100位元(byte),記憶體內容皆被初始化為0,並有一個指標暫存器(一開始指向最左邊的位元),當指標暫存器指向最右邊的位元時,在加1後變為指向最左邊的位元,反正亦然。每一個位元值則是在0到255之間作循環。

指令說明
>指標暫存器加1(指向右邊下一個位元)。
<指標暫存器減1(指向左邊上一個位元)。
+指標指向的位元值加1。
指標指向的位元值減1。
.輸出指標所指到的位元值。


INPUT

輸入的第一列有一整數T(T <= 100)表示測試資料的組數,接下來有T組測試資料,每組一列表示程式碼,每列長度不會超過100000個字元。

OUTPUT

每組測試資料輸出格式為"Case T: D",T表示測試資料編號,D表示該顯示器在執行完程式後的記憶體傾印資料(以16進制表示),每個位元須以空白字元隔開,請參考範例資料。請注意輸入與輸出的範例資料為了方便閱讀已被分為許多列,實際資料並非如此。

SAMPLE INPUT

1
..++<><<+++>>++++++++++++++++++++++++++>>>+++
<+...++<><<+++>>++++++++++++++++++++++++++>>>
+++<+...++<><<+++>>++++++++++++++++++++++++++
>>>+++<+.

SAMPLE OUTPUT

Case 1: 1F 00 20 03 1D 03 01 03 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 03 00

原文出處

沒有留言:

張貼留言