From bc3f64835aca551f54cf2b2df86200d991b97a07 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Mon, 11 Dec 2017 17:27:35 +0100 Subject: day10 --- day10 | 1 + day10.cc | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ day10.k | 12 ++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 day10 create mode 100644 day10.cc create mode 100644 day10.k diff --git a/day10 b/day10 new file mode 100644 index 0000000..2fd89cf --- /dev/null +++ b/day10 @@ -0,0 +1 @@ +106,16,254,226,55,2,1,166,177,247,93,0,255,228,60,36 diff --git a/day10.cc b/day10.cc new file mode 100644 index 0000000..c260487 --- /dev/null +++ b/day10.cc @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +struct CommaInts : string { + friend istream& operator>>(istream& is, CommaInts& line) { + return getline(is, line, ','); + } + operator int() const { return stoi(*this); } +}; +auto begin(istream_iterator& l) { return l; } +auto end(istream_iterator&) { return istream_iterator{}; } + +template +auto knothash(T iter, int n) +{ + 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; + + istringstream iss{line}; + vector v1{knothash(istream_iterator(iss), 1)}; + cout << v1[0] * v1[1] << endl; + + line.append({17,31,73,47,23}); + vector v2{knothash(line, 64)}; + for (auto b = begin(v2); b != end(v2); advance(b, 16)) + cout << setfill('0') << setw(2) << hex << + accumulate(b, b + 16, 0, bit_xor()); + cout << endl; +} diff --git a/day10.k b/day10.k new file mode 100644 index 0000000..c568281 --- /dev/null +++ b/day10.k @@ -0,0 +1,12 @@ +d:*0:`day10 +S:256 +k:{(S#(S-m)_v,v:(|y#r),y_r:S#(m:S!x 1)_h,h:*x;+/y,x 1 2;1+x 2)} + +*/2#*(!S;0;0)k/. d / 11413 + +1 k/[;0+d,17 31 73 47 23]/(!S;0;0) + +`c$,/+S\(2/2!+/+2\)'16 0N#*64 k/[;0+d,17 31 73 47 23]/(!S;0;0) + / 7adfd64c2a03a4968cf708d1b7fd418d + +/\\ -- cgit 1.4.1