5 kyu
My smallest code interpreter (aka Brainf**k)
2,348 of 8,314ssineriz
Description:
Inspired from real-world Brainf**k, we want to create an interpreter of that language which will support the following instructions:
>
increment the data pointer (to point to the next cell to the right).<
decrement the data pointer (to point to the next cell to the left).+
increment (increase by one, truncate overflow: 255 + 1 = 0) the byte at the data pointer.-
decrement (decrease by one, treat as unsigned byte: 0 - 1 = 255 ) the byte at the data pointer..
output the byte at the data pointer.,
accept one byte of input, storing its value in the byte at the data pointer.[
if the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching]
command.]
if the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching[
command.
The function will take in input...
- the program code, a string with the sequence of machine instructions,
- the program input, a string, possibly empty, that will be interpreted as an array of bytes using each character's ASCII code and will be consumed by the
,
instruction
... and will return ...
- the output of the interpreted code (always as a string), produced by the
.
instruction.
Implementation-specific details for this Kata:
- Your memory tape should be large enough - the original implementation had 30,000 cells but a few thousand should suffice for this Kata
- Each cell should hold an unsigned byte with wrapping behavior (i.e. 255 + 1 = 0, 0 - 1 = 255), initialized to 0
- The memory pointer should initially point to a cell in the tape with a sufficient number (e.g. a few thousand or more) of cells to its right. For convenience, you may want to have it point to the leftmost cell initially
- You may assume that the
,
command will never be invoked when the input stream is exhausted - Error-handling, e.g. unmatched square brackets and/or memory pointer going past the leftmost cell is not required in this Kata. If you see test cases that require you to perform error-handling then please open an Issue in the Discourse for this Kata (don't forget to state which programming language you are attempting this Kata in).
Interpreters
Algorithms
Similar Kata:
Stats:
Created | Oct 18, 2013 |
Published | Oct 18, 2013 |
Warriors Trained | 58541 |
Total Skips | 20602 |
Total Code Submissions | 76572 |
Total Times Completed | 8314 |
JavaScript Completions | 1839 |
Python Completions | 2348 |
Ruby Completions | 307 |
Haskell Completions | 266 |
Clojure Completions | 77 |
Java Completions | 802 |
Crystal Completions | 13 |
PHP Completions | 186 |
C++ Completions | 856 |
TypeScript Completions | 271 |
Rust Completions | 528 |
C Completions | 449 |
BF Completions | 23 |
CoffeeScript Completions | 12 |
Swift Completions | 68 |
C# Completions | 439 |
Elixir Completions | 46 |
Dart Completions | 91 |
Groovy Completions | 14 |
Kotlin Completions | 148 |
Factor Completions | 5 |
COBOL Completions | 3 |
Total Stars | 1953 |
% of votes with a positive feedback rating | 94% of 1480 |
Total "Very Satisfied" Votes | 1332 |
Total "Somewhat Satisfied" Votes | 120 |
Total "Not Satisfied" Votes | 28 |