summaryrefslogtreecommitdiff
path: root/6/part2.c
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2020-12-06 09:36:49 +0100
committerBond_009 <bond.009@outlook.com>2020-12-06 09:36:49 +0100
commit58b1ffeba8a66990d306ed15503955489caa4c94 (patch)
tree30b9f2668d55a570723f3ec572edba42a29e0e22 /6/part2.c
parentbc21ee3e67ff6ba544ae1520fde9a2a6803bddb1 (diff)
Add day 6
Diffstat (limited to '6/part2.c')
-rw-r--r--6/part2.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/6/part2.c b/6/part2.c
new file mode 100644
index 0000000..11c8469
--- /dev/null
+++ b/6/part2.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+
+int plane_count(const char *filename)
+{
+ FILE *file = fopen(filename, "r");
+
+ // Include space for newline and string terminator
+ char buffer[32] = { 0 };
+
+ int tot = 0;
+ unsigned int current = 0xffffffff;
+
+ while (fgets(buffer, 32, file)) {
+ if (buffer[0] == '\n') {
+ if (current != 0xffffffff) {
+ tot += __builtin_popcount(current);
+ current = 0xffffffff;
+ }
+
+ continue;
+ }
+
+ unsigned int tmp = 0;
+ char *p = buffer;
+ do {
+ tmp |= 1 << (*p - 97);
+ } while (*++p != '\n');
+
+ current &= tmp;
+ }
+
+ fclose(file);
+
+ if (current != 0xffffffff) {
+ tot += __builtin_popcount(current);
+ }
+
+ return tot;
+}
+
+int main(int argc, char *argv[])
+{
+ printf("%i\n", plane_count(argv[argc - 1]));
+}