"Counter" is a language I've created for the purpose of this question.
- Commands are read from left to right from the first character.
- Each command may be executed as it is read, or you may execute all commands together at the end.
- In case of an error, all commands up till the error must be executed.
- A program is written in exactly one line.
- Data is stored in counters. At the start, there is exactly one counter. More can be created and deleted.
- A counter holds an integer value between -100 and 100 (limits inclusive).
- Exactly one counter is the selected counter at any point in time.
- Counters are arranged in a 1d array, so one can move left (previous) or right (next) to change selected counter.
- Any number between -100 and 100 - Set the currently selected counter to that value.
- c - Create a counter immediately after the currently selected counter, make it the selected counter, and set it to 0.
- d - Delete the currently selected counter, and make the previous one selected. If it is the first one, this is an error.
- + - Make the next counter the selected one.
- - - Make the previous counter the selected one. (Ensure that this command is not immediately followed by a number.)
- o - Output the value in the selected counter, followed by a space.
- ? - If the value in the selected counter is 0, apply the d command on it.
- # - If the value in the selected counter is 0, ignore the next command.
(space) - No meaning, but is to be treated like a command, if preceded by a #. Used to demarcate numbers.
- Going left of the leftmost counter, or right of the rightmost counter.
- Deleting the first counter.
- Encountering a
#as the last command. (Of course, this means all commands will get executed anyways)
- A command that does not exist.
- A number that's too long.
Create an interpreter in any language. Code will be in a file or given as input (your choice). Shortest code wins.
Consider the code:
Here is a breakdown of the program.
 indicates the selected counter.
Cmd Memory Output 7  c 7  c 7 0  - 7  0 -13 7 [-13] 0 7 [-13] 0 12 7  0 d  0 o  0 7 ?  0 + 7  ?  #  0  #  o  3  o  3 d This is an error. Program terminates here.