View difference between Paste ID: ve2KSXcU and d1dWDSsG
SHOW: | | - or go back to the newest paste.
1
#include <stdio.h>
2
#include <string.h>
3
#include <stdint.h>
4
#include <stdlib.h>
5
#include <ctype.h>
6
7
int hash(char destination[3]) {
8
	return destination[0]-'a'+1+(destination[1]==0?0:destination[1]-'a'+1)*26;
9
}
10
11
int main() {
12-
	uint16_t circuits[2*27+1];
12+
	uint16_t circuits[27*27+1];
13
	char operation[20], destination[3];
14
15
	for(int i=0;i<27*27+1;i++) {
16
		circuits[i]=0;
17
	}
18
19
	while(scanf("%[^\n-] -> %[^\n]\n",&operation, &destination) != EOF) {
20
		
21
		//printf("\n%s::%d", destination, hash(destination));
22
		char * sauce;
23
		//printf("\n%s::destination::%s\n\t/destination-value::%d", operation, destination, circuits[hash(destination)]);
24
		sauce = strtok(operation, " ");
25
		//printf("\n\tfirst::%s", sauce);
26
27
		char * source;
28
		if(strcmp("NOT",sauce)==0) {
29
			// NOT aa/1 -> bb
30
			sauce = strtok(NULL, " ");
31
		//	printf("\nNOT:\tfactor::%s,", sauce);
32
			uint16_t temp = (isdigit(sauce[0]) ? atoi(sauce) : circuits[hash(sauce)]);
33
		//	printf("%d,", temp);
34
			circuits[hash(destination)] = ~temp;
35
		//	printf("%d,", circuits[hash(destination)]);
36
			continue;
37
		} else {
38
			// aa/1 * -> bb
39
			source = sauce;
40
		}
41
		
42
		sauce = strtok(NULL, " ");
43
		
44
		uint16_t val = (isdigit(source[0]) ? atoi(source) : circuits[hash(source)]);
45
	
46
		if(sauce == NULL) {
47
			// aa -> bb
48
			circuits[hash(destination)] = val;
49
			continue;
50
		}
51
52
		char * factor = strtok(NULL, " ");
53
		uint16_t right = (isdigit(factor[0]) ? atoi(factor) : circuits[hash(factor)]);
54
		if(strcmp("AND",sauce)==0) {
55
			circuits[hash(destination)] = val & right;
56
		} else if(strcmp("OR",sauce)==0) {
57
			circuits[hash(destination)] = val | right;
58
		} else if(strcmp("LSHIFT",sauce)==0) {
59
			circuits[hash(destination)] = val << right;		
60
		} else if(strcmp("RSHIFT",sauce)==0) {
61
			circuits[hash(destination)] = val >> right;
62
		}
63
	}
64
	printf("\n%d", circuits[hash("a")]);
65
}