From 4c7c133abfdc9c606b24ec97fe6aba39bdccb76b Mon Sep 17 00:00:00 2001 From: nihonium Date: Thu, 3 Mar 2022 18:59:11 +0300 Subject: [PATCH] bits 3-5 --- data/bit_3.c | 30 ++++++++ data/bit_4.c | 37 +++++++++ data/bit_5.c | 72 +++++++++++++++++ numbers/setun.c | 201 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 340 insertions(+) create mode 100644 data/bit_3.c create mode 100644 data/bit_4.c create mode 100644 data/bit_5.c create mode 100644 numbers/setun.c diff --git a/data/bit_3.c b/data/bit_3.c new file mode 100644 index 0000000..674bb46 --- /dev/null +++ b/data/bit_3.c @@ -0,0 +1,30 @@ +#include + +int main() { + FILE *input = fopen("bit_3.dat","r"); + int nya; + char t; + fscanf(input, "%x\n", &nya); + fclose(input); + + t = (nya >> 4) & 1; + t += ((nya >> 5) & 1) * 2; + + FILE *output = fopen("bit_3.ans","w"); + switch (t) { + case 3: + fprintf(output, "%s", "bk"); + break; + case 2: + fprintf(output, "%s", "bw"); + break; + case 1: + fprintf(output, "%s", "rd"); + break; + case 0: + fprintf(output, "%s", "bn"); + break; + } + + fclose(output); +} diff --git a/data/bit_4.c b/data/bit_4.c new file mode 100644 index 0000000..eb6ff12 --- /dev/null +++ b/data/bit_4.c @@ -0,0 +1,37 @@ +#include + +const char* gender[] = {"fe", "ma"}; +const char* intel[] = {"du", "cl"}; +const char* hat[] = {"nh", "ha"}; +const char* legs[] = {"sk", "tr"}; +const char* hair[] = {"bn", "rd", "bw", "bk"}; +const char* eyes[] = {"bu", "ge", "gy", "da"}; + +void print_feature(int x, const char* features[], int bit, int len); + +int main() { + int nya; + + scanf("%x", &nya); + + print_feature(nya, gender, 0, 1); + print_feature(nya, intel, 1, 1); + print_feature(nya, hat, 2, 1); + print_feature(nya, legs, 3, 1); + print_feature(nya, hair, 4, 2); + print_feature(nya, eyes, 6, 2); + return 0; +} + +void print_feature(int x, const char* features[], int bit, int len) { + int t; + if (len == 1) { + t = (x >> bit) & 1; + } + else { + t = (x >> bit) & 1; + t += ((x >> (bit + 1)) & 1) * 2; + } + printf("%s ", features[t]); +} + diff --git a/data/bit_5.c b/data/bit_5.c new file mode 100644 index 0000000..afc6136 --- /dev/null +++ b/data/bit_5.c @@ -0,0 +1,72 @@ +#include +#include +const char* gender[] = {"fe", "ma"}; +const char* intel[] = {"du", "cl"}; +const char* hat[] = {"nh", "ha"}; +const char* legs[] = {"sk", "tr"}; +const char* hair[] = {"bn", "rd", "bw", "bk"}; +const char* eyes[] = {"bu", "ge", "gy", "da"}; + +void add_feature(int *res, int val, int len, int pos); +int check_in(char *src, const char* feature[], int l); + +int main() { + char x[1000] = ""; + char buf[3] = ""; + int res = 0; + int len, i, pos; + + scanf("%[^\n]", x); + len = (int)strlen(x); + + for (i = 0; i < len; i += 3) { + buf[0] = x[i]; + buf[1] = x[i+1]; + buf[2] = '\0'; + + if ((pos = check_in(buf, gender, 2)) != -1) { + add_feature(&res, pos, 1, 0); + } + if ((pos = check_in(buf, intel, 2)) != -1) { + add_feature(&res, pos, 1, 1); + } + if ((pos = check_in(buf, hat, 2)) != -1) { + add_feature(&res, pos, 1, 2); + } + if ((pos = check_in(buf, legs, 2)) != -1) { + add_feature(&res, pos, 1, 3); + } + if ((pos = check_in(buf, hair, 4)) != -1) { + add_feature(&res, pos, 2, 4); + } + if ((pos = check_in(buf, eyes, 4)) != -1) { + add_feature(&res, pos, 2, 6); + } + } + printf("%x", res); +} + +void add_feature(int *res, int val, int len, int pos) { + int mask; + if (len == 1) { + mask = 1 << pos; + *res = ((*res & ~mask) | (val << pos)); + } + else { + mask = 1 << pos; + *res = ((*res & ~mask) | ((val % 2)<< pos)); + mask = 1 << (pos + 1); + *res = ((*res & ~mask) | ((int)(val / 2)<< (pos + 1))); + } +} + +int check_in(char *src, const char* feature[], int l) { + int i; + for (i = 0; i < l; ++i) { + if (!strcmp(feature[i], src)) { + return i; + } + } + + return -1; +} diff --git a/numbers/setun.c b/numbers/setun.c new file mode 100644 index 0000000..a23a5e6 --- /dev/null +++ b/numbers/setun.c @@ -0,0 +1,201 @@ +/* +Not fully working! +Shitty solution. +*/ +#include +#include +#include + +int main () { + char a[1001] = "", b[1001] = "", c[1002]= ""; + //char* a = (char*)calloc(1001, sizeof(char)); + //char* b = (char*)calloc(1001, sizeof(char)); + //char* c = (char*)calloc(1002, sizeof(char)); + int i; + char x = '0'; + scanf("%s\n%s", a, b); + char cf = '0'; /* '0', '1', '$' */ + + int len_a = strlen(a); + int len_b = strlen(b); + + if (len_a < len_b) { + strcpy(c, a); + strcpy(a, b); + strcpy(b, c); + } + + for (i = 1; i <= len_b; ++i) { + //printf("len:%d\n", len_a-i); + //printf("%d: (cf=%c):", i, cf); + // 0 + 0 + if ((a[len_a-i] == '0') && (b[len_b-i] == '0')) { + x = cf; + cf = '0'; + } + // $ + $ + else if ((a[len_a-i] == '$') && (b[len_b-i] == '$')) { + if (cf == '0') { + x = '1'; + cf = '$'; + } + else if (cf == '1') { + x = '$'; + cf = '0'; + } + else if (cf == '$') { + x = '0'; + cf = '$'; + } + } + //1 + 1 + else if ((a[len_a-i] == '1') && (b[len_b-i] == '1')) { + if (cf == '0') { + x = '$'; + cf = '1'; + } + else if (cf == '1') { + x = '0'; + cf = '1'; + } + else if (cf == '$') { + x = '1'; + cf = '0'; + } + } + // smth + 0 = same as non-zero + else if (a[len_a-i] == '0') { + if (cf == '0') { + x = b[len_b-i]; + cf = '0'; + } + else if (cf == '1') { + if (b[len_b-i] == '0') { + x = cf; + cf = '0'; + } + else if (b[len_b-i] == '1') { + x = '$'; + cf = '1'; + } + else if (b[len_b-i] == '$') { + x = '0'; + cf = '0'; + } + } + else if (cf == '$') { + if (b[len_b-i] == '0') { + x = cf; + cf = '0'; + } + else if (b[len_b-i] == '1') { + x = '0'; + cf = '0'; + } + else if (b[len_b-i] == '$') { + x = '1'; + cf = '$'; + } + } + } + else if (b[len_b-i] == '0') { + if (cf == '0') { + x = a[len_a-i]; + cf = '0'; + } + else if (cf == '1') { + if (a[len_a-i] == '0') { + x = cf; + cf = '0'; + } + else if (a[len_a-i] == '1') { + x = '$'; + cf = '1'; + } + else if (a[len_a-i] == '$') { + x = '0'; + cf = '0'; + } + } + else if (cf == '$') { + if (a[len_a-i] == '0') { + x = cf; + cf = '0'; + } + else if (a[len_a-i] == '1') { + x = '0'; + cf = '0'; + } + else if (a[len_a-i] == '$') { + x = '1'; + cf = '$'; + } + } + } + // 1 + $ + else if (a[len_a-i] == '$' || b[len_b-i] == '$' ) { + x = cf; + cf = '0'; + } + //printf("%c + %c = %c (cf = %c)\n", a[len_a-i], b[len_b-i], x, cf); + c[len_a-i] = x; + } + for (; i <= len_a; ++i) { + // 0 + 0 + if ((a[len_a-i] == '0') && (cf == '0')) { + x = '0'; + } + // $ + $ + else if ((a[len_a-i] == '$') && (cf == '$')) { + x = '1'; + cf = '$'; + } + //1 + 1 + else if ((a[len_a-i] == '1') && (cf == '1')) { + x = '$'; + cf = '1'; + } + // smth + 0 = same as non-zero + else if (a[len_a-i] == '0') { + x = cf; + cf = '0'; + } + else if (cf == '0') { + x = a[len_a-i]; + } + // 1 + $ + else if (a[len_a-i] == '$' || cf == '$' ) { + x = '0'; + cf = '0'; + } + + c[len_a-i] = x; + } + + c[i] = '\0'; + for (i = 0; c[i] == '0'; ++i); + + //printf("%c\n", cf); + + if (i == len_a) { + if (cf == '1') + printf("1"); + else if (cf == '$') + printf("$"); + else + printf("0"); + } + else { + if (cf != '0') { + if (cf == '1') + printf("1%s", c+i); + if (cf == '$') + printf("$%s", c+i); + } + else + printf("%s", c+i); + } + //free(a); + //free(b); free(c); + return 0; +}