19 void chars_keep(char *s
, char *ks
)
23 for (int j
= 0; j
<len
; j
++)
24 if (strchr(ks
, s
[j
]) != NULL
)
30 void chars_remove(char *s
, char *rs
)
34 for (int j
= 0; j
<len
; j
++)
35 if (strchr(rs
, s
[j
]) == NULL
)
40 int char_cmp(const void *l
, const void *r
)
42 return *(const char *)l
-*(const char *)r
;
45 int calculate(char input
[INPUT_SIZE
][8], char output
[OUTPUT_SIZE
][8])
47 char mapping
[7][8] = {"abcdefg" ,"abcdefg" ,"abcdefg" ,"abcdefg" ,"abcdefg" ,"abcdefg" ,"abcdefg"};
49 for (int i
= 0; i
<INPUT_SIZE
; i
++) {
50 switch(strlen(input
[i
])) {
53 chars_remove(mapping
[0], input
[i
]);
54 chars_remove(mapping
[1], input
[i
]);
55 chars_keep(mapping
[2], input
[i
]);
56 chars_remove(mapping
[3], input
[i
]);
57 chars_remove(mapping
[4], input
[i
]);
58 chars_keep(mapping
[5], input
[i
]);
59 chars_remove(mapping
[6], input
[i
]);
63 chars_keep(mapping
[0], input
[i
]);
64 chars_remove(mapping
[1], input
[i
]);
65 chars_keep(mapping
[2], input
[i
]);
66 chars_remove(mapping
[3], input
[i
]);
67 chars_remove(mapping
[4], input
[i
]);
68 chars_keep(mapping
[5], input
[i
]);
69 chars_remove(mapping
[6], input
[i
]);
73 chars_remove(mapping
[0], input
[i
]);
74 chars_keep(mapping
[1], input
[i
]);
75 chars_keep(mapping
[2], input
[i
]);
76 chars_keep(mapping
[3], input
[i
]);
77 chars_remove(mapping
[4], input
[i
]);
78 chars_keep(mapping
[5], input
[i
]);
79 chars_remove(mapping
[6], input
[i
]);
85 chars_keep(mapping
[0], input
[i
]);
86 chars_keep(mapping
[3], input
[i
]);
87 chars_keep(mapping
[6], input
[i
]);
93 chars_keep(mapping
[0], input
[i
]);
94 chars_keep(mapping
[1], input
[i
]);
95 chars_keep(mapping
[5], input
[i
]);
96 chars_keep(mapping
[6], input
[i
]);
102 chars_keep(mapping
[0], input
[i
]);
103 chars_keep(mapping
[1], input
[i
]);
104 chars_keep(mapping
[2], input
[i
]);
105 chars_keep(mapping
[3], input
[i
]);
106 chars_keep(mapping
[4], input
[i
]);
107 chars_keep(mapping
[5], input
[i
]);
108 chars_keep(mapping
[6], input
[i
]);
112 for (int i
= 0; i
<7; i
++)
113 if (strlen(mapping
[i
]) == 1)
114 for (int j
= 0; j
<7; j
++)
116 chars_remove(mapping
[j
], mapping
[i
]);
120 for (int i
= 0; i
<OUTPUT_SIZE
; i
++) {
121 for (char *p
= &output
[i
][0]; *p
!= '\0'; p
++) {
122 for (int j
= 0; j
<7; j
++) {
123 if (mapping
[j
][0] == *p
) {
129 qsort(output
[i
], strlen(output
[i
]), 1, &char_cmp
);
131 if (strcmp(output
[i
], "abcefg") == 0) ;
132 else if (strcmp(output
[i
], "cf") == 0) r
+= 1;
133 else if (strcmp(output
[i
], "acdeg") == 0) r
+= 2;
134 else if (strcmp(output
[i
], "acdfg") == 0) r
+= 3;
135 else if (strcmp(output
[i
], "bcdf") == 0) r
+= 4;
136 else if (strcmp(output
[i
], "abdfg") == 0) r
+= 5;
137 else if (strcmp(output
[i
], "abdefg") == 0) r
+= 6;
138 else if (strcmp(output
[i
], "acf") == 0) r
+= 7;
139 else if (strcmp(output
[i
], "abcdefg") == 0) r
+= 8;
140 else if (strcmp(output
[i
], "abcdfg") == 0) r
+= 9;
142 printf("unknown sequence: %s\n", output
[i
]);
154 while (getline(&buf
, &len
, stdin
) != -1) {
155 char input
[INPUT_SIZE
][8];
156 char output
[OUTPUT_SIZE
][8];
158 char *p
= strtok(buf
, " ");
159 bool inoutput
= false;
160 strcpy(input
[i
++], p
);
161 while ((p
= strtok(NULL
, " ")) != NULL
) {
162 if (strcmp(p
, "|") == 0) {
164 } else if (inoutput
) {
165 if (p
[strlen(p
)-1] == '\n')
166 p
[strlen(p
)-1] = '\0';
167 strcpy(output
[(i
++ % INPUT_SIZE
)], p
);
169 strcpy(input
[i
++], p
);
173 r
+= calculate(input
, output
);