Compare commits

..

No commits in common. "9cc9b5d0dca515123e9b388f194cf3011a44813a" and "355811be3ace2657fe572bdeb0f5c48e781e4bcb" have entirely different histories.

2 changed files with 13 additions and 10 deletions

View file

@ -1,16 +1,18 @@
# Stupid Worm Languag
- program space is an arbitrary sized grid
- the worm starts where you place the worm head @
- 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
- the program gets rearranged every time the worm executes it
# sandworm
program space is an arbitrary sized grid
the worm starts where you place the worm head @
as it passes over commands, they get moved to the back of the worm (also depending on the worm length)
commands to change direction <>^v
values get pushed to stack (eaten) when passed over, worm body length increases
autosarkophagy/self-cannibalism is possible, cutting off the back of the worm (the lower part of the stack) and pushing the passed value to the stack (front of worm)
conditional: pop then side/forward if top of stack is zero
## commands
```
+- pop 2 values *, push sum/difference (uses the order they are popped, so `0 -` negates the top of the stack)
><^v change direction
0..9 push number to stack
/\ pop stack, reflect to the side if not zero
0123456789ABCDEF push number to stack
/\ pop stack, reflect to the side if zero
? reads one byte of input
= duplicate top of stack
! pop and write output as ascii char

View file

@ -159,19 +159,20 @@ impl SandWormInterpreter {
self.worm_in.push(instruction - 48);
dont_push_instruction = true;
}
// b'0'..=b'9' => self.grow(instruction - 48),
b'+' => {
let a = self.shrink();
self.worm_out.push(instruction);
let b = self.shrink();
dont_push_instruction = true;
self.worm_in.push(a.wrapping_add(b));
self.worm_in.push(a + b);
}
b'-' => {
let a = self.shrink();
self.worm_out.push(instruction);
dont_push_instruction = true;
let b = self.shrink();
self.worm_in.push(a.wrapping_sub(b));
self.worm_in.push(a + b);
}
b'v' => self.direction = Direction::Down,
b'^' => self.direction = Direction::Up,