diff options
Diffstat (limited to 'aoc/2022/06/part-two.d')
-rw-r--r-- | aoc/2022/06/part-two.d | 26 |
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; + } +} |