XOṘ Mạchịne

From Esolang
Jump to navigation Jump to search

XOṘ Mạchịne is an OISC based on the XOR operation. It is an open question on whether this machine can simulate every logic gate with two parameters.

Exclusive-Or reference

A B Result
1 1 0
1 0 1
0 1 1
0 0 0

The Program Execution Process

Input two bits, where the first bit represents a, and the second bit represents b. After processing the program, output whether a is larger than b. If that is true, output 1. Otherwise, output 0.

There is only 1 constant available. That is the constant 1, which represents the bit 1.

a represents the bit a, and b represents the bit b.

For every two commands, e.g. ab, a XOR b is done and is stored in a.

Example programs

a AND (NOT b)

(NOT a) AND b

abbabb

NOT (a XOR b)

aba1bb

Output 0

bbaa

Output 1

bbaaa1

a XOR b

abbb

a

bb

NOT a

bba1

NOT b

aaabbaaba1

b

aaabbaab

a AND b

b1

a NOR b

a1

C Implementation

#include <stdio.h>
int main(int argc, char*argv[]) {
	FILE *fp=fopen(argv[1],"r");
	char code[99999];
	char c;
	for(int i=0;(c=fgetc(fp))!=EOF;i++)
		code[i]=c;
	char a,b;
	char s[3];
	scanf("%s",&s);
	a=s[0]-48;
	b=s[1]-48;
	//debug
	for(int i=0;code[i]!='\0';i+=2) {
		if(code[i]=='a'&&code[i+1]=='a')
			a ^= a;
		else if(code[i]=='a'&&code[i+1]=='b')
			a ^= b;
		else if(code[i]=='a'&&code[i+1]=='1')
			a ^= 1;
		else if(code[i]=='b'&&code[i+1]=='a')
			b ^= a;
		else if(code[i]=='b'&&code[i+1]=='b')
			b ^= b;
		else if(code[i]=='b'&&code[i+1]=='1')
			b ^= 1;
		
	}
	printf("%d",a>b);
	return 0;
}