/draft/other/brainfuck-for-beginners/article.md

https://github.com/pluralsight/guides · Markdown · 61 lines · 54 code · 7 blank · 0 comment · 0 complexity · 9bd9e75513cd23c10f08f55411addf31 MD5 · raw file

  1. ## What is Brainfuck?
  2. Despite it's name, Brainfuck is a highly esoteric programming language. Essentially, it works just using a stack, assumedly with an infinite size. The language itself is extremely simple, consisting of only 6 characters. Due to it's extremely small size, programs written in Brainfuck are extremely small, and almost impossible to read. Below is a table of the characters used, and what they do
  3. #### Table of Commands
  4. Command | Function of Command
  5. :--------:|:---------------------
  6. `>` |Moves the pointer one cell right
  7. `<`|Moves the pointer one cell left
  8. `+`| Increment the cell under the pointer by one
  9. `-`| Decrement the cell under the pointer by one
  10. `.`| Outputs the value of the cell under the pointer as an ASCII character
  11. `,`| Takes one character of ASCII input, and store it in the cell under the pointer
  12. `[`| Jumps to the the matching `]` plus one instruction, if the cell currently under the pointer is 0
  13. `]`| Jumps to the matching `[` if the cell under pointer is non-zero
  14. ### Hello World Example
  15. To give an idea of what a Brainfuck program looks like, check out the Hello World example below
  16. ```none
  17. +++++ +++ Set Cell #0 to 8
  18. [
  19. >++++ Add 4 to Cell #1; this will always set Cell #1 to 4
  20. [ as the cell will be cleared by the loop
  21. >++ Add 4*2 to Cell #2
  22. >+++ Add 4*3 to Cell #3
  23. >+++ Add 4*3 to Cell #4
  24. >+ Add 4 to Cell #5
  25. <<<<- Decrement the loop counter in Cell #1
  26. ] Loop till Cell #1 is zero
  27. >+ Add 1 to Cell #2
  28. >+ Add 1 to Cell #3
  29. >- Subtract 1 from Cell #4
  30. >>+ Add 1 to Cell #6
  31. [<] Move back to the first zero cell you find; this will
  32. be Cell #1 which was cleared by the previous loop
  33. <- Decrement the loop Counter in Cell #0
  34. ] Loop till Cell #0 is zero
  35. The result of this is:
  36. Cell No : 0 1 2 3 4 5 6
  37. Contents: 0 0 72 104 88 32 8
  38. Pointer : ^
  39. >>. Cell #2 has value 72 which is 'H'
  40. >---. Subtract 3 from Cell #3 to get 101 which is 'e'
  41. +++++ ++..+++. Likewise for 'llo' from Cell #3
  42. >>. Cell #5 is 32 for the space
  43. <-. Subtract 1 from Cell #4 for 87 to give a 'W'
  44. <. Cell #3 was set to 'o' from the end of 'Hello'
  45. +++.----- -.----- ---. Cell #3 for 'rl' and 'd'
  46. >>+. Add 1 to Cell #5 gives us an exclamation point
  47. >++. And finally a newline from Cell #6
  48. ```
  49. (Thanks to esolang for this one)
  50. Now, as you can see, it's not particuarly easy to read, even with the comments along side it. But what about the barebones version
  51. ```
  52. ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
  53. ```
  54. Not quite so easy to read am I right