DQ
Jump to navigation
Jump to search
DQ is a esolang about duplicate and discard
esolang overview
alphabet
DQ uses a minimal stack-based approach. The only symbols are:
| symbol | description |
|---|---|
| 0 | make the stack empty |
| 1 | pushes a 1 onto the stack |
| D | duplicates the top element on the stack |
| Q | discards the top element on the stack |
execution model
- Start with an empty stack.
- Read the DQ program character by character in random order.
- After processing the entire program, the final stack contents represent the output.
examples
11DQ
execution:
- 1: Push a 1 onto the stack (stack: 1).
- 1: Push another 1 onto the stack (stack: 1, 1).
- D: Duplicate the top 1 (stack: 1, 1, 1, 1).
- Q: Discard the top element (stack: 1, 1, 1).
Final output: 1, 1, 1 (if it goes in right direction).
Key Features:
- Duplication: The D instruction effectively doubles the size of the stack (up to the current stack pointer) at a specific point.
- Discarding: The Q instruction removes the top element, allowing for selective removal and manipulation of stack contents.
- All operations happen in a random order
Interpreter
Written in JavaScript.
function dq(program)
{
const stack = [];
const randomisedProgram = program.split("").sort(() => Math.random() - 0.5);
for(const character of randomisedProgram)
{
switch(character)
{
case "0":
stack.length = 0;
break;
case "1":
stack.push(1);
break;
case "D":
if(stack.length > 0)
stack.push(stack[stack.length - 1]);
break;
case "Q":
stack.pop();
break;
}
}
console.log(...stack);
}