Yesterday evening, 0xSuu sent me a problem but which requires to write in brainfuck language. The complete problem is here.
The input will be a newline-terminated string. The first character
will be an ASCII digit. You need to output the entire line this
number of times, followed by a blank line.
For example, if the input string is "3 is the magic number" then
your program should print:
3 is the magic number
3 is the magic number
3 is the magic number
Yeah, you're working for these points.
Enter your program here:
I tried nearly 2 hours to solve it. But my mind was a mess that time, so I rewrote it just now. And it works.
Here is the brainfuck program. It's not the best practice, but it works.
> cell 0 is reserved
> cell 1 is reserved for count
, the first character# ASCII digit
[
>, read character
[ swap this cell with its next cell
-
>
+
<
]
after this swap# original cell value should be 0
> move to the next cell
---------- decrease 10# '\n' in brainfuck is 10 (in most case)
[ if the cell is not 0
++++++++++ increase 10# reset its original value
< move to the original cell
+ increase 1 manually# just for while loop
> move to the next cell
- decrease 1# because we just add 1 to original cell
[ loop until the next cell is 0
<
+
>
-
]
after this while loop# we reset the original cell to its original value
]
< but the ptr points to the next cell# we should move it to its left cell
]
< read completed# we are going to move to the count cell# 1
[
<
]
> now move ptr to cell 2# the start of the string
[ cut the value of cell2# paste to cell 1 and cell 0
-
<
+
<
+
>>
]
after the while statement# ptr points to cell 2
<
<
move ptr to cell 0 and restore cell 2# because cell 2 is start of the string
[
-
>
>
+
<
<
]
ptr points to cell 0 after while loop
> move it to cell 1
convert ASCII code to integer# cell 1 is used for count
------------------------
------------------------
start print
[
> move to cell 2# the start of the string
[ while cell has value# print it
.
>
]
the cell after the last cell of the string
we use it for printing '\n'
++++++++++
.
----------
< goto cell 0
[
<
]
> move to cell 1# count
- decrease count
]