Compare commits

...

2 commits

3 changed files with 8 additions and 8 deletions

View file

@ -1,13 +1,13 @@
# Stupid Worm Languag # Stupid Worm Languag
- program space is an arbitrary sized grid - program space is an arbitrary sized grid of bytes
- the worm starts where you place the worm head @ - the worm starts as just a head `@`
- as it passes over commands, they get moved to the back of the worm - as it passes over commands, they get moved to the back of the worm
- values get pushed to stack (eaten) when passed over, worm body length increases - values get pushed to stack (eaten) when passed over, worm body length increases
- the program gets rearranged every time the worm executes it - the program gets rearranged every time the worm executes it
## commands ## commands
``` ```
+- pop 2 values *, push sum/difference (uses the order they are popped, so `0 -` negates the top of the stack) +- pop 2 values, push sum/difference (uses the order they are popped, so `0-` negates the top of the stack)
><^v change direction ><^v change direction
0..9 push number to stack 0..9 push number to stack
/\ pop stack, reflect to the side if not zero /\ pop stack, reflect to the side if not zero
@ -15,5 +15,6 @@
= duplicate top of stack = duplicate top of stack
! pop and write output as ascii char ! pop and write output as ascii char
" pop and write output as number " pop and write output as number
_ push a space character
all other characters are pushed as-is
``` ```
* pop when stack is empty yields zero

View file

@ -0,0 +1 @@
!!!!!!!!!!!!!Hello,_world+1_@<

View file

@ -225,10 +225,8 @@ impl SandWormInterpreter {
} }
} }
b' ' | 0 => dont_push_instruction = true, b' ' | 0 => dont_push_instruction = true,
other => { b'_' => self.worm_in.push(b' '),
self.worm_in.push(other); other => self.worm_in.push(other),
dont_push_instruction = true;
}
} }
if !dont_push_instruction { if !dont_push_instruction {
self.worm_out.insert(0, instruction); self.worm_out.insert(0, instruction);