Compare commits

..

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

2 changed files with 10 additions and 13 deletions

View file

@ -1,18 +1,16 @@
# sandworm # Stupid Worm Languag
program space is an arbitrary sized grid - program space is an arbitrary sized grid
the worm starts where you place the worm head @ - 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) - as it passes over commands, they get moved to the back of the worm
commands to change direction <>^v - 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
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 ## 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
0123456789ABCDEF push number to stack 0..9 push number to stack
/\ pop stack, reflect to the side if zero /\ pop stack, reflect to the side if not zero
? reads one byte of input ? reads one byte of input
= duplicate top of stack = duplicate top of stack
! pop and write output as ascii char ! pop and write output as ascii char

View file

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