about summary refs log tree commit diff
path: root/aoc/2022/06/part-two.d
diff options
context:
space:
mode:
Diffstat (limited to 'aoc/2022/06/part-two.d')
-rw-r--r--aoc/2022/06/part-two.d26
1 files changed, 26 insertions, 0 deletions
diff --git a/aoc/2022/06/part-two.d b/aoc/2022/06/part-two.d
new file mode 100644
index 0000000..4465e38
--- /dev/null
+++ b/aoc/2022/06/part-two.d
@@ -0,0 +1,26 @@
+import core.int128 : Cent, and, or, shl, tst, xor;
+import core.stdc.stdio : getchar, printf;
+
+extern(C) void main()
+{
+    slide: for (auto q = cast(Cent) 0u, i = 1u;
+                tst(xor(and(q, cast(Cent) 0xff), cast(Cent) '\n'));
+                ++i)
+    {
+        q = or(shl(q, 8u), cast(Cent) getchar());
+        if (i < 14)
+          continue;
+
+        auto p = cast(ubyte*) &q;
+        for (auto s = 0u, j = 0u; j < 14u; ++j)
+        {
+            auto b = 1u << (p[j] & 0x1fu);
+            if (s & b)
+                continue slide;
+            s |= b;
+        }
+
+        printf("%d\n", i);
+        break;
+    }
+}