We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

XOṘ Mạchịne

From Esolang
(Redirected from XOR Machine)
Jump to navigation Jump to search

XOṘ Mạchịne is an OISC based on the XOR operation invented by User:A. It is unable to simulate all binary logic gates. For example, OR gate can't be simulated.

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

aa

Output 1

bbaaa1

a XOR b

abbb

a

bb

NOT a

bba1

NOT b

aa1

b

b1aa1

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];
	int 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;
}