|
|
|
## brainfuck
|
|
|
|
|
|
|
|
### Instructions
|
|
|
|
|
|
|
|
Write a Brainfuck interpreter program.
|
|
|
|
The source code will be given as first parameter.
|
|
|
|
The code will always be valid, with no more than 4096 operations.
|
|
|
|
Brainfuck is a minimalist language. It consists of an array of bytes
|
|
|
|
(in our case, let's say 2048 bytes) initialized to zero,
|
|
|
|
and a pointer to its first byte.
|
|
|
|
|
|
|
|
Every operator consists of a single character :
|
|
|
|
|
|
|
|
- '>' increment the pointer ;
|
|
|
|
- '<' decrement the pointer ;
|
|
|
|
- '+' increment the pointed byte ;
|
|
|
|
- '-' decrement the pointed byte ;
|
|
|
|
- '.' print the pointed byte on standard output ;
|
|
|
|
- '[' go to the matching ']' if the pointed byte is 0 (while start) ;
|
|
|
|
- ']' go to the matching '[' if the pointed byte is not 0 (while end).
|
|
|
|
|
|
|
|
Any other character is a comment.
|
|
|
|
|
|
|
|
Examples of outputs :
|
|
|
|
|
|
|
|
```console
|
|
|
|
student@ubuntu:~/student/brainfuck$ go build
|
|
|
|
student@ubuntu:~/student/brainfuck$ ./brainfuck "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>." | cat -e
|
|
|
|
Hello World!$
|
|
|
|
student@ubuntu:~/student/brainfuck$ ./brainfuck "+++++[>++++[>++++H>+++++i<<-]>>>++\n<<<<-]>>--------.>+++++.>." | cat -e
|
|
|
|
Hi$
|
|
|
|
student@ubuntu:~/student/brainfuck$ ./brainfuck "++++++++++[>++++++++++>++++++++++>++++++++++<<<-]>---.>--.>-.>++++++++++." | cat -e
|
|
|
|
abc$
|
|
|
|
student@ubuntu:~/student/brainfuck$ ./brainfuck | cat -e
|
|
|
|
$
|
|
|
|
student@ubuntu:~/student/brainfuck$
|
|
|
|
```
|