From f4e01b6401a224fddc3143b15031c6ef60e15efd Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Fri, 15 Dec 2017 13:52:16 +0100 Subject: day14 --- day14 | 1 + day14.cc | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ day14.k | 12 +++++++++++ 3 files changed, 88 insertions(+) create mode 100644 day14 create mode 100644 day14.cc create mode 100644 day14.k diff --git a/day14 b/day14 new file mode 100644 index 0000000..9998271 --- /dev/null +++ b/day14 @@ -0,0 +1 @@ +wenycdww diff --git a/day14.cc b/day14.cc new file mode 100644 index 0000000..55b02fd --- /dev/null +++ b/day14.cc @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +template +auto knothash(T iter, int n=64) +{ + vector v(256); + iota(begin(v), end(v), 0); + + uint8_t skip = 0, pos = 0, delta; + + for (int j = 0; j < n; j++) + for (auto i : iter) { + reverse(begin(v), begin(v) + i); + delta = i + skip++; + rotate(begin(v), begin(v) + delta, end(v)); + pos += delta; + } + rotate(begin(v), end(v) - pos, end(v)); + + return move(v); +} + +int +main() { + string line; + cin >> line; + + int p1{0}; + int p2{0}; + + array, 128> a; + + for (int i = 0; i < 128; ++i) { + string s = line + "-" + to_string(i); + s.append({17,31,73,47,23}); + + vector v{knothash(s)}; + + int j = 0; + for (auto r = begin(v); r != end(v); advance(r, 16)) { + bitset<8> b = + accumulate(r, r + 16, 0, bit_xor()); + p1 += b.count(); + for (int n = 7; n >= 0; n--) + a[i][j++] = -b[n]; + } + } + + std::function fill = [&](int i, int j, int c) { + if (i < 0 || i >= size(a) || + j < 0 || j >= size(a) || + a[i][j] >= 0) + return; + a[i][j] = c; + fill(i-1, j, c); + fill(i+1, j, c); + fill( i, j-1, c); + fill( i, j+1, c); + }; + + for (int i = 0; i < size(a); i++) + for (int j = 0; j < size(a[i]); j++) + if (a[i][j] < 0) + fill(i, j, ++p2); + + cout << p1 << endl << p2 << endl; // 8226 1128 +} diff --git a/day14.k b/day14.k new file mode 100644 index 0000000..a634e17 --- /dev/null +++ b/day14.k @@ -0,0 +1,12 @@ +d:*0:`day14 / d:"flqrgnkx" + +/ from day10.k +r:{y@(#y)!x+!#y} + +S:256 +k:{(r[-m](|y#R),y_R:r[m:S!x 1]@*x;+/y,x 1 2;1+x 2)} +h:{,/+S\(2/2!+/+2\)'16 0N#*64 k/[;0+x,17 31 73 47 23]/(!S;0;0)} + +/ adapted from ok/examples/islands.k by John Earnest ++/+/a:+0,'+(0,,/+2\h@d,"-",)'$!128 / 8226 +-1+#?,/{a*|/(,x),((-1 1)r'\:x),(-1 1)r\:x}/a*s#1+!*/s:2##a / 1128 -- cgit 1.4.1