The following hand-written programs perform the various one- and
two-input logic operations. These programs appear to be the shortest
ones to perform these operations that do not depend on the initial
content of stacks and registers (whose initial contents are represented
by a '?' below). However, it has not been proven that these are the
shortest programs. None of these programs permit self-replication;
rather, they merely perform a calculation.
ECHO | ||||||
---|---|---|---|---|---|---|
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | IO | ? | Y | ? | ? | X |
NOT | ||||||
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | push | ? | X | ? | X, ? | |
3 | pop | ? | X | X | ? | |
4 | nop-C | |||||
5 | nand | ? | ~X | X | ? | |
6 | IO | ? | Y | X | ? | ~X |
NAND | ||||||
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | IO | ? | X | Y | ? | ? |
3 | nop-C | |||||
4 | nand | ? | X nand Y | Y | ? | |
5 | IO | ? | Z | Y | ? | X nand Y |
OR_N | ||||||
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | IO | ? | X | Y | ? | ? |
3 | nop-C | |||||
4 | nand | ? | X nand Y | Y | ? | |
5 | nand | ? | X or ~Y | Y | ? | |
6 | IO | ? | Z | Y | ? | X or ~Y |
AND | ||||||
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | IO | ? | X | Y | ? | ? |
3 | nop-C | |||||
4 | nand | ? | X nand Y | Y | ? | |
5 | push | ? | X nand Y | Y | X nand Y, ? | |
6 | pop | ? | X nand Y | X nand Y | ? | |
7 | nop-C | |||||
8 | nand | ? | X and Y | X nand Y | ? | |
9 | IO | ? | Z | X nand Y | ? | X and Y |
OR | ||||||
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | push | ? | X | ? | X, ? | |
3 | pop | ? | X | X | ? | |
4 | nop-C | |||||
5 | nand | ~X | X | X | ? | |
6 | nop-A | |||||
7 | IO | ~X | Y | X | ? | X |
8 | push | ~X | Y | X | Y, ? | |
9 | pop | ~X | Y | Y | ? | |
10 | nop-C | |||||
11 | nand | ~X | ~Y | Y | ? | |
12 | swap | Y | ~Y | ~X | ? | |
13 | nop-C | |||||
14 | nand | Y | X or Y | ~X | ? | |
15 | IO | Y | Z | ~X | ? | X or Y |
AND_N | ||||||
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | IO | ? | X | Y | ? | ? |
3 | nop-C | |||||
4 | nand | ? | X nand Y | Y | ? | |
5 | nand | ? | X or ~Y | Y | ? | |
6 | push | ~X | X or ~Y | Y | ~X or Y, ? | |
7 | pop | ~X | X or ~Y | X or ~Y | ? | |
8 | nop-C | |||||
9 | nand | ? | ~X and Y | X or ~Y | ? | |
10 | IO | ? | Z | X or ~Y | ? | ~X and Y |
NOR | ||||||
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | push | ? | X | ? | X, ? | |
3 | pop | ? | X | X | ? | |
4 | nop-C | |||||
5 | nand | ~X | X | X | ? | |
6 | nop-A | |||||
7 | IO | ~X | Y | X | ? | X |
8 | push | ~X | Y | X | Y, ? | |
9 | pop | ~X | Y | Y | ? | |
10 | nop-C | |||||
11 | nand | ~X | ~Y | Y | ? | |
12 | swap | Y | ~Y | ~X | ? | |
13 | nop-C | |||||
14 | nand | Y | X or Y | ~X | ? | |
15 | push | Y | X or Y | X | X or Y, ? | |
16 | pop | Y | X or Y | X or Y | ? | |
17 | nop-C | |||||
18 | nand | Y | X nor Y | X or Y | ? | |
19 | IO | Y | Z | X or Y | ? | X nor Y |
XOR | ||||||
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | IO | ? | X | Y | ? | ? |
3 | nop-C | |||||
4 | push | ? | X | Y | X, ? | |
5 | nand | ? | X nand Y | Y | X, ? | |
6 | swap | ? | Y | X nand Y | X, ? | |
7 | nand | ? | X or ~Y | X nand Y | X, ? | |
8 | swap | X or ~Y | ? | X nand Y | X, ? | |
9 | nop-A | |||||
10 | pop | X or ~Y | X | X nand Y | ? | |
11 | nand | X or ~Y | Y or ~X | X nand Y | ? | |
12 | swap | X nand Y | Y or ~X | X or ~Y | ? | |
13 | nop-C | |||||
14 | nand | X nand Y | X xor Y | X or ~Y | ? | |
15 | IO | X nand Y | Z | X or ~Y | ? | X xor Y |
EQU | ||||||
# | Inst | AX | BX | CX | Stack | Output |
1 | IO | ? | X | ? | ? | ? |
2 | IO | ? | X | Y | ? | ? |
3 | nop-C | |||||
4 | push | ? | X | Y | X, ? | |
5 | nand | ? | X nand Y | Y | X, ? | |
6 | swap | ? | Y | X nand Y | X, ? | |
7 | nand | ? | X or ~Y | X nand Y | X, ? | |
8 | swap | X or ~Y | ? | X nand Y | X, ? | |
9 | nop-A | |||||
10 | pop | X or ~Y | X | X nand Y | ? | |
11 | nand | X or ~Y | Y or ~X | X nand Y | ? | |
12 | swap | X nand Y | Y or ~X | X or ~Y | ? | |
13 | nop-C | |||||
14 | nand | X nand Y | X xor Y | X or ~Y | ? | |
15 | push | X nand Y | X xor Y | X or ~Y | X xor Y, ? | |
16 | pop | X nand Y | X xor Y | X xor Y | ? | |
17 | nop-C | |||||
18 | nand | X nand Y | X equ Y | X xor Y | ? | |
19 | IO | X nand Y | Z | X xor Y | ? | X equ Y |