From fa3710ada8343210155caff4498ff80277ce1b45 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Mon, 4 Dec 2017 19:26:06 +0100 Subject: day03 --- day03 | 1 + day03.cc | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ day03.k | 4 ++++ 3 files changed, 81 insertions(+) create mode 100644 day03 create mode 100644 day03.cc create mode 100644 day03.k diff --git a/day03 b/day03 new file mode 100644 index 0000000..9cf67fc --- /dev/null +++ b/day03 @@ -0,0 +1 @@ +368078 diff --git a/day03.cc b/day03.cc new file mode 100644 index 0000000..efaffc0 --- /dev/null +++ b/day03.cc @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include + +using namespace std; + +class SpiralIterator : public std::iterator { +public: + pair p; + int i, j, d; + + SpiralIterator() : p{0,1}, i{2}, j{1}, d{-1} + { } + + auto begin() { return *this; } + auto end() { return SpiralIterator{}; } + bool operator!=(SpiralIterator &) const { return true; } // infinite + + auto operator*() { return p; } + auto operator++() { + switch (d) { + case 0: p.first--; break; + case 1: p.second--; break; + case 2: p.first++; break; + case 3: p.second++; break; + } + + if (--j == 0) { + if (++d == 4) { + i += 2; + d = 0; + } + + j = i; + if (d == 0) j--; + if (d == 3) j++; + } + } +}; + +int +manhattan(pair c) +{ + return abs(c.first) + abs(c.second); +} + +int +main() { + int i; + cin >> i; + + // part 1 + SpiralIterator p1; + advance(p1, i-1); + cout << manhattan(*p1) << endl; + + // part 2 + const int N = 20; + vector> m(N, vector(N, 0)); + m[N/2][N/2] = 1; + + for (auto [x,y] : SpiralIterator{}) { + x += N/2; y += N/2; + + m[x][y] = m[x+1][y+1] + m[x+1][y] + m[x+1][y-1] + + m[ x ][y+1] + m[ x ][y-1] + + m[x-1][y+1] + m[x-1][y] + m[x-1][y-1]; + + if (m[x][y] > i) { + cout << m[x][y] << endl; + break; + } + } +} diff --git a/day03.k b/day03.k new file mode 100644 index 0000000..ba7f753 --- /dev/null +++ b/day03.k @@ -0,0 +1,4 @@ +d:.*0:`day03 +r+{x|-x}((r*2)!d-(2+r*r-1)-1)-r:_(1+%d-1)%2 / 371 +/ TODO part 2 +\\ -- cgit 1.4.1