站神与最简单的语言

Time Limit
2s
Memory Limit
32768KB
Judge Program
Standard
Ratio(Solve/Submit)
0.00%(0/0)
Description:

站神在学习 C 语言的时候发现,C 语言有那么多的符号,甚至还要会26个英文字母!以及一大堆的数字和符号

站神最不喜欢英文字母了,于是为了方便站神他发挥自己强大的编程能力,于是站神发明了一种新的语言,站神将其命名为 Brain Fuck!(简称 BF 语言 )这种全新的语言甚至都不需要学会任何的英文字母,用 BF 语言写出来的代码,只会出现 8 种符号(><+-.,[])。

BF 语言是基于一个数组和一个指针来实现的。一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)

BF 语言的 8 个符号的定义如下

符号 含义
> 指针加一
< 指针减一
+ 指针指向的字节的值加一
- 指针指向的字节的值减一
. 输出指针指向的单元内容(ASCII码)
, 输入内容到指针指向的单元(ASCII码)
[ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处

如果使用 C 语言的方式来描述这些符号,则可以这样表述

符号 含义
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr = getchar();
[ while (*ptr) {
] }

而 BF 语言将从代码的开头开始运行,直到运行至代码最后一个字符结束

例如代码
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.就是一个能够在屏幕上输出Hello World!这样一个字符串

这是一种非常具有创新性的语言,你可以仅靠这四个字符来实现非常多的操作,例如加法只需要用6个字符就可以解决 ——[->+<] 把当前位置的值加到后面的单元中(破坏性的加,它导致左边的单元被归零)。

但是站神的 C 语言并不是那么的优秀,所以他没有办法为自己创建的这么强大的语言编写一个程序来运行 BF 语言。于是他请求你帮助他编写一个程序,用来运行 BF 语言。同时,他希望这个程序不仅能运行合理的 BF 语言的代码,还要能够识别出来这段代码是否会出现一些不合理的情况,例如数组越界,数值越界。同时,他不喜欢输出一些看不见的字符,所以每次输出时,必须保证这个字符是可见的。即此程序还需要满足以下条件

  • 当输入为 < 且当前指针就位于数组的第一个字节时,则输出 "Segment Fault"(不包括引号,下同),换行并终止当前程序
  • 当输入为 + 且当前指针所指向的值为 127 时,则输出 "Char Overflow",换行并终止当前程序
  • 当输入为 - 且当前指针所指向的值为 0 时,则输出 "Char Overflow",换行并终止当前程序
  • 当输入为 . 且当前指针所指向的值小于 32 或者大于 126 ,同时也不等于 10 时,则输出 "Char Unknown",换行并终止当前程序

Input:

输入仅一行,即所需要运行的 BF 语言的代码,长度不超过 3000。仅包含以下 7 个字符 ><+-.[] ,即不会出现 , 这个输入指令。保证输入的代码不会发生死循环,且总共处理的指令个数(每个 BF 语言的字符都是一个命令,考虑循环的展开后)不会超过 1000000,保证输入的字符串不会出现方括号嵌套的情况,即可能出现 [][] 但是不可能出现 [[]] 的情况,且保证能满足括号匹配

Output:

将 BF 代码的输出直接输出至控制台,同时保证以下条件也能正常运行

  • 当输入为 < 且当前指针就位于数组的第一个字节时,则输出 "Segment Fault"(不包括引号,下同),换行并终止当前程序
  • 当输入为 + 且当前指针所指向的值为 127 时,则输出 "Char Overflow",换行并终止当前程序
  • 当输入为 - 且当前指针所指向的值为 0 时,则输出 "Char Overflow",换行并终止当前程序
  • 当输入为 . 且当前指针所指向的值小于 32 或者大于 126 ,同时也不等于 10 时,则输出 "Char Unknown",换行并终止当前程序

Sample Input:
++++++++[->++++++++<]>+.+.+.<
Sample Output:
ABC
Hint:

对于代码 ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>. 其在运行结束后,数组内的前 5 个值分别为 0, 87, 100, 33, 10,并且指针指向最后一个字符,即值 "10" 上。同时,输出为 Hello World!


Submit