Pagini recente » Cod sursa (job #2532386) | Cod sursa (job #2576161) | Cod sursa (job #2654181) | Cod sursa (job #2278222) | Cod sursa (job #2956526)
#include <stdio.h>
#include <stdint.h>
char st[1001];
char *__restrict s = st;
int8_t a[40] = {0};
int8_t eval();
int8_t item() {
int8_t sgn = 0;
int8_t t = 0;
while (*s == '-') {
++s;
sgn ^= 1;
}
if (*s == '(') {
++s;
t = item();
++s;
return t ^ sgn;
} else if ('A' <= *s && *s <= 'Z') {
t = a[*s - 'A'];
} else if (*s == '1') {
t = 1;
} else if (*s == '0') {
t = 0;
}
++s;
return t ^ sgn;
}
int8_t eval() {
int8_t t = item();
while (*s == '&' || *s == '|') {
if (*s == '&') {
++s;
t &= item();
} else {
++s;
t |= item();
}
}
return t;
}
void read_str(FILE *__restrict stream, char *__restrict str) {
while ((*str = fgetc(stream))) {
if (*str == '\r' || *str == '\n' || *str == '\0') {
*str = '\0';
return;
}
++str;
}
}
#define C(v,e,d) {case v:{if (str[1]==e){d;}else{*r=v;}}break;}
void parse_str(char *__restrict str, char *__restrict r) {
while (*str != '\0') {
switch (*str) {
case ' ':
--r;
break;
C('A', 'N',
str += 3;
*r = '&';)
C('O', 'R',
str += 2;
*r = '|')
C('T', 'R',
str += 4;
*r = '1')
C('F', 'A',
str += 5;
*r = '0')
C('N', 'O',
str += 3;
*r = '-')
default:
*r = *str;
break;
}
++r;
++str;
}
*r = '\0';
}
void read_uint32_t(FILE *__restrict stream, uint32_t *__restrict nr) {
uint8_t ch;
*nr = 0;
while ((ch = fgetc(stream)) && ('0' <= ch && ch <= '9')) {
*nr *= 10;
*nr += ch - '0';
}
if (ch == '\r') {
fgetc(stream);
}
}
int main(void) {
char cs[1001];
uint32_t n;
{
FILE *__restrict in = fopen("bool.in", "r");
FILE *__restrict out = fopen("bool.out", "w");
read_str(in, cs);
parse_str(cs, st);
read_uint32_t(in, &n);
{
int32_t i;
for(i = 0; i < n; ++i) {
a[fgetc(in) - 'A'] ^= 1;
s = st;
fprintf(out, "%i", eval());
}
}
fclose(out);
fclose(in);
}
{
}
return 0;
}