#iroha2019day3k. [iroha2019_day3_k]えそらんぐ
[iroha2019_day3_k]えそらんぐ
问题
世界上有很多方便易用的编程语言,如C/C++、Java、Python等。这些语言的出现大大降低了计算机的门槛,与晦涩难懂的汇编语言相比。
与这些语言相对立的是所谓的“难解编程语言(Esolang)”,比如Brainfuck、Lazy K和Piet等。这些语言的特点就是“非常难解”。例如在Brainfuck中,输出"Hello, World!"的程序如下所示(举例)。
+++++++++\[>++++++++<-\]>.<+++++++++\[>+++<-\]>++.+++++++..+++.<+++++++++\[>-------<-\]>----.<+++++++++\[>-<-\]>---.<+++++++++\[>++++++<-\]>+.<+++++++++\[>++<-\]>++++++.+++.------.--------.<+++++++++\[>-------<-\]>----.```
像这样,你完全看不懂写了什么。
Brainfuck程序只由8个符号组成,通过从单一的内存(数组)中读取和写入数据来执行操作。内存的引用地址由一个变量叫做“指针”来保存。每个符号代表的操作意义如下:
* `>`:增加指针值1
* `<`:减少指针值1
* `+`:增加指针指向内存的值1
* `-`:减少指针指向内存的值1
* `.`:输出指针指向内存的值对应的ASCII字符
* `,`:从输入中读取一个字符,将其ASCII码存入指针指向的位置
* `[`:当指针指向的内存的值为0时,跳转到对应`]`的后面
* `]`:当指针指向的内存的值不为0时,跳转到对应`[`的后面
知道了这些符号的意义,你是不是有点明白刚才的程序了呢?我可没有。
请使用Brainfuck编写一个程序,求两个三位正整数A和B的和。
Brainfuck解释器的规格如下:
* 内存元素的数量为1024,指针取值范围为大于等于0且小于1024的整数。
* 每个内存元素的值和指针都初始为0。
* 当指针或内存值变为下限时减1,会被替换为上限的值。超过上限也是同样的处理。
* 如果找不到对应的`]`或`[`的跳转目标,则输出错误并退出。
* 执行`,`操作时如果输入字符不存在,则输出错误并退出。
* 所有8种操作的总执行次数超过$2^{20}$次时,输出错误并退出。
所需字符的ASCII码列表:
```plain
'0' … 48
'1' … 49
'2' … 50
'3' … 51
'4' … 52
'5' … 53
'6' … 54
'7' … 55
'8' … 56
'9' … 57```
### 约束条件
* $A$和$B$是小于1000的正整数。
* $A$和$B$在每个测试用例中是随机生成的。
* * *
### 输入格式
本问题未直接给定输入,但输出的Brainfuck程序将以以下格式给出$A$和$B$。
$A$ $B$
如果它们不满足三位数的要求,前面会添加0。例如,`48`被输入为`048`,`7`被输入为`007`。另外,$A$和$B$之间有一个半角空格。
### 输出格式
输出一个Brainfuck源代码,用于计算$A$和$B$的和**(只输出一行)**。**除了末尾之外,不能包含换行或空格。**此外,Brainfuck程序的输出可以以0开头,但必须是一个连续的字符串,长度不超过4个字符。
* * *
### 解说
[解说](https://img.atcoder.jp/iroha2019-day3/editorial-K.pdf)