TopCoder

icube
baluteshih 好強 <(_ _)>

User's AC Ratio

61.5% (8/13)

Submission's AC Ratio

31.6% (67/212)

Tags

Description

1993年時,Urban Müller發明了一種叫做「Brainfuck」的語言(以下稱為「Brainf*ck」)。

Brainf*ck極為靈巧,雖然僅僅具備8個指令,卻符合「圖靈完全」思想,換句話說,任何一種程式語言做的到的事,Brainf*ck也做的到。

在Brainf*ck的環境當中,有一個以位元組為單位、初始化為0的記憶體空間,且有一個指標指向某一個記憶體位置(初始化時指向第一個記憶體位置)。

此外,還有用來輸出入的資料流各一個(可以視為stdin、stdout)。Brainf*ck所有的指令如下表所示:

指令說明對應的C程式碼
>指標加一ptr++;
<指標減一ptr--;
+指標所指向的記憶體空間的值加一(*ptr)++;
-指標所指向的記憶體空間的值減一(*ptr)--;
.把指標所指向的記憶體空間的內容輸出putchar(*ptr);
,輸入一個byte(ASCII碼)存到指標所指向的記憶體空間*ptr = getchar();
[如果指標指向的記憶體空間的值為零,向後跳轉到對應的]指令的次一指令處while (*ptr) {
]如果指標指向的記憶體空間的值不為零,向前跳轉到對應的[指令的次一指令處}

請寫一個Brainf*ck模擬器。

Input Format

輸入的一開始是Brainf*ck程式碼,一直到單獨一行的「@」符號為止(請不要把「@」當成程式碼)。

程式碼可能分成很多行,並會夾雜註解、空白等等。請忽略所有非指令的字元。

接下來有一個正整數T,代表程式要被執行的次數。

接著從下一行開始,所有的資料都是Brainf*ck語言的輸入。

程式碼的長度、記憶體使用量皆不會超過30,000,且程式會在合理的指令個數後結束。

Output Format

請輸出Brainf*ck程式模擬的結果。

Sample Input 1

+++++ +++++ initialize counter (cell #0) to 10
[ use loop to set the next four cells to
70/100/30/10
> +++++ ++ add 7 to cell #1
> +++++ +++++ add 10 to cell #2
> +++ add 3 to cell #3
> + add 1 to cell #4
<<<< - decrement counter (cell #0)
]
> ++ . print 'H'
> + . print 'e'
+++++ ++ . print 'l'
. print 'l'
+++ . print 'o'
> ++ . print ' '
<< +++++ +++++ +++++ . print 'W'
> . print 'o'
+++ . print 'r'
----- - . print 'l'
----- --- . print 'd'
> + . print '!'
> . print '\n'
@
1

Sample Output 1

Hello World!

Sample Input 2

----------[++++++++++>,----------]<[.<]++++++++++.
@
5
abcde
9876543210
!@#$%^*()_+
!dlroW olleH
Good morning.

Sample Output 2

edcba
0123456789
+_)(*^%$#@!
Hello World!
.gninrom dooG

Hints

※ 2010/07/23 範例測資更正,感謝 poloo5582。
※ 時限放寬,rejudged,感謝 shik。

Problem Source

原TIOJ1611 / Problem Setter: suhorng
Adapted from NTUJ 0014

Subtasks

No. Testdata Range Score
1 0 10
2 1 10
3 2 10
4 3 10
5 4 10
6 5 10
7 6 10
8 7 10
9 8 10
10 9 10

Testdata and Limits

No. Time Limit (ms) Memory Limit (VSS, KiB) Output Limit (KiB) Subtasks
0 1000 65536 262144 1
1 1000 65536 262144 2
2 1000 65536 262144 3
3 1000 65536 262144 4
4 1000 65536 262144 5
5 1000 65536 262144 6
6 1000 65536 262144 7
7 1000 65536 262144 8
8 20000 65536 262144 9
9 60000 65536 262144 10