User's AC Ratio

55.6% (5/9)

Submission's AC Ratio

41.1% (51/124)

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

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 Input #2
----------[++++++++++>,----------]<[.<]++++++++++.
@
5
abcde
9876543210
!@#$%^*()_+
!dlroW olleH
Good morning.

Sample Output

Sample Output #1
Hello World!

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

For Testdata: 0 ~ 0, Score: 10
For Testdata: 1 ~ 1, Score: 10
For Testdata: 2 ~ 2, Score: 10
For Testdata: 3 ~ 3, Score: 10
For Testdata: 4 ~ 4, Score: 10
For Testdata: 5 ~ 5, Score: 10
For Testdata: 6 ~ 6, Score: 10
For Testdata: 7 ~ 7, Score: 10
For Testdata: 8 ~ 8, Score: 10
For Testdata: 9 ~ 9, Score: 10
No. Time Limit (ms) Memory Limit (KiB) Output Limit (KiB)
0 1000 65536 262144
1 1000 65536 262144
2 1000 65536 262144
3 1000 65536 262144
4 1000 65536 262144
5 1000 65536 262144
6 1000 65536 262144
7 1000 65536 262144
8 20000 65536 262144
9 60000 65536 262144