5 kyu
My smallest code interpreter (aka Brainf**k)
1,853 of 8,397ssineriz
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 | 58959 |
Total Skips | 20700 |
Total Code Submissions | 76839 |
Total Times Completed | 8397 |
JavaScript Completions | 1853 |
Python Completions | 2367 |
Ruby Completions | 309 |
Haskell Completions | 267 |
Clojure Completions | 78 |
Java Completions | 806 |
Crystal Completions | 14 |
PHP Completions | 190 |
C++ Completions | 876 |
TypeScript Completions | 278 |
Rust Completions | 533 |
C Completions | 458 |
BF Completions | 24 |
CoffeeScript Completions | 13 |
Swift Completions | 68 |
C# Completions | 445 |
Elixir Completions | 47 |
Dart Completions | 100 |
Groovy Completions | 15 |
Kotlin Completions | 151 |
Factor Completions | 6 |
COBOL Completions | 4 |
Total Stars | 1959 |
% of votes with a positive feedback rating | 94% of 1489 |
Total "Very Satisfied" Votes | 1338 |
Total "Somewhat Satisfied" Votes | 120 |
Total "Not Satisfied" Votes | 31 |