SLOW ACV MAMMALIAN
SLOW ACV MAMMALIAN is a language devised thrown together in 2012, in the space of a couple of hours, by user:tzxn3. It operates with an information pointer and a series of twenty-three "arrays", each of which can contain an unbounded number of cells/variables. Each cell can store any value from 0-255. The pointer points at a specific array rather than a specific cell: it cannot trivially target an arbitrary cell. Variable x exists independently of the arrays and pointer, and is special in that the value it can store is unbounded.
What can be done in this language remains to be seen. Expect an interpreter soon when the author feels like debugging his horrible code.
There are ten instructions in SLOW ACV MAMMALIAN, none of which take any arguments.
Before any program is run, the environment is initialised so that every array contains a single null item and x = 0.
Command | Description |
---|---|
SEED | where arrayi is a given array (0 >= i <= 22), add (i + 1) to the first value in the array, and repeat for all 23 arrays |
EXCRETE | push value of variable x (modulo 255) to the top of the array under the pointer, set variable x to 0 |
CONSUME | remove value from centre of the array under the pointer and put its value in variable x; if there is an even number of values in the array, choose the first of the two central values |
FISSION | remove value from centre of current array, divide it by two, copy the result to the start and end of the current array |
SPRINT | move the pointer the number of spaces to the right corresponding to the value stored in the (value in x)th variable in the array under the pointer; if the array has less than x variables, treat this as a NOP; if array 22 is passed, then wrap around |
LEAPFROG | if the last value in the array under the pointer is not 0, jump to the (x - first value in array)th instruction in the program |
DIGEST | perform bitwise XOR with arguments being value in x and the sum of all values in the array under the pointer; store result in x |
CONFLAGRATE | consider all stacks concatenated as a list (starts at beginning of array 0 and ends at end of array 22); let n be the number of variables in all of the stacks combined; let ai be a variable at position i in the list; if ai > a(n - i), do ai / a(n - i), truncate the result, subtract it from variable ai and add it to variable a(n - i); if ai < a(n - i), do a(n - i) modulo ai, add it to variable ai and subtract it from variable a(n - i); repeat until halfway down the list; put the values resulting variables in the list back into the equivalent variables in the stacks |
ACCEPT | take an ASCII character from input, XOR its value with x, push the result onto the top of array 0 |
PRONOUNCE | print ASCII character corresponding to x modulo 255 |
Examples
Hello, world! by User:Bangyen:
SEED SPRINT SPRINT SPRINT SEED SEED SEED SEED SEED SEED SEED SEED DIGEST PRONOUNCE EXCRETE CONFLAGRATE SPRINT SPRINT SPRINT SPRINT SEED SEED SEED SEED DIGEST PRONOUNCE EXCRETE SPRINT SPRINT SPRINT SPRINT SPRINT SPRINT SEED SEED SEED SEED SEED DIGEST PRONOUNCE PRONOUNCE EXCRETE CONFLAGRATE CONFLAGRATE CONSUME EXCRETE CONSUME PRONOUNCE EXCRETE SPRINT FISSION FISSION CONSUME FISSION CONSUME FISSION CONSUME FISSION CONSUME FISSION EXCRETE SPRINT EXCRETE CONSUME SEED SEED SEED SEED SEED SEED SEED SEED SEED SEED SEED CONSUME PRONOUNCE EXCRETE CONFLAGRATE SPRINT FISSION FISSION CONSUME CONSUME EXCRETE DIGEST PRONOUNCE CONFLAGRATE CONFLAGRATE CONSUME EXCRETE SPRINT FISSION SPRINT CONSUME CONSUME EXCRETE CONSUME CONSUME EXCRETE SPRINT DIGEST EXCRETE SEED SEED CONSUME PRONOUNCE CONSUME PRONOUNCE EXCRETE FISSION DIGEST EXCRETE CONSUME CONSUME SEED CONSUME PRONOUNCE EXCRETE CONFLAGRATE SPRINT FISSION SEED SEED SEED SEED SEED SEED SEED CONSUME PRONOUNCE SEED SEED SEED CONSUME PRONOUNCE EXCRETE FISSION FISSION SEED SEED SEED SEED CONSUME CONSUME PRONOUNCE FISSION FISSION SEED SEED CONSUME CONSUME PRONOUNCE