BrainFuck part 4 - Advanced maths
DPAmar
15.2K views
Welcome!
Welcome to this new playground about the BF language. Make sure you already read
- Getting started with BrainFuck
- BrainFuck part 2 - Working with arrays
- BrainFuck part 3 - Write a BF interpreter in BF
playgrounds if you didn't already !
The goal of this playground is to play with maths a bit more. Let's start with something simple : read a number.
In all the previous playground steps, data were read as "chars", mapped to ASCII values, but what if we want to type 123 and have a value 123 (instead of 3 chars)?
Let's start
- Memory: 0, 0, 0, 0
- Cursor: on first cell
- Input: a decimal number
Process
- invariant : first cell is the actually read number
- Read next digit on second cell
- While a digit has been read
- Convert char into digit (-48)
- Multiply number of first cell by ten
- Add second cell to first
- More exactly : add first cell 9 times to the second (needs less extra memory)
- then add second to first
- loop
- first cell : the decimal number
Code
>, read next digit on second cell
[ while digit is read
>++++++[-<-------->] convert into digit
>+++++++++[ do 9 times
<<<[->+>+<<] add first cell to second and create a save copy
>>[-<<+>>] put save copy back on first cell
>-] loop (9 times)
<<[-<+>], add second to first then read next digit
]< loop
Minified version
>,[>++++++[-<-------->]>+++++++++[<<<[->+>+<<]>>[-<<+>>]>-]<<[-<+>],]<
Final state
- Memory: N, 0, 0, 0
- Cursor: on N
- Input: empty
- Output: unchanged
Test program
This very basic program reads ASCII code and prints it
>,[>++++++[-<-------->]>+++++++++[< read number
<<[->+>+<<]>>[-<<+>>]>-]<<[-<+>],]< ** part 2 **
. print as ASCII code
Try with inputs from 65 to 90 for example to have all uppercased letters
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Suggested playgrounds