Added older advents
This commit is contained in:
parent
8db2505049
commit
9cf858b860
78 changed files with 13807 additions and 0 deletions
1
advent_of_code_2015/day1/input.in
Normal file
1
advent_of_code_2015/day1/input.in
Normal file
File diff suppressed because one or more lines are too long
18
advent_of_code_2015/day1/main1.cc
Normal file
18
advent_of_code_2015/day1/main1.cc
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
string buffer;
|
||||
|
||||
while(getline(cin, buffer))
|
||||
{
|
||||
int up = count(buffer.begin(), buffer.end(), '(');
|
||||
int down = count(buffer.begin(), buffer.end(), ')');
|
||||
|
||||
cout << "Floor: " << up - down << "\n";
|
||||
}
|
||||
}
|
||||
27
advent_of_code_2015/day1/main2.cc
Normal file
27
advent_of_code_2015/day1/main2.cc
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
string buffer;
|
||||
|
||||
while(getline(cin, buffer))
|
||||
{
|
||||
int floor = 0;
|
||||
|
||||
for (size_t idx = 0; idx != buffer.size(); ++idx)
|
||||
{
|
||||
floor += buffer[idx] == '(' ? 1 : -1;
|
||||
if (floor == -1)
|
||||
{
|
||||
cout << "Entered basement in step " << idx + 1 << "\n";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
1000
advent_of_code_2015/day2/input.in
Normal file
1000
advent_of_code_2015/day2/input.in
Normal file
File diff suppressed because it is too large
Load diff
63
advent_of_code_2015/day2/main1.cc
Normal file
63
advent_of_code_2015/day2/main1.cc
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Present
|
||||
{
|
||||
size_t length;
|
||||
size_t width;
|
||||
size_t height;
|
||||
|
||||
size_t extra_wrap()
|
||||
{
|
||||
return min(length * width, min(length * height, width * height));
|
||||
}
|
||||
|
||||
size_t wrap_required()
|
||||
{
|
||||
return 2 * length * width
|
||||
+ 2 * width * height
|
||||
+ 2 * height * length
|
||||
+ extra_wrap();
|
||||
}
|
||||
|
||||
size_t bow_size()
|
||||
{
|
||||
return length * width * height;
|
||||
}
|
||||
|
||||
size_t ribbon_required()
|
||||
{
|
||||
size_t ribbon = min(length + width, min(length + height, width + height)) * 2;
|
||||
return ribbon + bow_size();
|
||||
}
|
||||
};
|
||||
|
||||
istream &operator>>(istream& in, Present &present)
|
||||
{
|
||||
in >> present.length;
|
||||
in.ignore(1); // ignore 'x'.
|
||||
in >> present.width;
|
||||
in.ignore(1); // ignore 'x'.
|
||||
in >> present.height;
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
size_t total_wrap = 0;
|
||||
size_t total_ribbon = 0;
|
||||
Present present;
|
||||
|
||||
while(!cin.eof())
|
||||
{
|
||||
cin >> present;
|
||||
total_wrap += present.wrap_required();
|
||||
total_ribbon += present.ribbon_required();
|
||||
}
|
||||
|
||||
cout << "Total wrap required: " << total_wrap << "\n";
|
||||
cout << "Total ribbon required: " << total_ribbon << "\n";
|
||||
}
|
||||
1
advent_of_code_2015/day3/input.in
Normal file
1
advent_of_code_2015/day3/input.in
Normal file
File diff suppressed because one or more lines are too long
53
advent_of_code_2015/day3/main1.cc
Normal file
53
advent_of_code_2015/day3/main1.cc
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class Point
|
||||
{
|
||||
public:
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
|
||||
bool operator<(Point const &lhs, Point const &rhs)
|
||||
{
|
||||
if (lhs.x == rhs.x)
|
||||
return lhs.y < rhs.y;
|
||||
return lhs.x < rhs.x;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
set<Point> delivered;
|
||||
Point position{0, 0};
|
||||
delivered.insert(position);
|
||||
|
||||
while (!cin.eof())
|
||||
{
|
||||
switch (cin.get())
|
||||
{
|
||||
case '>':
|
||||
++position.x;
|
||||
break;
|
||||
|
||||
case '<':
|
||||
--position.x;
|
||||
break;
|
||||
|
||||
case '^':
|
||||
--position.y;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
++position.y;
|
||||
break;
|
||||
}
|
||||
|
||||
delivered.insert(position);
|
||||
}
|
||||
|
||||
cout << "Delivered count: " << delivered.size() << "\n";
|
||||
}
|
||||
56
advent_of_code_2015/day3/main2.cc
Normal file
56
advent_of_code_2015/day3/main2.cc
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class Point
|
||||
{
|
||||
public:
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
|
||||
bool operator<(Point const &lhs, Point const &rhs)
|
||||
{
|
||||
if (lhs.x == rhs.x)
|
||||
return lhs.y < rhs.y;
|
||||
return lhs.x < rhs.x;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
bool robo = false;
|
||||
set<Point> delivered;
|
||||
Point position{0, 0};
|
||||
Point robo_position{0, 0};
|
||||
delivered.insert(position);
|
||||
|
||||
while (!cin.eof())
|
||||
{
|
||||
switch (cin.get())
|
||||
{
|
||||
case '>':
|
||||
++(robo ? robo_position : position).x;
|
||||
break;
|
||||
|
||||
case '<':
|
||||
--(robo ? robo_position : position).x;
|
||||
break;
|
||||
|
||||
case '^':
|
||||
--(robo ? robo_position : position).y;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
++(robo ? robo_position : position).y;
|
||||
break;
|
||||
}
|
||||
|
||||
robo = !robo;
|
||||
delivered.insert(robo ? robo_position : position);
|
||||
}
|
||||
|
||||
cout << "Delivered count: " << delivered.size() << "\n";
|
||||
}
|
||||
24
advent_of_code_2015/day4/main1.cc
Normal file
24
advent_of_code_2015/day4/main1.cc
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#include "md5.hpp"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
string prefix = "bgvyzdsv";
|
||||
|
||||
for (size_t idx = 0; ; ++idx)
|
||||
{
|
||||
string test = prefix + to_string(idx);
|
||||
|
||||
string hash = md5(test);
|
||||
if (hash.find_first_not_of('0') == 6) //5 for solution 1
|
||||
{
|
||||
cout << test << "\n";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
362
advent_of_code_2015/day4/md5.cpp
Normal file
362
advent_of_code_2015/day4/md5.cpp
Normal file
|
|
@ -0,0 +1,362 @@
|
|||
/* MD5
|
||||
converted to C++ class by Frank Thilo (thilo@unix-ag.org)
|
||||
for bzflag (http://www.bzflag.org)
|
||||
|
||||
based on:
|
||||
|
||||
md5.h and md5.c
|
||||
reference implemantion of RFC 1321
|
||||
|
||||
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
rights reserved.
|
||||
|
||||
License to copy and use this software is granted provided that it
|
||||
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
Algorithm" in all material mentioning or referencing this software
|
||||
or this function.
|
||||
|
||||
License is also granted to make and use derivative works provided
|
||||
that such works are identified as "derived from the RSA Data
|
||||
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
mentioning or referencing the derived work.
|
||||
|
||||
RSA Data Security, Inc. makes no representations concerning either
|
||||
the merchantability of this software or the suitability of this
|
||||
software for any particular purpose. It is provided "as is"
|
||||
without express or implied warranty of any kind.
|
||||
|
||||
These notices must be retained in any copies of any part of this
|
||||
documentation and/or software.
|
||||
|
||||
*/
|
||||
|
||||
/* interface header */
|
||||
#include "md5.hpp"
|
||||
|
||||
/* system implementation headers */
|
||||
#include <cstdio>
|
||||
|
||||
|
||||
// Constants for MD5Transform routine.
|
||||
#define S11 7
|
||||
#define S12 12
|
||||
#define S13 17
|
||||
#define S14 22
|
||||
#define S21 5
|
||||
#define S22 9
|
||||
#define S23 14
|
||||
#define S24 20
|
||||
#define S31 4
|
||||
#define S32 11
|
||||
#define S33 16
|
||||
#define S34 23
|
||||
#define S41 6
|
||||
#define S42 10
|
||||
#define S43 15
|
||||
#define S44 21
|
||||
|
||||
///////////////////////////////////////////////
|
||||
|
||||
// F, G, H and I are basic MD5 functions.
|
||||
inline MD5::uint4 MD5::F(uint4 x, uint4 y, uint4 z) {
|
||||
return x&y | ~x&z;
|
||||
}
|
||||
|
||||
inline MD5::uint4 MD5::G(uint4 x, uint4 y, uint4 z) {
|
||||
return x&z | y&~z;
|
||||
}
|
||||
|
||||
inline MD5::uint4 MD5::H(uint4 x, uint4 y, uint4 z) {
|
||||
return x^y^z;
|
||||
}
|
||||
|
||||
inline MD5::uint4 MD5::I(uint4 x, uint4 y, uint4 z) {
|
||||
return y ^ (x | ~z);
|
||||
}
|
||||
|
||||
// rotate_left rotates x left n bits.
|
||||
inline MD5::uint4 MD5::rotate_left(uint4 x, int n) {
|
||||
return (x << n) | (x >> (32-n));
|
||||
}
|
||||
|
||||
// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
|
||||
// Rotation is separate from addition to prevent recomputation.
|
||||
inline void MD5::FF(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac) {
|
||||
a = rotate_left(a+ F(b,c,d) + x + ac, s) + b;
|
||||
}
|
||||
|
||||
inline void MD5::GG(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac) {
|
||||
a = rotate_left(a + G(b,c,d) + x + ac, s) + b;
|
||||
}
|
||||
|
||||
inline void MD5::HH(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac) {
|
||||
a = rotate_left(a + H(b,c,d) + x + ac, s) + b;
|
||||
}
|
||||
|
||||
inline void MD5::II(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac) {
|
||||
a = rotate_left(a + I(b,c,d) + x + ac, s) + b;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////
|
||||
|
||||
// default ctor, just initailize
|
||||
MD5::MD5()
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////
|
||||
|
||||
// nifty shortcut ctor, compute MD5 for string and finalize it right away
|
||||
MD5::MD5(const std::string &text)
|
||||
{
|
||||
init();
|
||||
update(text.c_str(), text.length());
|
||||
finalize();
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
void MD5::init()
|
||||
{
|
||||
finalized=false;
|
||||
|
||||
count[0] = 0;
|
||||
count[1] = 0;
|
||||
|
||||
// load magic initialization constants.
|
||||
state[0] = 0x67452301;
|
||||
state[1] = 0xefcdab89;
|
||||
state[2] = 0x98badcfe;
|
||||
state[3] = 0x10325476;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
// decodes input (unsigned char) into output (uint4). Assumes len is a multiple of 4.
|
||||
void MD5::decode(uint4 output[], const uint1 input[], size_type len)
|
||||
{
|
||||
for (unsigned int i = 0, j = 0; j < len; i++, j += 4)
|
||||
output[i] = ((uint4)input[j]) | (((uint4)input[j+1]) << 8) |
|
||||
(((uint4)input[j+2]) << 16) | (((uint4)input[j+3]) << 24);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
// encodes input (uint4) into output (unsigned char). Assumes len is
|
||||
// a multiple of 4.
|
||||
void MD5::encode(uint1 output[], const uint4 input[], size_type len)
|
||||
{
|
||||
for (size_type i = 0, j = 0; j < len; i++, j += 4) {
|
||||
output[j] = input[i] & 0xff;
|
||||
output[j+1] = (input[i] >> 8) & 0xff;
|
||||
output[j+2] = (input[i] >> 16) & 0xff;
|
||||
output[j+3] = (input[i] >> 24) & 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
// apply MD5 algo on a block
|
||||
void MD5::transform(const uint1 block[blocksize])
|
||||
{
|
||||
uint4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
|
||||
decode (x, block, blocksize);
|
||||
|
||||
/* Round 1 */
|
||||
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
|
||||
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
|
||||
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
|
||||
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
|
||||
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
|
||||
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
|
||||
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
|
||||
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
|
||||
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
|
||||
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
|
||||
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
|
||||
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
|
||||
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
|
||||
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
|
||||
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
|
||||
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
|
||||
|
||||
/* Round 2 */
|
||||
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
|
||||
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
|
||||
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
|
||||
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
|
||||
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
|
||||
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
|
||||
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
|
||||
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
|
||||
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
|
||||
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
|
||||
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
|
||||
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
|
||||
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
|
||||
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
|
||||
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
|
||||
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
|
||||
|
||||
/* Round 3 */
|
||||
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
|
||||
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
|
||||
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
|
||||
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
|
||||
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
|
||||
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
|
||||
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
|
||||
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
|
||||
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
|
||||
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
|
||||
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
|
||||
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
|
||||
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
|
||||
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
|
||||
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
|
||||
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
|
||||
|
||||
/* Round 4 */
|
||||
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
|
||||
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
|
||||
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
|
||||
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
|
||||
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
|
||||
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
|
||||
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
|
||||
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
|
||||
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
|
||||
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
|
||||
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
|
||||
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
|
||||
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
|
||||
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
|
||||
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
|
||||
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
|
||||
|
||||
state[0] += a;
|
||||
state[1] += b;
|
||||
state[2] += c;
|
||||
state[3] += d;
|
||||
|
||||
// Zeroize sensitive information.
|
||||
memset(x, 0, sizeof x);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
// MD5 block update operation. Continues an MD5 message-digest
|
||||
// operation, processing another message block
|
||||
void MD5::update(const unsigned char input[], size_type length)
|
||||
{
|
||||
// compute number of bytes mod 64
|
||||
size_type index = count[0] / 8 % blocksize;
|
||||
|
||||
// Update number of bits
|
||||
if ((count[0] += (length << 3)) < (length << 3))
|
||||
count[1]++;
|
||||
count[1] += (length >> 29);
|
||||
|
||||
// number of bytes we need to fill in buffer
|
||||
size_type firstpart = 64 - index;
|
||||
|
||||
size_type i;
|
||||
|
||||
// transform as many times as possible.
|
||||
if (length >= firstpart)
|
||||
{
|
||||
// fill buffer first, transform
|
||||
memcpy(&buffer[index], input, firstpart);
|
||||
transform(buffer);
|
||||
|
||||
// transform chunks of blocksize (64 bytes)
|
||||
for (i = firstpart; i + blocksize <= length; i += blocksize)
|
||||
transform(&input[i]);
|
||||
|
||||
index = 0;
|
||||
}
|
||||
else
|
||||
i = 0;
|
||||
|
||||
// buffer remaining input
|
||||
memcpy(&buffer[index], &input[i], length-i);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
// for convenience provide a verson with signed char
|
||||
void MD5::update(const char input[], size_type length)
|
||||
{
|
||||
update((const unsigned char*)input, length);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
// MD5 finalization. Ends an MD5 message-digest operation, writing the
|
||||
// the message digest and zeroizing the context.
|
||||
MD5& MD5::finalize()
|
||||
{
|
||||
static unsigned char padding[64] = {
|
||||
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
if (!finalized) {
|
||||
// Save number of bits
|
||||
unsigned char bits[8];
|
||||
encode(bits, count, 8);
|
||||
|
||||
// pad out to 56 mod 64.
|
||||
size_type index = count[0] / 8 % 64;
|
||||
size_type padLen = (index < 56) ? (56 - index) : (120 - index);
|
||||
update(padding, padLen);
|
||||
|
||||
// Append length (before padding)
|
||||
update(bits, 8);
|
||||
|
||||
// Store state in digest
|
||||
encode(digest, state, 16);
|
||||
|
||||
// Zeroize sensitive information.
|
||||
memset(buffer, 0, sizeof buffer);
|
||||
memset(count, 0, sizeof count);
|
||||
|
||||
finalized=true;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
// return hex representation of digest as string
|
||||
std::string MD5::hexdigest() const
|
||||
{
|
||||
if (!finalized)
|
||||
return "";
|
||||
|
||||
char buf[33];
|
||||
for (int i=0; i<16; i++)
|
||||
sprintf(buf+i*2, "%02x", digest[i]);
|
||||
buf[32]=0;
|
||||
|
||||
return std::string(buf);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
std::ostream& operator<<(std::ostream& out, MD5 md5)
|
||||
{
|
||||
return out << md5.hexdigest();
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
std::string md5(const std::string str)
|
||||
{
|
||||
MD5 md5 = MD5(str);
|
||||
|
||||
return md5.hexdigest();
|
||||
}
|
||||
93
advent_of_code_2015/day4/md5.hpp
Normal file
93
advent_of_code_2015/day4/md5.hpp
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
/* MD5
|
||||
converted to C++ class by Frank Thilo (thilo@unix-ag.org)
|
||||
for bzflag (http://www.bzflag.org)
|
||||
|
||||
based on:
|
||||
|
||||
md5.h and md5.c
|
||||
reference implementation of RFC 1321
|
||||
|
||||
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
rights reserved.
|
||||
|
||||
License to copy and use this software is granted provided that it
|
||||
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
Algorithm" in all material mentioning or referencing this software
|
||||
or this function.
|
||||
|
||||
License is also granted to make and use derivative works provided
|
||||
that such works are identified as "derived from the RSA Data
|
||||
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
mentioning or referencing the derived work.
|
||||
|
||||
RSA Data Security, Inc. makes no representations concerning either
|
||||
the merchantability of this software or the suitability of this
|
||||
software for any particular purpose. It is provided "as is"
|
||||
without express or implied warranty of any kind.
|
||||
|
||||
These notices must be retained in any copies of any part of this
|
||||
documentation and/or software.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef BZF_MD5_H
|
||||
#define BZF_MD5_H
|
||||
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
|
||||
|
||||
// a small class for calculating MD5 hashes of strings or byte arrays
|
||||
// it is not meant to be fast or secure
|
||||
//
|
||||
// usage: 1) feed it blocks of uchars with update()
|
||||
// 2) finalize()
|
||||
// 3) get hexdigest() string
|
||||
// or
|
||||
// MD5(std::string).hexdigest()
|
||||
//
|
||||
// assumes that char is 8 bit and int is 32 bit
|
||||
class MD5
|
||||
{
|
||||
public:
|
||||
typedef unsigned int size_type; // must be 32bit
|
||||
|
||||
MD5();
|
||||
MD5(const std::string& text);
|
||||
void update(const unsigned char *buf, size_type length);
|
||||
void update(const char *buf, size_type length);
|
||||
MD5& finalize();
|
||||
std::string hexdigest() const;
|
||||
friend std::ostream& operator<<(std::ostream&, MD5 md5);
|
||||
|
||||
private:
|
||||
void init();
|
||||
typedef unsigned char uint1; // 8bit
|
||||
typedef unsigned int uint4; // 32bit
|
||||
enum {blocksize = 64}; // VC6 won't eat a const static int here
|
||||
|
||||
void transform(const uint1 block[blocksize]);
|
||||
static void decode(uint4 output[], const uint1 input[], size_type len);
|
||||
static void encode(uint1 output[], const uint4 input[], size_type len);
|
||||
|
||||
bool finalized;
|
||||
uint1 buffer[blocksize]; // bytes that didn't fit in last 64 byte chunk
|
||||
uint4 count[2]; // 64bit counter for number of bits (lo, hi)
|
||||
uint4 state[4]; // digest so far
|
||||
uint1 digest[16]; // the result
|
||||
|
||||
// low level logic operations
|
||||
static inline uint4 F(uint4 x, uint4 y, uint4 z);
|
||||
static inline uint4 G(uint4 x, uint4 y, uint4 z);
|
||||
static inline uint4 H(uint4 x, uint4 y, uint4 z);
|
||||
static inline uint4 I(uint4 x, uint4 y, uint4 z);
|
||||
static inline uint4 rotate_left(uint4 x, int n);
|
||||
static inline void FF(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
|
||||
static inline void GG(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
|
||||
static inline void HH(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
|
||||
static inline void II(uint4 &a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac);
|
||||
};
|
||||
|
||||
std::string md5(const std::string str);
|
||||
|
||||
#endif
|
||||
1000
advent_of_code_2015/day5/input.in
Normal file
1000
advent_of_code_2015/day5/input.in
Normal file
File diff suppressed because it is too large
Load diff
59
advent_of_code_2015/day5/main1.cc
Normal file
59
advent_of_code_2015/day5/main1.cc
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool has_forbidden(string const &str)
|
||||
{
|
||||
if (str.find("ab") != string::npos) return true;
|
||||
if (str.find("cd") != string::npos) return true;
|
||||
if (str.find("pq") != string::npos) return true;
|
||||
if (str.find("xy") != string::npos) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool has_repeating(string const &str)
|
||||
{
|
||||
for (size_t idx = 0; idx != str.size() - 1; ++idx)
|
||||
{
|
||||
if (str[idx] == str[idx + 1])
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool vowels_ok(string const &str)
|
||||
{
|
||||
size_t vowels = 0;
|
||||
|
||||
vowels += count(str.begin(), str.end(), 'a');
|
||||
vowels += count(str.begin(), str.end(), 'e');
|
||||
vowels += count(str.begin(), str.end(), 'i');
|
||||
vowels += count(str.begin(), str.end(), 'o');
|
||||
vowels += count(str.begin(), str.end(), 'u');
|
||||
|
||||
return vowels >= 3;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
string buffer;
|
||||
size_t count = 0;
|
||||
|
||||
while(getline(cin, buffer))
|
||||
{
|
||||
cout << "'" << buffer << "'\n";
|
||||
|
||||
if (vowels_ok(buffer)
|
||||
&& has_repeating(buffer)
|
||||
&& !has_forbidden(buffer))
|
||||
{
|
||||
++count;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Nice strings: " << count << "\n";
|
||||
}
|
||||
50
advent_of_code_2015/day5/main2.cc
Normal file
50
advent_of_code_2015/day5/main2.cc
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool has_repeating_pair(string const &text)
|
||||
{
|
||||
for (size_t idx = 0; idx < text.size() - 2; ++idx)
|
||||
{
|
||||
if (text.find(text.substr(idx, 2), idx + 2) != string::npos)
|
||||
{
|
||||
cout << "'" << text << "' has repeating pair: '";
|
||||
cout << text.substr(idx, 2) << "'\n";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// cout << "'" << text << "' has no repeating pair\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
bool repeats_plus_one(string const &text)
|
||||
{
|
||||
for (size_t idx = 0; idx < text.size() - 2; ++idx)
|
||||
{
|
||||
if (text[idx] == text[idx + 2])
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
string buffer;
|
||||
size_t count = 0;
|
||||
|
||||
while (getline(cin, buffer))
|
||||
{
|
||||
if (has_repeating_pair(buffer)
|
||||
&& repeats_plus_one(buffer))
|
||||
{
|
||||
++count;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Nice strings: " << count << "\n";
|
||||
|
||||
}
|
||||
300
advent_of_code_2015/day6/input.in
Normal file
300
advent_of_code_2015/day6/input.in
Normal file
|
|
@ -0,0 +1,300 @@
|
|||
turn off 660,55 through 986,197
|
||||
turn off 341,304 through 638,850
|
||||
turn off 199,133 through 461,193
|
||||
toggle 322,558 through 977,958
|
||||
toggle 537,781 through 687,941
|
||||
turn on 226,196 through 599,390
|
||||
turn on 240,129 through 703,297
|
||||
turn on 317,329 through 451,798
|
||||
turn on 957,736 through 977,890
|
||||
turn on 263,530 through 559,664
|
||||
turn on 158,270 through 243,802
|
||||
toggle 223,39 through 454,511
|
||||
toggle 544,218 through 979,872
|
||||
turn on 313,306 through 363,621
|
||||
toggle 173,401 through 496,407
|
||||
toggle 333,60 through 748,159
|
||||
turn off 87,577 through 484,608
|
||||
turn on 809,648 through 826,999
|
||||
toggle 352,432 through 628,550
|
||||
turn off 197,408 through 579,569
|
||||
turn off 1,629 through 802,633
|
||||
turn off 61,44 through 567,111
|
||||
toggle 880,25 through 903,973
|
||||
turn on 347,123 through 864,746
|
||||
toggle 728,877 through 996,975
|
||||
turn on 121,895 through 349,906
|
||||
turn on 888,547 through 931,628
|
||||
toggle 398,782 through 834,882
|
||||
turn on 966,850 through 989,953
|
||||
turn off 891,543 through 914,991
|
||||
toggle 908,77 through 916,117
|
||||
turn on 576,900 through 943,934
|
||||
turn off 580,170 through 963,206
|
||||
turn on 184,638 through 192,944
|
||||
toggle 940,147 through 978,730
|
||||
turn off 854,56 through 965,591
|
||||
toggle 717,172 through 947,995
|
||||
toggle 426,987 through 705,998
|
||||
turn on 987,157 through 992,278
|
||||
toggle 995,774 through 997,784
|
||||
turn off 796,96 through 845,182
|
||||
turn off 451,87 through 711,655
|
||||
turn off 380,93 through 968,676
|
||||
turn on 263,468 through 343,534
|
||||
turn on 917,936 through 928,959
|
||||
toggle 478,7 through 573,148
|
||||
turn off 428,339 through 603,624
|
||||
turn off 400,880 through 914,953
|
||||
toggle 679,428 through 752,779
|
||||
turn off 697,981 through 709,986
|
||||
toggle 482,566 through 505,725
|
||||
turn off 956,368 through 993,516
|
||||
toggle 735,823 through 783,883
|
||||
turn off 48,487 through 892,496
|
||||
turn off 116,680 through 564,819
|
||||
turn on 633,865 through 729,930
|
||||
turn off 314,618 through 571,922
|
||||
toggle 138,166 through 936,266
|
||||
turn on 444,732 through 664,960
|
||||
turn off 109,337 through 972,497
|
||||
turn off 51,432 through 77,996
|
||||
turn off 259,297 through 366,744
|
||||
toggle 801,130 through 917,544
|
||||
toggle 767,982 through 847,996
|
||||
turn on 216,507 through 863,885
|
||||
turn off 61,441 through 465,731
|
||||
turn on 849,970 through 944,987
|
||||
toggle 845,76 through 852,951
|
||||
toggle 732,615 through 851,936
|
||||
toggle 251,128 through 454,778
|
||||
turn on 324,429 through 352,539
|
||||
toggle 52,450 through 932,863
|
||||
turn off 449,379 through 789,490
|
||||
turn on 317,319 through 936,449
|
||||
toggle 887,670 through 957,838
|
||||
toggle 671,613 through 856,664
|
||||
turn off 186,648 through 985,991
|
||||
turn off 471,689 through 731,717
|
||||
toggle 91,331 through 750,758
|
||||
toggle 201,73 through 956,524
|
||||
toggle 82,614 through 520,686
|
||||
toggle 84,287 through 467,734
|
||||
turn off 132,367 through 208,838
|
||||
toggle 558,684 through 663,920
|
||||
turn on 237,952 through 265,997
|
||||
turn on 694,713 through 714,754
|
||||
turn on 632,523 through 862,827
|
||||
turn on 918,780 through 948,916
|
||||
turn on 349,586 through 663,976
|
||||
toggle 231,29 through 257,589
|
||||
toggle 886,428 through 902,993
|
||||
turn on 106,353 through 236,374
|
||||
turn on 734,577 through 759,684
|
||||
turn off 347,843 through 696,912
|
||||
turn on 286,699 through 964,883
|
||||
turn on 605,875 through 960,987
|
||||
turn off 328,286 through 869,461
|
||||
turn off 472,569 through 980,848
|
||||
toggle 673,573 through 702,884
|
||||
turn off 398,284 through 738,332
|
||||
turn on 158,50 through 284,411
|
||||
turn off 390,284 through 585,663
|
||||
turn on 156,579 through 646,581
|
||||
turn on 875,493 through 989,980
|
||||
toggle 486,391 through 924,539
|
||||
turn on 236,722 through 272,964
|
||||
toggle 228,282 through 470,581
|
||||
toggle 584,389 through 750,761
|
||||
turn off 899,516 through 900,925
|
||||
turn on 105,229 through 822,846
|
||||
turn off 253,77 through 371,877
|
||||
turn on 826,987 through 906,992
|
||||
turn off 13,152 through 615,931
|
||||
turn on 835,320 through 942,399
|
||||
turn on 463,504 through 536,720
|
||||
toggle 746,942 through 786,998
|
||||
turn off 867,333 through 965,403
|
||||
turn on 591,477 through 743,692
|
||||
turn off 403,437 through 508,908
|
||||
turn on 26,723 through 368,814
|
||||
turn on 409,485 through 799,809
|
||||
turn on 115,630 through 704,705
|
||||
turn off 228,183 through 317,220
|
||||
toggle 300,649 through 382,842
|
||||
turn off 495,365 through 745,562
|
||||
turn on 698,346 through 744,873
|
||||
turn on 822,932 through 951,934
|
||||
toggle 805,30 through 925,421
|
||||
toggle 441,152 through 653,274
|
||||
toggle 160,81 through 257,587
|
||||
turn off 350,781 through 532,917
|
||||
toggle 40,583 through 348,636
|
||||
turn on 280,306 through 483,395
|
||||
toggle 392,936 through 880,955
|
||||
toggle 496,591 through 851,934
|
||||
turn off 780,887 through 946,994
|
||||
turn off 205,735 through 281,863
|
||||
toggle 100,876 through 937,915
|
||||
turn on 392,393 through 702,878
|
||||
turn on 956,374 through 976,636
|
||||
toggle 478,262 through 894,775
|
||||
turn off 279,65 through 451,677
|
||||
turn on 397,541 through 809,847
|
||||
turn on 444,291 through 451,586
|
||||
toggle 721,408 through 861,598
|
||||
turn on 275,365 through 609,382
|
||||
turn on 736,24 through 839,72
|
||||
turn off 86,492 through 582,712
|
||||
turn on 676,676 through 709,703
|
||||
turn off 105,710 through 374,817
|
||||
toggle 328,748 through 845,757
|
||||
toggle 335,79 through 394,326
|
||||
toggle 193,157 through 633,885
|
||||
turn on 227,48 through 769,743
|
||||
toggle 148,333 through 614,568
|
||||
toggle 22,30 through 436,263
|
||||
toggle 547,447 through 688,969
|
||||
toggle 576,621 through 987,740
|
||||
turn on 711,334 through 799,515
|
||||
turn on 541,448 through 654,951
|
||||
toggle 792,199 through 798,990
|
||||
turn on 89,956 through 609,960
|
||||
toggle 724,433 through 929,630
|
||||
toggle 144,895 through 201,916
|
||||
toggle 226,730 through 632,871
|
||||
turn off 760,819 through 828,974
|
||||
toggle 887,180 through 940,310
|
||||
toggle 222,327 through 805,590
|
||||
turn off 630,824 through 885,963
|
||||
turn on 940,740 through 954,946
|
||||
turn on 193,373 through 779,515
|
||||
toggle 304,955 through 469,975
|
||||
turn off 405,480 through 546,960
|
||||
turn on 662,123 through 690,669
|
||||
turn off 615,238 through 750,714
|
||||
turn on 423,220 through 930,353
|
||||
turn on 329,769 through 358,970
|
||||
toggle 590,151 through 704,722
|
||||
turn off 884,539 through 894,671
|
||||
toggle 449,241 through 984,549
|
||||
toggle 449,260 through 496,464
|
||||
turn off 306,448 through 602,924
|
||||
turn on 286,805 through 555,901
|
||||
toggle 722,177 through 922,298
|
||||
toggle 491,554 through 723,753
|
||||
turn on 80,849 through 174,996
|
||||
turn off 296,561 through 530,856
|
||||
toggle 653,10 through 972,284
|
||||
toggle 529,236 through 672,614
|
||||
toggle 791,598 through 989,695
|
||||
turn on 19,45 through 575,757
|
||||
toggle 111,55 through 880,871
|
||||
turn off 197,897 through 943,982
|
||||
turn on 912,336 through 977,605
|
||||
toggle 101,221 through 537,450
|
||||
turn on 101,104 through 969,447
|
||||
toggle 71,527 through 587,717
|
||||
toggle 336,445 through 593,889
|
||||
toggle 214,179 through 575,699
|
||||
turn on 86,313 through 96,674
|
||||
toggle 566,427 through 906,888
|
||||
turn off 641,597 through 850,845
|
||||
turn on 606,524 through 883,704
|
||||
turn on 835,775 through 867,887
|
||||
toggle 547,301 through 897,515
|
||||
toggle 289,930 through 413,979
|
||||
turn on 361,122 through 457,226
|
||||
turn on 162,187 through 374,746
|
||||
turn on 348,461 through 454,675
|
||||
turn off 966,532 through 985,537
|
||||
turn on 172,354 through 630,606
|
||||
turn off 501,880 through 680,993
|
||||
turn off 8,70 through 566,592
|
||||
toggle 433,73 through 690,651
|
||||
toggle 840,798 through 902,971
|
||||
toggle 822,204 through 893,760
|
||||
turn off 453,496 through 649,795
|
||||
turn off 969,549 through 990,942
|
||||
turn off 789,28 through 930,267
|
||||
toggle 880,98 through 932,434
|
||||
toggle 568,674 through 669,753
|
||||
turn on 686,228 through 903,271
|
||||
turn on 263,995 through 478,999
|
||||
toggle 534,675 through 687,955
|
||||
turn off 342,434 through 592,986
|
||||
toggle 404,768 through 677,867
|
||||
toggle 126,723 through 978,987
|
||||
toggle 749,675 through 978,959
|
||||
turn off 445,330 through 446,885
|
||||
turn off 463,205 through 924,815
|
||||
turn off 417,430 through 915,472
|
||||
turn on 544,990 through 912,999
|
||||
turn off 201,255 through 834,789
|
||||
turn off 261,142 through 537,862
|
||||
turn off 562,934 through 832,984
|
||||
turn off 459,978 through 691,980
|
||||
turn off 73,911 through 971,972
|
||||
turn on 560,448 through 723,810
|
||||
turn on 204,630 through 217,854
|
||||
turn off 91,259 through 611,607
|
||||
turn on 877,32 through 978,815
|
||||
turn off 950,438 through 974,746
|
||||
toggle 426,30 through 609,917
|
||||
toggle 696,37 through 859,201
|
||||
toggle 242,417 through 682,572
|
||||
turn off 388,401 through 979,528
|
||||
turn off 79,345 through 848,685
|
||||
turn off 98,91 through 800,434
|
||||
toggle 650,700 through 972,843
|
||||
turn off 530,450 through 538,926
|
||||
turn on 428,559 through 962,909
|
||||
turn on 78,138 through 92,940
|
||||
toggle 194,117 through 867,157
|
||||
toggle 785,355 through 860,617
|
||||
turn off 379,441 through 935,708
|
||||
turn off 605,133 through 644,911
|
||||
toggle 10,963 through 484,975
|
||||
turn off 359,988 through 525,991
|
||||
turn off 509,138 through 787,411
|
||||
toggle 556,467 through 562,773
|
||||
turn on 119,486 through 246,900
|
||||
turn on 445,561 through 794,673
|
||||
turn off 598,681 through 978,921
|
||||
turn off 974,230 through 995,641
|
||||
turn off 760,75 through 800,275
|
||||
toggle 441,215 through 528,680
|
||||
turn off 701,636 through 928,877
|
||||
turn on 165,753 through 202,780
|
||||
toggle 501,412 through 998,516
|
||||
toggle 161,105 through 657,395
|
||||
turn on 113,340 through 472,972
|
||||
toggle 384,994 through 663,999
|
||||
turn on 969,994 through 983,997
|
||||
turn on 519,600 through 750,615
|
||||
turn off 363,899 through 948,935
|
||||
turn on 271,845 through 454,882
|
||||
turn off 376,528 through 779,640
|
||||
toggle 767,98 through 854,853
|
||||
toggle 107,322 through 378,688
|
||||
turn off 235,899 through 818,932
|
||||
turn on 445,611 through 532,705
|
||||
toggle 629,387 through 814,577
|
||||
toggle 112,414 through 387,421
|
||||
toggle 319,184 through 382,203
|
||||
turn on 627,796 through 973,940
|
||||
toggle 602,45 through 763,151
|
||||
turn off 441,375 through 974,545
|
||||
toggle 871,952 through 989,998
|
||||
turn on 717,272 through 850,817
|
||||
toggle 475,711 through 921,882
|
||||
toggle 66,191 through 757,481
|
||||
turn off 50,197 through 733,656
|
||||
toggle 83,575 through 915,728
|
||||
turn on 777,812 through 837,912
|
||||
turn on 20,984 through 571,994
|
||||
turn off 446,432 through 458,648
|
||||
turn on 715,871 through 722,890
|
||||
toggle 424,675 through 740,862
|
||||
toggle 580,592 through 671,900
|
||||
toggle 296,687 through 906,775
|
||||
54
advent_of_code_2015/day6/main.ih
Normal file
54
advent_of_code_2015/day6/main.ih
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
enum Action
|
||||
{
|
||||
TURN_OFF,
|
||||
TURN_ON,
|
||||
TOGGLE
|
||||
};
|
||||
|
||||
struct Point
|
||||
{
|
||||
size_t x;
|
||||
size_t y;
|
||||
|
||||
Point()
|
||||
: x(0), y(0)
|
||||
{ }
|
||||
};
|
||||
|
||||
struct Instruction
|
||||
{
|
||||
Action action;
|
||||
Point from;
|
||||
Point through;
|
||||
};
|
||||
|
||||
istream &operator>>(istream &in, Point &point)
|
||||
{
|
||||
cin >> point.x;
|
||||
cin.ignore(1); // ignore ','
|
||||
cin >> point.y;
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
// thrash tier parsing function
|
||||
istream &operator>>(istream &in, Instruction &instruction)
|
||||
{
|
||||
cin.ignore(5);
|
||||
string command;
|
||||
cin >> command;
|
||||
if (command == "le")
|
||||
instruction.action = TOGGLE;
|
||||
else instruction.action = command == "on" ? TURN_ON : TURN_OFF;
|
||||
cin >> instruction.from;
|
||||
cin.ignore(9); //ignore ' through '
|
||||
cin >> instruction.through;
|
||||
|
||||
return in;
|
||||
}
|
||||
56
advent_of_code_2015/day6/main1.cc
Normal file
56
advent_of_code_2015/day6/main1.cc
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#include "main.ih"
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<Instruction> instructions;
|
||||
|
||||
while(!cin.eof())
|
||||
{
|
||||
Instruction instr;
|
||||
cin >> instr;
|
||||
|
||||
instructions.push_back(instr);
|
||||
cout << "Instruction set " << instr.action << "\n";
|
||||
cout << " from: [" << instr.from.x << ", " << instr.from.y << "]\n";
|
||||
cout << " througn: [" << instr.through.x << ", " << instr.through.y << "]\n";
|
||||
}
|
||||
|
||||
vector<vector<bool>> lights;
|
||||
lights.resize(1000, vector<bool>(1000, false));
|
||||
|
||||
for (Instruction const &instr : instructions)
|
||||
{
|
||||
for (size_t idx = instr.from.x; idx <= instr.through.x; ++idx)
|
||||
{
|
||||
for (size_t idy = instr.from.y; idy <= instr.through.y; ++idy)
|
||||
{
|
||||
switch(instr.action)
|
||||
{
|
||||
case TURN_OFF:
|
||||
lights[idx][idy] = false;
|
||||
break;
|
||||
|
||||
case TURN_ON:
|
||||
lights[idx][idy] = true;
|
||||
break;
|
||||
|
||||
case TOGGLE:
|
||||
lights[idx][idy] = !lights[idx][idy];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
size_t lights_on = 0;
|
||||
for (size_t idx = 0; idx != lights.size(); ++idx)
|
||||
{
|
||||
for (size_t idy = 0; idy != lights[idx].size(); ++idy)
|
||||
{
|
||||
if (lights[idx][idy])
|
||||
++lights_on;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "There are " << lights_on << " lights turned on!\n";
|
||||
}
|
||||
54
advent_of_code_2015/day6/main2.cc
Normal file
54
advent_of_code_2015/day6/main2.cc
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#include "main.ih"
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<Instruction> instructions;
|
||||
|
||||
while(!cin.eof())
|
||||
{
|
||||
Instruction instr;
|
||||
cin >> instr;
|
||||
|
||||
instructions.push_back(instr);
|
||||
cout << "Instruction set " << instr.action << "\n";
|
||||
cout << " from: [" << instr.from.x << ", " << instr.from.y << "]\n";
|
||||
cout << " througn: [" << instr.through.x << ", " << instr.through.y << "]\n";
|
||||
}
|
||||
|
||||
vector<vector<int>> lights;
|
||||
lights.resize(1000, vector<int>(1000, 0));
|
||||
|
||||
for (Instruction const &instr : instructions)
|
||||
{
|
||||
for (size_t idx = instr.from.x; idx <= instr.through.x; ++idx)
|
||||
{
|
||||
for (size_t idy = instr.from.y; idy <= instr.through.y; ++idy)
|
||||
{
|
||||
switch(instr.action)
|
||||
{
|
||||
case TURN_OFF:
|
||||
lights[idx][idy]
|
||||
= lights[idx][idy] ? lights[idx][idy] - 1 : 0;
|
||||
break;
|
||||
|
||||
case TURN_ON:
|
||||
lights[idx][idy] += 1;
|
||||
break;
|
||||
|
||||
case TOGGLE:
|
||||
lights[idx][idy] += 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
size_t brightness = 0;
|
||||
for (size_t idx = 0; idx != lights.size(); ++idx)
|
||||
{
|
||||
for (size_t idy = 0; idy != lights[idx].size(); ++idy)
|
||||
brightness += lights[idx][idy];
|
||||
}
|
||||
|
||||
cout << "Total brightness: " << brightness << "\n";
|
||||
}
|
||||
994
advent_of_code_2018/day1/input.in
Executable file
994
advent_of_code_2018/day1/input.in
Executable file
|
|
@ -0,0 +1,994 @@
|
|||
+5
|
||||
-11
|
||||
-1
|
||||
-16
|
||||
+12
|
||||
+9
|
||||
-15
|
||||
+20
|
||||
+4
|
||||
+17
|
||||
-4
|
||||
-14
|
||||
+6
|
||||
-17
|
||||
+6
|
||||
-19
|
||||
-12
|
||||
+17
|
||||
-6
|
||||
-18
|
||||
+1
|
||||
+15
|
||||
-14
|
||||
+10
|
||||
-4
|
||||
-2
|
||||
+5
|
||||
+6
|
||||
+8
|
||||
+3
|
||||
+17
|
||||
-9
|
||||
+18
|
||||
-1
|
||||
+17
|
||||
-15
|
||||
+7
|
||||
-6
|
||||
-17
|
||||
-17
|
||||
+19
|
||||
+19
|
||||
-13
|
||||
+18
|
||||
-15
|
||||
+16
|
||||
+7
|
||||
-10
|
||||
-5
|
||||
+22
|
||||
+8
|
||||
-13
|
||||
+4
|
||||
+3
|
||||
+19
|
||||
+17
|
||||
-19
|
||||
-1
|
||||
-11
|
||||
+2
|
||||
+1
|
||||
-13
|
||||
+1
|
||||
+3
|
||||
-14
|
||||
+16
|
||||
-9
|
||||
+19
|
||||
+13
|
||||
-20
|
||||
+6
|
||||
+22
|
||||
+10
|
||||
+6
|
||||
+15
|
||||
-13
|
||||
-13
|
||||
-8
|
||||
+16
|
||||
+20
|
||||
-5
|
||||
+1
|
||||
+7
|
||||
+11
|
||||
-13
|
||||
+5
|
||||
-16
|
||||
-2
|
||||
-4
|
||||
+25
|
||||
-5
|
||||
-10
|
||||
-12
|
||||
-9
|
||||
+16
|
||||
-2
|
||||
-19
|
||||
-3
|
||||
-12
|
||||
+5
|
||||
+17
|
||||
+16
|
||||
+11
|
||||
+16
|
||||
+10
|
||||
+4
|
||||
+3
|
||||
+11
|
||||
-12
|
||||
+19
|
||||
+3
|
||||
+17
|
||||
+15
|
||||
-6
|
||||
-6
|
||||
-4
|
||||
+3
|
||||
+10
|
||||
+8
|
||||
+15
|
||||
-7
|
||||
+13
|
||||
+3
|
||||
+6
|
||||
+2
|
||||
+16
|
||||
+20
|
||||
+3
|
||||
-11
|
||||
+3
|
||||
-11
|
||||
+12
|
||||
+6
|
||||
+3
|
||||
+11
|
||||
+5
|
||||
+2
|
||||
+12
|
||||
-4
|
||||
-2
|
||||
+4
|
||||
+3
|
||||
-4
|
||||
+20
|
||||
+1
|
||||
+19
|
||||
+14
|
||||
+5
|
||||
-16
|
||||
-15
|
||||
-16
|
||||
-4
|
||||
-10
|
||||
-13
|
||||
-10
|
||||
-18
|
||||
+10
|
||||
-6
|
||||
-7
|
||||
-3
|
||||
-2
|
||||
-14
|
||||
+12
|
||||
-2
|
||||
-6
|
||||
-11
|
||||
-5
|
||||
-6
|
||||
+20
|
||||
-11
|
||||
-1
|
||||
+9
|
||||
-1
|
||||
+5
|
||||
+6
|
||||
+11
|
||||
-19
|
||||
-9
|
||||
-14
|
||||
-4
|
||||
-6
|
||||
-1
|
||||
+2
|
||||
-6
|
||||
-12
|
||||
+20
|
||||
-12
|
||||
-13
|
||||
-9
|
||||
-3
|
||||
-7
|
||||
-17
|
||||
+14
|
||||
-9
|
||||
+20
|
||||
-4
|
||||
-8
|
||||
-1
|
||||
-6
|
||||
+16
|
||||
+6
|
||||
-18
|
||||
-12
|
||||
+6
|
||||
-22
|
||||
-15
|
||||
+10
|
||||
+6
|
||||
+20
|
||||
-16
|
||||
+1
|
||||
-18
|
||||
+4
|
||||
+19
|
||||
+9
|
||||
-17
|
||||
+1
|
||||
+13
|
||||
+21
|
||||
+23
|
||||
-4
|
||||
+7
|
||||
-16
|
||||
+3
|
||||
-4
|
||||
-3
|
||||
-17
|
||||
-20
|
||||
-10
|
||||
-20
|
||||
+16
|
||||
+3
|
||||
+14
|
||||
-11
|
||||
+3
|
||||
-29
|
||||
-1
|
||||
+7
|
||||
-18
|
||||
+5
|
||||
-7
|
||||
-16
|
||||
+6
|
||||
-7
|
||||
-15
|
||||
+9
|
||||
+22
|
||||
-2
|
||||
-21
|
||||
-18
|
||||
+1
|
||||
+10
|
||||
+13
|
||||
+13
|
||||
-24
|
||||
-6
|
||||
-22
|
||||
-10
|
||||
+9
|
||||
+4
|
||||
-8
|
||||
-16
|
||||
+3
|
||||
-5
|
||||
-19
|
||||
-6
|
||||
-11
|
||||
+3
|
||||
-8
|
||||
-16
|
||||
-14
|
||||
-16
|
||||
-15
|
||||
-6
|
||||
+3
|
||||
+13
|
||||
+8
|
||||
-19
|
||||
-18
|
||||
-8
|
||||
+9
|
||||
-15
|
||||
-14
|
||||
-2
|
||||
+18
|
||||
-17
|
||||
+2
|
||||
+18
|
||||
-6
|
||||
-3
|
||||
-19
|
||||
+16
|
||||
-4
|
||||
+6
|
||||
+21
|
||||
-6
|
||||
+7
|
||||
+17
|
||||
-8
|
||||
-4
|
||||
+6
|
||||
+19
|
||||
-2
|
||||
+5
|
||||
+20
|
||||
-3
|
||||
-6
|
||||
+5
|
||||
+5
|
||||
-17
|
||||
-18
|
||||
+16
|
||||
+4
|
||||
+7
|
||||
+6
|
||||
+8
|
||||
+6
|
||||
-1
|
||||
+10
|
||||
-13
|
||||
-4
|
||||
-10
|
||||
+8
|
||||
-14
|
||||
+17
|
||||
+9
|
||||
+2
|
||||
-7
|
||||
-22
|
||||
-16
|
||||
+20
|
||||
-13
|
||||
+8
|
||||
-17
|
||||
+1
|
||||
+19
|
||||
+14
|
||||
+19
|
||||
+11
|
||||
-6
|
||||
+25
|
||||
+18
|
||||
+19
|
||||
+5
|
||||
+20
|
||||
+17
|
||||
+4
|
||||
-10
|
||||
+47
|
||||
+4
|
||||
-1
|
||||
+23
|
||||
+24
|
||||
-8
|
||||
-10
|
||||
+31
|
||||
+19
|
||||
-11
|
||||
-17
|
||||
+8
|
||||
-24
|
||||
+9
|
||||
+32
|
||||
+18
|
||||
-1
|
||||
+4
|
||||
-13
|
||||
+4
|
||||
+17
|
||||
-2
|
||||
+11
|
||||
+11
|
||||
+4
|
||||
-3
|
||||
-3
|
||||
+22
|
||||
+19
|
||||
+14
|
||||
-21
|
||||
+13
|
||||
+9
|
||||
-14
|
||||
-16
|
||||
+20
|
||||
+16
|
||||
-14
|
||||
+5
|
||||
-15
|
||||
+12
|
||||
-11
|
||||
+1
|
||||
+3
|
||||
-24
|
||||
-9
|
||||
-9
|
||||
-22
|
||||
-12
|
||||
-10
|
||||
-7
|
||||
-3
|
||||
+12
|
||||
+13
|
||||
+17
|
||||
-11
|
||||
+35
|
||||
+12
|
||||
-9
|
||||
+16
|
||||
+22
|
||||
-18
|
||||
-18
|
||||
+19
|
||||
-8
|
||||
+23
|
||||
+19
|
||||
+3
|
||||
+8
|
||||
+15
|
||||
-2
|
||||
+11
|
||||
+14
|
||||
+10
|
||||
+15
|
||||
+8
|
||||
-1
|
||||
+13
|
||||
+1
|
||||
+18
|
||||
-11
|
||||
+4
|
||||
+4
|
||||
+11
|
||||
+9
|
||||
-18
|
||||
-9
|
||||
+13
|
||||
-18
|
||||
+10
|
||||
+3
|
||||
-6
|
||||
-5
|
||||
-10
|
||||
-11
|
||||
-14
|
||||
-2
|
||||
-9
|
||||
+3
|
||||
-4
|
||||
-6
|
||||
+13
|
||||
-2
|
||||
-17
|
||||
-4
|
||||
+7
|
||||
+6
|
||||
-12
|
||||
-7
|
||||
+14
|
||||
-6
|
||||
-18
|
||||
+19
|
||||
-18
|
||||
-2
|
||||
-13
|
||||
+6
|
||||
-15
|
||||
+14
|
||||
+7
|
||||
+9
|
||||
-14
|
||||
+9
|
||||
-19
|
||||
+1
|
||||
+13
|
||||
-2
|
||||
-10
|
||||
-11
|
||||
+13
|
||||
-6
|
||||
-6
|
||||
+19
|
||||
+10
|
||||
+17
|
||||
-8
|
||||
-7
|
||||
+19
|
||||
+16
|
||||
-1
|
||||
+7
|
||||
+16
|
||||
-15
|
||||
-17
|
||||
+12
|
||||
+16
|
||||
-2
|
||||
+14
|
||||
-3
|
||||
-16
|
||||
-17
|
||||
-5
|
||||
+16
|
||||
+29
|
||||
-3
|
||||
-2
|
||||
+13
|
||||
-18
|
||||
+15
|
||||
-4
|
||||
-14
|
||||
-12
|
||||
-16
|
||||
-19
|
||||
+39
|
||||
-9
|
||||
+19
|
||||
+3
|
||||
-11
|
||||
+10
|
||||
+12
|
||||
+19
|
||||
-4
|
||||
+12
|
||||
+13
|
||||
+19
|
||||
+3
|
||||
-19
|
||||
+9
|
||||
-16
|
||||
+10
|
||||
+18
|
||||
+12
|
||||
-6
|
||||
-2
|
||||
-11
|
||||
+20
|
||||
+15
|
||||
+15
|
||||
+4
|
||||
+12
|
||||
-38
|
||||
+9
|
||||
+33
|
||||
+24
|
||||
+6
|
||||
+4
|
||||
-36
|
||||
-47
|
||||
-15
|
||||
-13
|
||||
-3
|
||||
+1
|
||||
+12
|
||||
+14
|
||||
+9
|
||||
-32
|
||||
+7
|
||||
-16
|
||||
-5
|
||||
-29
|
||||
+12
|
||||
-2
|
||||
+15
|
||||
-12
|
||||
-11
|
||||
-39
|
||||
-40
|
||||
+3
|
||||
-34
|
||||
-5
|
||||
+78
|
||||
+4
|
||||
+52
|
||||
+1
|
||||
+90
|
||||
+112
|
||||
+152
|
||||
-80
|
||||
+81800
|
||||
-18
|
||||
+15
|
||||
-9
|
||||
+11
|
||||
+2
|
||||
-5
|
||||
+16
|
||||
-5
|
||||
+15
|
||||
-1
|
||||
+2
|
||||
-14
|
||||
-7
|
||||
+12
|
||||
-10
|
||||
-9
|
||||
+20
|
||||
+14
|
||||
-9
|
||||
+12
|
||||
+9
|
||||
+13
|
||||
+3
|
||||
+11
|
||||
+14
|
||||
-3
|
||||
+10
|
||||
+8
|
||||
+12
|
||||
+5
|
||||
+10
|
||||
+1
|
||||
+14
|
||||
-5
|
||||
+1
|
||||
-4
|
||||
-13
|
||||
+9
|
||||
+18
|
||||
+17
|
||||
+16
|
||||
+9
|
||||
-1
|
||||
-10
|
||||
+13
|
||||
+13
|
||||
+11
|
||||
-18
|
||||
+15
|
||||
-9
|
||||
-13
|
||||
+3
|
||||
+1
|
||||
+11
|
||||
-3
|
||||
-10
|
||||
+19
|
||||
-11
|
||||
+13
|
||||
+12
|
||||
-8
|
||||
-10
|
||||
-6
|
||||
+13
|
||||
+5
|
||||
-13
|
||||
-7
|
||||
-1
|
||||
+18
|
||||
+7
|
||||
+14
|
||||
-2
|
||||
+5
|
||||
+1
|
||||
+16
|
||||
-7
|
||||
+18
|
||||
+13
|
||||
-6
|
||||
+18
|
||||
-1
|
||||
+12
|
||||
-4
|
||||
-10
|
||||
+7
|
||||
-15
|
||||
-9
|
||||
-7
|
||||
-7
|
||||
-6
|
||||
+11
|
||||
-16
|
||||
+7
|
||||
-4
|
||||
+11
|
||||
-4
|
||||
-6
|
||||
-14
|
||||
+1
|
||||
+6
|
||||
-3
|
||||
+2
|
||||
+21
|
||||
+12
|
||||
-16
|
||||
+18
|
||||
-5
|
||||
+17
|
||||
+4
|
||||
+19
|
||||
+6
|
||||
-13
|
||||
+17
|
||||
-3
|
||||
-2
|
||||
-17
|
||||
+7
|
||||
-3
|
||||
-7
|
||||
+14
|
||||
+17
|
||||
+8
|
||||
+7
|
||||
-17
|
||||
+18
|
||||
-15
|
||||
-4
|
||||
+7
|
||||
+2
|
||||
+1
|
||||
-14
|
||||
-1
|
||||
-6
|
||||
+9
|
||||
-10
|
||||
-4
|
||||
+15
|
||||
-14
|
||||
-18
|
||||
-14
|
||||
-9
|
||||
-11
|
||||
+9
|
||||
+3
|
||||
+12
|
||||
+1
|
||||
+3
|
||||
-10
|
||||
-15
|
||||
+7
|
||||
+6
|
||||
+13
|
||||
+9
|
||||
+7
|
||||
-4
|
||||
+9
|
||||
-14
|
||||
+21
|
||||
-9
|
||||
+24
|
||||
+10
|
||||
+6
|
||||
+6
|
||||
-19
|
||||
+22
|
||||
-10
|
||||
-18
|
||||
+10
|
||||
+14
|
||||
-4
|
||||
+3
|
||||
+7
|
||||
+14
|
||||
+11
|
||||
+16
|
||||
-10
|
||||
+11
|
||||
-9
|
||||
-5
|
||||
-6
|
||||
-2
|
||||
-15
|
||||
+3
|
||||
-16
|
||||
+19
|
||||
+8
|
||||
+2
|
||||
-17
|
||||
+3
|
||||
+5
|
||||
+14
|
||||
-16
|
||||
-4
|
||||
-5
|
||||
+1
|
||||
-3
|
||||
+4
|
||||
+6
|
||||
+18
|
||||
+16
|
||||
+4
|
||||
-18
|
||||
+6
|
||||
+10
|
||||
-6
|
||||
+1
|
||||
+6
|
||||
+9
|
||||
+17
|
||||
-8
|
||||
-15
|
||||
-12
|
||||
+1
|
||||
-6
|
||||
+4
|
||||
+12
|
||||
+2
|
||||
+17
|
||||
-9
|
||||
-7
|
||||
+10
|
||||
+12
|
||||
+17
|
||||
+8
|
||||
+15
|
||||
+7
|
||||
-18
|
||||
-1
|
||||
+4
|
||||
+13
|
||||
-3
|
||||
+16
|
||||
+4
|
||||
+2
|
||||
-8
|
||||
-5
|
||||
+14
|
||||
+10
|
||||
+18
|
||||
-15
|
||||
+19
|
||||
-11
|
||||
-4
|
||||
-16
|
||||
+13
|
||||
+16
|
||||
-15
|
||||
+10
|
||||
-20
|
||||
-7
|
||||
-15
|
||||
-10
|
||||
-2
|
||||
-6
|
||||
+19
|
||||
-3
|
||||
-9
|
||||
-18
|
||||
+12
|
||||
-8
|
||||
+3
|
||||
+13
|
||||
+20
|
||||
+18
|
||||
-16
|
||||
+15
|
||||
+12
|
||||
+1
|
||||
-18
|
||||
+10
|
||||
-14
|
||||
-17
|
||||
-7
|
||||
-9
|
||||
-20
|
||||
+8
|
||||
-9
|
||||
+7
|
||||
-11
|
||||
-19
|
||||
+7
|
||||
-14
|
||||
+6
|
||||
+4
|
||||
+14
|
||||
+8
|
||||
-11
|
||||
+2
|
||||
-1
|
||||
-19
|
||||
+16
|
||||
+9
|
||||
-10
|
||||
+20
|
||||
+12
|
||||
+11
|
||||
+13
|
||||
-3
|
||||
-2
|
||||
+3
|
||||
-20
|
||||
+6
|
||||
-17
|
||||
+3
|
||||
-9
|
||||
-6
|
||||
-16
|
||||
+7
|
||||
+7
|
||||
-23
|
||||
-6
|
||||
+14
|
||||
-3
|
||||
-31
|
||||
-18
|
||||
-19
|
||||
-12
|
||||
-26
|
||||
+23
|
||||
+9
|
||||
-7
|
||||
-10
|
||||
+22
|
||||
+17
|
||||
+17
|
||||
-7
|
||||
-8
|
||||
+9
|
||||
+28
|
||||
+5
|
||||
+24
|
||||
-28
|
||||
+36
|
||||
+37
|
||||
+7
|
||||
+12
|
||||
+19
|
||||
+15
|
||||
-3
|
||||
-20
|
||||
+17
|
||||
+18
|
||||
+4
|
||||
-8
|
||||
+9
|
||||
-4
|
||||
-2
|
||||
-19
|
||||
+11
|
||||
-1
|
||||
+3
|
||||
-7
|
||||
+8
|
||||
+9
|
||||
-8
|
||||
+19
|
||||
+9
|
||||
+12
|
||||
-11
|
||||
-5
|
||||
-13
|
||||
+9
|
||||
-6
|
||||
+7
|
||||
+17
|
||||
-13
|
||||
+16
|
||||
+10
|
||||
-5
|
||||
+20
|
||||
+6
|
||||
-1
|
||||
+17
|
||||
-14
|
||||
+10
|
||||
+18
|
||||
-1
|
||||
+3
|
||||
-10
|
||||
-4
|
||||
-10
|
||||
-10
|
||||
-16
|
||||
-2
|
||||
+7
|
||||
+16
|
||||
-12
|
||||
+6
|
||||
+8
|
||||
+22
|
||||
+7
|
||||
-6
|
||||
-13
|
||||
-14
|
||||
+10
|
||||
-1
|
||||
-21
|
||||
-1
|
||||
+8
|
||||
-15
|
||||
+9
|
||||
-17
|
||||
-2
|
||||
-21
|
||||
+4
|
||||
-19
|
||||
-13
|
||||
-8
|
||||
+26
|
||||
+4
|
||||
-27
|
||||
-8
|
||||
+2
|
||||
+30
|
||||
-11
|
||||
-82484
|
||||
46
advent_of_code_2018/day1/main2.cc
Executable file
46
advent_of_code_2018/day1/main2.cc
Executable file
|
|
@ -0,0 +1,46 @@
|
|||
#include <iostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int read()
|
||||
{
|
||||
string line;
|
||||
getline(cin, line);
|
||||
|
||||
bool plus = line[0] == '+';
|
||||
int val = stoi(line.substr(1));
|
||||
|
||||
return plus ? val : -val;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<int> sequence;
|
||||
while (!cin.eof())
|
||||
sequence.push_back(read());
|
||||
|
||||
// cout << "Buffered " << sequence.size() << " frequencies\n";
|
||||
|
||||
int total = 0;
|
||||
set<int> used;
|
||||
used.insert(0);
|
||||
|
||||
while (true)
|
||||
{
|
||||
for (int i : sequence)
|
||||
{
|
||||
total += i;
|
||||
|
||||
if (used.find(total) != used.end())
|
||||
{
|
||||
cout << "Found first repeating frequency: " << total << "\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
used.insert(total);
|
||||
}
|
||||
}
|
||||
}
|
||||
385
advent_of_code_2018/day10/input.in
Normal file
385
advent_of_code_2018/day10/input.in
Normal file
|
|
@ -0,0 +1,385 @@
|
|||
position=<-52592, 31869> velocity=< 5, -3>
|
||||
position=<-20934, 52988> velocity=< 2, -5>
|
||||
position=<-20910, 31871> velocity=< 2, -3>
|
||||
position=<-31503, -52596> velocity=< 3, 5>
|
||||
position=<-42061, -10364> velocity=< 4, 1>
|
||||
position=< 10776, -31475> velocity=<-1, 3>
|
||||
position=<-10348, 31875> velocity=< 1, -3>
|
||||
position=< 52969, 52985> velocity=<-5, -5>
|
||||
position=< 31848, -10366> velocity=<-3, 1>
|
||||
position=<-10376, -10366> velocity=< 1, 1>
|
||||
position=<-10376, -31474> velocity=< 1, 3>
|
||||
position=<-42058, 52990> velocity=< 4, -5>
|
||||
position=<-52628, -10358> velocity=< 5, 1>
|
||||
position=<-52630, 52985> velocity=< 5, -5>
|
||||
position=< 31888, -31474> velocity=<-3, 3>
|
||||
position=<-31492, 42429> velocity=< 3, -4>
|
||||
position=< 31892, 52988> velocity=<-3, -5>
|
||||
position=< 52961, 52989> velocity=<-5, -5>
|
||||
position=<-20908, -42031> velocity=< 2, 4>
|
||||
position=<-52627, 10759> velocity=< 5, -1>
|
||||
position=< 21307, -42034> velocity=<-2, 4>
|
||||
position=<-20937, -31475> velocity=< 2, 3>
|
||||
position=< 21315, -52594> velocity=<-2, 5>
|
||||
position=< 10744, -10366> velocity=<-1, 1>
|
||||
position=< 21287, -10358> velocity=<-2, 1>
|
||||
position=< 21298, -31478> velocity=<-2, 3>
|
||||
position=<-10384, 31866> velocity=< 1, -3>
|
||||
position=< 52953, -10364> velocity=<-5, 1>
|
||||
position=<-42029, -52597> velocity=< 4, 5>
|
||||
position=< 21319, 10757> velocity=<-2, -1>
|
||||
position=<-10352, 21310> velocity=< 1, -2>
|
||||
position=<-10395, -42034> velocity=< 1, 4>
|
||||
position=< 10756, 31873> velocity=<-1, -3>
|
||||
position=<-10384, 42425> velocity=< 1, -4>
|
||||
position=<-42050, 42427> velocity=< 4, -4>
|
||||
position=< 31866, 10759> velocity=<-3, -1>
|
||||
position=<-52592, -10357> velocity=< 5, 1>
|
||||
position=<-42066, 31874> velocity=< 4, -3>
|
||||
position=<-52605, -20924> velocity=< 5, 2>
|
||||
position=< 21274, 10753> velocity=<-2, -1>
|
||||
position=<-20933, 42433> velocity=< 2, -4>
|
||||
position=< 52961, -10365> velocity=<-5, 1>
|
||||
position=<-20913, -20923> velocity=< 2, 2>
|
||||
position=< 10716, -42039> velocity=<-1, 4>
|
||||
position=<-42070, 21315> velocity=< 4, -2>
|
||||
position=<-42040, 31875> velocity=< 4, -3>
|
||||
position=<-42029, 52989> velocity=< 4, -5>
|
||||
position=< 52953, -20917> velocity=<-5, 2>
|
||||
position=<-42058, -10364> velocity=< 4, 1>
|
||||
position=<-52574, -42031> velocity=< 5, 4>
|
||||
position=<-52600, -42032> velocity=< 5, 4>
|
||||
position=< 10740, -52598> velocity=<-1, 5>
|
||||
position=< 42438, -20919> velocity=<-4, 2>
|
||||
position=<-20937, -31477> velocity=< 2, 3>
|
||||
position=<-42072, 42427> velocity=< 4, -4>
|
||||
position=<-20921, -52598> velocity=< 2, 5>
|
||||
position=<-52619, -20918> velocity=< 5, 2>
|
||||
position=<-31467, -20915> velocity=< 3, 2>
|
||||
position=<-42066, -10366> velocity=< 4, 1>
|
||||
position=< 21334, -42035> velocity=<-2, 4>
|
||||
position=< 21309, 21317> velocity=<-2, -2>
|
||||
position=< 42414, -10364> velocity=<-4, 1>
|
||||
position=< 21290, 21311> velocity=<-2, -2>
|
||||
position=< 52972, -20917> velocity=<-5, 2>
|
||||
position=< 10776, 10755> velocity=<-1, -1>
|
||||
position=< 21298, -10363> velocity=<-2, 1>
|
||||
position=< 42430, 52986> velocity=<-4, -5>
|
||||
position=< 21294, 21312> velocity=<-2, -2>
|
||||
position=< 10752, -10357> velocity=<-1, 1>
|
||||
position=< 42438, 21315> velocity=<-4, -2>
|
||||
position=<-42050, -20915> velocity=< 4, 2>
|
||||
position=<-31504, -52598> velocity=< 3, 5>
|
||||
position=< 52999, 21317> velocity=<-5, -2>
|
||||
position=<-10390, -10362> velocity=< 1, 1>
|
||||
position=< 21300, 10754> velocity=<-2, -1>
|
||||
position=<-20933, -10366> velocity=< 2, 1>
|
||||
position=< 10725, -10366> velocity=<-1, 1>
|
||||
position=< 10737, 31874> velocity=<-1, -3>
|
||||
position=<-20913, 10758> velocity=< 2, -1>
|
||||
position=<-42063, 21312> velocity=< 4, -2>
|
||||
position=<-10358, 10754> velocity=< 1, -1>
|
||||
position=< 21334, 52986> velocity=<-2, -5>
|
||||
position=< 42430, 31871> velocity=<-4, -3>
|
||||
position=< 21319, 21310> velocity=<-2, -2>
|
||||
position=< 21290, -52592> velocity=<-2, 5>
|
||||
position=< 21295, 10753> velocity=<-2, -1>
|
||||
position=< 42390, -42036> velocity=<-4, 4>
|
||||
position=< 10721, 52990> velocity=<-1, -5>
|
||||
position=< 21285, -52598> velocity=<-2, 5>
|
||||
position=< 31837, -42037> velocity=<-3, 4>
|
||||
position=<-42018, 52989> velocity=< 4, -5>
|
||||
position=<-10355, 31871> velocity=< 1, -3>
|
||||
position=< 42411, -31477> velocity=<-4, 3>
|
||||
position=<-52632, 42428> velocity=< 5, -4>
|
||||
position=< 42441, 10759> velocity=<-4, -1>
|
||||
position=<-52624, -10365> velocity=< 5, 1>
|
||||
position=<-10360, -42038> velocity=< 1, 4>
|
||||
position=< 21314, 21311> velocity=<-2, -2>
|
||||
position=< 52988, 42430> velocity=<-5, -4>
|
||||
position=<-10350, -31482> velocity=< 1, 3>
|
||||
position=<-52592, 10753> velocity=< 5, -1>
|
||||
position=<-20954, -52590> velocity=< 2, 5>
|
||||
position=<-52611, -42033> velocity=< 5, 4>
|
||||
position=< 31841, 42424> velocity=<-3, -4>
|
||||
position=< 10729, 52990> velocity=<-1, -5>
|
||||
position=< 31837, 42426> velocity=<-3, -4>
|
||||
position=<-20958, 42429> velocity=< 2, -4>
|
||||
position=< 10737, 42432> velocity=<-1, -4>
|
||||
position=<-52624, -31477> velocity=< 5, 3>
|
||||
position=<-20949, 10754> velocity=< 2, -1>
|
||||
position=< 10729, -20923> velocity=<-1, 2>
|
||||
position=< 31892, -52597> velocity=<-3, 5>
|
||||
position=<-10355, 21314> velocity=< 1, -2>
|
||||
position=< 52960, 42428> velocity=<-5, -4>
|
||||
position=<-52587, 42424> velocity=< 5, -4>
|
||||
position=<-52592, 52983> velocity=< 5, -5>
|
||||
position=< 31832, 21315> velocity=<-3, -2>
|
||||
position=< 52956, -10362> velocity=<-5, 1>
|
||||
position=< 52992, 42428> velocity=<-5, -4>
|
||||
position=< 10749, -20924> velocity=<-1, 2>
|
||||
position=<-31504, 21308> velocity=< 3, -2>
|
||||
position=<-20950, -42032> velocity=< 2, 4>
|
||||
position=<-20907, 31866> velocity=< 2, -3>
|
||||
position=<-52624, 42432> velocity=< 5, -4>
|
||||
position=< 31865, -10357> velocity=<-3, 1>
|
||||
position=<-52611, 52988> velocity=< 5, -5>
|
||||
position=< 42441, 31866> velocity=<-4, -3>
|
||||
position=< 42438, 21309> velocity=<-4, -2>
|
||||
position=< 42398, 21310> velocity=<-4, -2>
|
||||
position=<-10352, -10360> velocity=< 1, 1>
|
||||
position=<-42050, -42036> velocity=< 4, 4>
|
||||
position=< 52948, 42429> velocity=<-5, -4>
|
||||
position=< 52993, 21311> velocity=<-5, -2>
|
||||
position=<-10384, -52598> velocity=< 1, 5>
|
||||
position=<-42029, -31473> velocity=< 4, 3>
|
||||
position=<-10375, -52589> velocity=< 1, 5>
|
||||
position=<-31460, -31475> velocity=< 3, 3>
|
||||
position=< 42418, -31473> velocity=<-4, 3>
|
||||
position=<-10392, 52984> velocity=< 1, -5>
|
||||
position=< 10767, 10750> velocity=<-1, -1>
|
||||
position=<-52573, 52991> velocity=< 5, -5>
|
||||
position=<-52611, 52984> velocity=< 5, -5>
|
||||
position=<-52592, 42431> velocity=< 5, -4>
|
||||
position=<-10380, 21312> velocity=< 1, -2>
|
||||
position=<-42029, -42038> velocity=< 4, 4>
|
||||
position=<-42056, -10362> velocity=< 4, 1>
|
||||
position=<-42041, -20915> velocity=< 4, 2>
|
||||
position=<-10395, 31868> velocity=< 1, -3>
|
||||
position=<-42045, 52991> velocity=< 4, -5>
|
||||
position=< 21319, 21313> velocity=<-2, -2>
|
||||
position=< 31844, -20920> velocity=<-3, 2>
|
||||
position=<-20918, 52990> velocity=< 2, -5>
|
||||
position=<-31514, -52595> velocity=< 3, 5>
|
||||
position=< 10752, 31869> velocity=<-1, -3>
|
||||
position=<-42034, -52597> velocity=< 4, 5>
|
||||
position=< 10733, -20920> velocity=<-1, 2>
|
||||
position=<-31476, 21309> velocity=< 3, -2>
|
||||
position=< 10716, -42037> velocity=<-1, 4>
|
||||
position=< 10720, 42431> velocity=<-1, -4>
|
||||
position=<-20909, -20915> velocity=< 2, 2>
|
||||
position=<-52627, 10750> velocity=< 5, -1>
|
||||
position=<-31489, -52589> velocity=< 3, 5>
|
||||
position=< 10756, -20915> velocity=<-1, 2>
|
||||
position=<-31483, -20918> velocity=< 3, 2>
|
||||
position=< 31861, 10759> velocity=<-3, -1>
|
||||
position=<-31471, 21308> velocity=< 3, -2>
|
||||
position=< 52948, -42040> velocity=<-5, 4>
|
||||
position=< 21302, -31478> velocity=<-2, 3>
|
||||
position=<-52587, -31476> velocity=< 5, 3>
|
||||
position=< 21308, -31477> velocity=<-2, 3>
|
||||
position=<-31492, 42429> velocity=< 3, -4>
|
||||
position=<-31513, -31476> velocity=< 3, 3>
|
||||
position=<-10388, -52598> velocity=< 1, 5>
|
||||
position=<-20953, 31867> velocity=< 2, -3>
|
||||
position=<-42038, -20921> velocity=< 4, 2>
|
||||
position=< 10732, 31870> velocity=<-1, -3>
|
||||
position=< 52964, -52595> velocity=<-5, 5>
|
||||
position=< 21284, 10750> velocity=<-2, -1>
|
||||
position=< 21299, 21317> velocity=<-2, -2>
|
||||
position=<-42041, 31872> velocity=< 4, -3>
|
||||
position=<-10360, 10750> velocity=< 1, -1>
|
||||
position=< 10774, 10759> velocity=<-1, -1>
|
||||
position=< 42406, 42429> velocity=<-4, -4>
|
||||
position=<-42022, 42433> velocity=< 4, -4>
|
||||
position=<-52606, 42428> velocity=< 5, -4>
|
||||
position=< 31832, -31476> velocity=<-3, 3>
|
||||
position=< 21295, -20923> velocity=<-2, 2>
|
||||
position=<-42050, -42039> velocity=< 4, 4>
|
||||
position=< 21284, -52594> velocity=<-2, 5>
|
||||
position=<-42034, -42035> velocity=< 4, 4>
|
||||
position=< 21279, 21313> velocity=<-2, -2>
|
||||
position=< 31880, 42427> velocity=<-3, -4>
|
||||
position=<-31484, 21317> velocity=< 3, -2>
|
||||
position=< 42391, -20922> velocity=<-4, 2>
|
||||
position=<-42058, -10365> velocity=< 4, 1>
|
||||
position=< 42409, 52986> velocity=<-4, -5>
|
||||
position=<-20918, 42431> velocity=< 2, -4>
|
||||
position=< 31851, 21312> velocity=<-3, -2>
|
||||
position=<-10387, -31479> velocity=< 1, 3>
|
||||
position=<-42033, -31478> velocity=< 4, 3>
|
||||
position=<-42047, -42036> velocity=< 4, 4>
|
||||
position=< 21301, -31482> velocity=<-2, 3>
|
||||
position=<-10365, -31473> velocity=< 1, 3>
|
||||
position=<-31471, -42031> velocity=< 3, 4>
|
||||
position=<-42074, -10357> velocity=< 4, 1>
|
||||
position=<-31500, 10758> velocity=< 3, -1>
|
||||
position=< 21311, 10751> velocity=<-2, -1>
|
||||
position=< 42398, -10362> velocity=<-4, 1>
|
||||
position=<-20921, 42424> velocity=< 2, -4>
|
||||
position=< 52985, -52597> velocity=<-5, 5>
|
||||
position=<-42073, 52983> velocity=< 4, -5>
|
||||
position=< 42390, 31874> velocity=<-4, -3>
|
||||
position=<-42061, -10360> velocity=< 4, 1>
|
||||
position=< 21301, 42428> velocity=<-2, -4>
|
||||
position=<-20942, -20917> velocity=< 2, 2>
|
||||
position=<-10350, -52589> velocity=< 1, 5>
|
||||
position=<-52595, 31875> velocity=< 5, -3>
|
||||
position=< 42432, -52594> velocity=<-4, 5>
|
||||
position=<-20937, -20924> velocity=< 2, 2>
|
||||
position=< 42395, 31873> velocity=<-4, -3>
|
||||
position=<-31508, 42433> velocity=< 3, -4>
|
||||
position=< 10751, -31473> velocity=<-1, 3>
|
||||
position=<-42032, 52986> velocity=< 4, -5>
|
||||
position=< 42447, -10357> velocity=<-4, 1>
|
||||
position=<-42048, 42428> velocity=< 4, -4>
|
||||
position=<-10344, -42032> velocity=< 1, 4>
|
||||
position=< 21290, -42034> velocity=<-2, 4>
|
||||
position=<-42014, -42037> velocity=< 4, 4>
|
||||
position=<-20906, -42040> velocity=< 2, 4>
|
||||
position=< 10721, -20920> velocity=<-1, 2>
|
||||
position=<-10379, 42433> velocity=< 1, -4>
|
||||
position=< 21319, 52986> velocity=<-2, -5>
|
||||
position=<-10368, 42431> velocity=< 1, -4>
|
||||
position=<-20950, -20924> velocity=< 2, 2>
|
||||
position=< 31877, -52595> velocity=<-3, 5>
|
||||
position=<-31482, 42429> velocity=< 3, -4>
|
||||
position=< 21334, 42432> velocity=<-2, -4>
|
||||
position=<-10364, 42427> velocity=< 1, -4>
|
||||
position=<-42074, 10755> velocity=< 4, -1>
|
||||
position=< 21300, -10366> velocity=<-2, 1>
|
||||
position=< 42408, 10754> velocity=<-4, -1>
|
||||
position=< 10732, 10753> velocity=<-1, -1>
|
||||
position=<-52632, 21310> velocity=< 5, -2>
|
||||
position=< 10740, -20920> velocity=<-1, 2>
|
||||
position=< 52956, 42429> velocity=<-5, -4>
|
||||
position=< 10756, -52598> velocity=<-1, 5>
|
||||
position=<-31506, 52991> velocity=< 3, -5>
|
||||
position=< 10724, 10751> velocity=<-1, -1>
|
||||
position=<-20921, 21310> velocity=< 2, -2>
|
||||
position=<-20946, -42031> velocity=< 2, 4>
|
||||
position=< 42435, 52986> velocity=<-4, -5>
|
||||
position=<-42037, -31473> velocity=< 4, 3>
|
||||
position=< 21287, -52592> velocity=<-2, 5>
|
||||
position=< 10717, -42039> velocity=<-1, 4>
|
||||
position=<-52627, 31872> velocity=< 5, -3>
|
||||
position=< 31875, 52986> velocity=<-3, -5>
|
||||
position=< 42411, -42036> velocity=<-4, 4>
|
||||
position=< 52964, -20915> velocity=<-5, 2>
|
||||
position=<-31488, 42428> velocity=< 3, -4>
|
||||
position=< 42426, 21308> velocity=<-4, -2>
|
||||
position=<-52579, 10751> velocity=< 5, -1>
|
||||
position=<-42014, 10753> velocity=< 4, -1>
|
||||
position=<-42034, 10752> velocity=< 4, -1>
|
||||
position=< 21275, 42425> velocity=<-2, -4>
|
||||
position=<-10350, -10366> velocity=< 1, 1>
|
||||
position=<-52628, -52591> velocity=< 5, 5>
|
||||
position=< 31845, -52591> velocity=<-3, 5>
|
||||
position=< 21285, -31473> velocity=<-2, 3>
|
||||
position=< 21319, 21312> velocity=<-2, -2>
|
||||
position=< 42427, -31480> velocity=<-4, 3>
|
||||
position=< 52956, -52591> velocity=<-5, 5>
|
||||
position=<-10389, 52986> velocity=< 1, -5>
|
||||
position=< 42400, 10754> velocity=<-4, -1>
|
||||
position=<-31508, -10362> velocity=< 3, 1>
|
||||
position=< 10740, 10756> velocity=<-1, -1>
|
||||
position=<-20898, 42424> velocity=< 2, -4>
|
||||
position=< 21319, -42031> velocity=<-2, 4>
|
||||
position=<-52574, 10759> velocity=< 5, -1>
|
||||
position=< 21274, -31476> velocity=<-2, 3>
|
||||
position=<-31463, -10358> velocity=< 3, 1>
|
||||
position=<-20950, 21311> velocity=< 2, -2>
|
||||
position=<-52600, -31474> velocity=< 5, 3>
|
||||
position=< 31864, 42431> velocity=<-3, -4>
|
||||
position=< 21279, 21316> velocity=<-2, -2>
|
||||
position=< 21287, 42426> velocity=<-2, -4>
|
||||
position=< 10716, 10754> velocity=<-1, -1>
|
||||
position=<-42042, 52989> velocity=< 4, -5>
|
||||
position=<-31492, 42427> velocity=< 3, -4>
|
||||
position=< 21298, -10364> velocity=<-2, 1>
|
||||
position=<-42040, 21308> velocity=< 4, -2>
|
||||
position=<-42045, 10750> velocity=< 4, -1>
|
||||
position=< 31835, -20919> velocity=<-3, 2>
|
||||
position=< 10773, 42433> velocity=<-1, -4>
|
||||
position=< 42443, 10758> velocity=<-4, -1>
|
||||
position=< 52973, -52598> velocity=<-5, 5>
|
||||
position=< 21295, -52592> velocity=<-2, 5>
|
||||
position=<-10392, 31868> velocity=< 1, -3>
|
||||
position=< 21282, -42031> velocity=<-2, 4>
|
||||
position=< 10737, -20920> velocity=<-1, 2>
|
||||
position=< 52985, 31875> velocity=<-5, -3>
|
||||
position=<-42049, -20920> velocity=< 4, 2>
|
||||
position=< 52992, 10754> velocity=<-5, -1>
|
||||
position=< 10716, 31866> velocity=<-1, -3>
|
||||
position=< 31884, -20924> velocity=<-3, 2>
|
||||
position=< 42442, -20924> velocity=<-4, 2>
|
||||
position=< 10732, -10361> velocity=<-1, 1>
|
||||
position=<-31508, 10756> velocity=< 3, -1>
|
||||
position=< 31872, 21314> velocity=<-3, -2>
|
||||
position=<-42042, 10750> velocity=< 4, -1>
|
||||
position=<-42069, 21315> velocity=< 4, -2>
|
||||
position=<-20898, -10365> velocity=< 2, 1>
|
||||
position=<-42071, -20918> velocity=< 4, 2>
|
||||
position=< 10752, -10357> velocity=<-1, 1>
|
||||
position=<-20946, -10362> velocity=< 2, 1>
|
||||
position=<-52572, -10358> velocity=< 5, 1>
|
||||
position=< 10716, 42424> velocity=<-1, -4>
|
||||
position=<-52611, 42426> velocity=< 5, -4>
|
||||
position=< 31856, 52991> velocity=<-3, -5>
|
||||
position=< 10750, 52982> velocity=<-1, -5>
|
||||
position=<-31495, -52598> velocity=< 3, 5>
|
||||
position=< 52975, 21308> velocity=<-5, -2>
|
||||
position=< 10729, -20919> velocity=<-1, 2>
|
||||
position=<-52620, 10759> velocity=< 5, -1>
|
||||
position=< 10751, -10366> velocity=<-1, 1>
|
||||
position=<-20898, -52591> velocity=< 2, 5>
|
||||
position=<-42023, 52991> velocity=< 4, -5>
|
||||
position=<-31500, 31875> velocity=< 3, -3>
|
||||
position=<-52584, 52990> velocity=< 5, -5>
|
||||
position=< 21314, 52990> velocity=<-2, -5>
|
||||
position=< 10776, 21309> velocity=<-1, -2>
|
||||
position=<-10376, 31875> velocity=< 1, -3>
|
||||
position=<-20946, -52589> velocity=< 2, 5>
|
||||
position=<-52628, -52590> velocity=< 5, 5>
|
||||
position=< 52988, -31474> velocity=<-5, 3>
|
||||
position=<-31491, -42040> velocity=< 3, 4>
|
||||
position=<-20918, -42036> velocity=< 2, 4>
|
||||
position=<-20947, 10754> velocity=< 2, -1>
|
||||
position=< 52953, -31474> velocity=<-5, 3>
|
||||
position=<-42031, 31870> velocity=< 4, -3>
|
||||
position=<-52583, 42424> velocity=< 5, -4>
|
||||
position=< 42393, -20919> velocity=<-4, 2>
|
||||
position=< 42411, 10750> velocity=<-4, -1>
|
||||
position=< 10716, -42032> velocity=<-1, 4>
|
||||
position=<-31503, 42429> velocity=< 3, -4>
|
||||
position=<-42053, 10753> velocity=< 4, -1>
|
||||
position=<-31481, -20920> velocity=< 3, 2>
|
||||
position=<-31468, -31481> velocity=< 3, 3>
|
||||
position=< 21284, -20924> velocity=<-2, 2>
|
||||
position=< 42409, -42036> velocity=<-4, 4>
|
||||
position=<-42063, 31875> velocity=< 4, -3>
|
||||
position=< 42450, -10358> velocity=<-4, 1>
|
||||
position=<-20897, -52598> velocity=< 2, 5>
|
||||
position=< 42407, -10362> velocity=<-4, 1>
|
||||
position=< 52983, 10754> velocity=<-5, -1>
|
||||
position=< 52969, -31477> velocity=<-5, 3>
|
||||
position=< 53000, -10357> velocity=<-5, 1>
|
||||
position=<-52619, -31475> velocity=< 5, 3>
|
||||
position=< 10756, 10756> velocity=<-1, -1>
|
||||
position=< 31889, -42031> velocity=<-3, 4>
|
||||
position=<-31511, 52985> velocity=< 3, -5>
|
||||
position=<-31511, 42425> velocity=< 3, -4>
|
||||
position=< 21322, -31476> velocity=<-2, 3>
|
||||
position=< 10764, 21312> velocity=<-1, -2>
|
||||
position=< 10724, 21314> velocity=<-1, -2>
|
||||
position=< 53001, 10758> velocity=<-5, -1>
|
||||
position=<-52607, -10362> velocity=< 5, 1>
|
||||
position=<-31482, -20919> velocity=< 3, 2>
|
||||
position=< 21276, 10754> velocity=<-2, -1>
|
||||
position=< 42426, 21317> velocity=<-4, -2>
|
||||
position=< 21299, -10362> velocity=<-2, 1>
|
||||
position=< 42450, -20922> velocity=<-4, 2>
|
||||
position=< 10719, 10755> velocity=<-1, -1>
|
||||
position=<-52623, 10759> velocity=< 5, -1>
|
||||
position=< 31840, -42040> velocity=<-3, 4>
|
||||
position=< 10724, -20918> velocity=<-1, 2>
|
||||
position=<-10341, 21308> velocity=< 1, -2>
|
||||
position=< 42403, -10365> velocity=<-4, 1>
|
||||
position=< 31877, 31866> velocity=<-3, -3>
|
||||
position=<-42048, 31875> velocity=< 4, -3>
|
||||
position=< 52953, 52986> velocity=<-5, -5>
|
||||
position=<-10340, -10360> velocity=< 1, 1>
|
||||
position=< 31869, 10752> velocity=<-3, -1>
|
||||
position=<-52612, 21312> velocity=< 5, -2>
|
||||
position=<-42053, -52592> velocity=< 4, 5>
|
||||
position=<-31490, 10750> velocity=< 3, -1>
|
||||
49
advent_of_code_2018/day10/main.ih
Normal file
49
advent_of_code_2018/day10/main.ih
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Position
|
||||
{
|
||||
int xpos;
|
||||
int ypos;
|
||||
|
||||
Position() : xpos(0), ypos(0) {}
|
||||
};
|
||||
|
||||
struct Velocity
|
||||
{
|
||||
int dx;
|
||||
int dy;
|
||||
|
||||
Velocity() : dx(0), dy(0) {}
|
||||
};
|
||||
|
||||
inline istream &operator>>(istream &in, Position &position)
|
||||
{
|
||||
cin.ignore(10); //ignore 'position=<'
|
||||
cin >> position.xpos;
|
||||
cin.ignore(2); //ignore ', '
|
||||
cin >> position.ypos;
|
||||
cin.ignore(2); //ignore '> '
|
||||
return in;
|
||||
}
|
||||
|
||||
inline istream &operator>>(istream &in, Velocity &velocity)
|
||||
{
|
||||
cin.ignore(10); //ignore 'velocity=<'
|
||||
cin >> velocity.dx;
|
||||
cin.ignore(2); //ignore ', '
|
||||
cin >> velocity.dy;
|
||||
cin.ignore(2); // ignore '>\n'
|
||||
return in;
|
||||
}
|
||||
|
||||
inline Position operator+(Position pos, Velocity const &vel)
|
||||
{
|
||||
pos.xpos += vel.dx;
|
||||
pos.ypos += vel.dy;
|
||||
return pos;
|
||||
}
|
||||
101
advent_of_code_2018/day10/main1.cc
Normal file
101
advent_of_code_2018/day10/main1.cc
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
#include "main.ih"
|
||||
|
||||
struct Star
|
||||
{
|
||||
Position pos;
|
||||
Velocity vel;
|
||||
|
||||
void update()
|
||||
{
|
||||
pos = pos + vel;
|
||||
}
|
||||
};
|
||||
|
||||
Star read_star()
|
||||
{
|
||||
Star rval;
|
||||
cin >> rval.pos;
|
||||
cin >> rval.vel;
|
||||
return rval;
|
||||
}
|
||||
|
||||
size_t grid_size(vector<Star> const &stars)
|
||||
{
|
||||
int minx = numeric_limits<int>::max();
|
||||
int maxx = numeric_limits<int>::min();
|
||||
int miny = minx;
|
||||
int maxy = maxx;
|
||||
|
||||
for (Star const &star : stars)
|
||||
{
|
||||
minx = min(minx, star.pos.xpos);
|
||||
maxx = max(maxx, star.pos.xpos);
|
||||
miny = min(miny, star.pos.ypos);
|
||||
maxy = max(maxy, star.pos.ypos);
|
||||
}
|
||||
|
||||
size_t width = maxx - minx + 1;
|
||||
size_t height = maxy - miny + 1;
|
||||
return width * height;
|
||||
}
|
||||
|
||||
void write_to_console(vector<Star> const &stars)
|
||||
{
|
||||
int minx = numeric_limits<int>::max();
|
||||
int maxx = numeric_limits<int>::min();
|
||||
int miny = minx;
|
||||
int maxy = maxx;
|
||||
|
||||
for (Star const &star : stars)
|
||||
{
|
||||
minx = min(minx, star.pos.xpos);
|
||||
maxx = max(maxx, star.pos.xpos);
|
||||
miny = min(miny, star.pos.ypos);
|
||||
maxy = max(maxy, star.pos.ypos);
|
||||
}
|
||||
|
||||
int xpos = minx;
|
||||
int ypos = miny;
|
||||
int width = maxx - minx + 1;
|
||||
int height = maxy - miny + 1;
|
||||
vector<vector<bool>> grid;
|
||||
grid.resize(width, vector<bool>(height));
|
||||
|
||||
for (Star const &star : stars)
|
||||
grid[star.pos.xpos - xpos][star.pos.ypos - ypos] = true;
|
||||
|
||||
for (int idy = 0; idy < height; ++idy)
|
||||
{
|
||||
for (int idx = 0; idx < width; ++idx)
|
||||
cout << (grid[idx][idy] ? '#' : ' ');
|
||||
cout << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<Star> stars;
|
||||
|
||||
while (!cin.eof())
|
||||
stars.push_back(read_star());
|
||||
|
||||
size_t size = grid_size(stars);
|
||||
for (size_t time = 0; true; ++time)
|
||||
{
|
||||
vector<Star> next_position(stars);
|
||||
for (Star &star : next_position)
|
||||
star.update();
|
||||
|
||||
size_t next_size = grid_size(next_position);
|
||||
|
||||
if (next_size > size)
|
||||
{
|
||||
write_to_console(stars);
|
||||
cout << "That took " << time << " seconds!\n"; // part 2
|
||||
return 0;
|
||||
}
|
||||
|
||||
stars.swap(next_position);
|
||||
size = next_size;
|
||||
}
|
||||
}
|
||||
31
advent_of_code_2018/day10/test.in
Normal file
31
advent_of_code_2018/day10/test.in
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
position=< 9, 1> velocity=< 0, 2>
|
||||
position=< 7, 0> velocity=<-1, 0>
|
||||
position=< 3, -2> velocity=<-1, 1>
|
||||
position=< 6, 10> velocity=<-2, -1>
|
||||
position=< 2, -4> velocity=< 2, 2>
|
||||
position=<-6, 10> velocity=< 2, -2>
|
||||
position=< 1, 8> velocity=< 1, -1>
|
||||
position=< 1, 7> velocity=< 1, 0>
|
||||
position=<-3, 11> velocity=< 1, -2>
|
||||
position=< 7, 6> velocity=<-1, -1>
|
||||
position=<-2, 3> velocity=< 1, 0>
|
||||
position=<-4, 3> velocity=< 2, 0>
|
||||
position=<10, -3> velocity=<-1, 1>
|
||||
position=< 5, 11> velocity=< 1, -2>
|
||||
position=< 4, 7> velocity=< 0, -1>
|
||||
position=< 8, -2> velocity=< 0, 1>
|
||||
position=<15, 0> velocity=<-2, 0>
|
||||
position=< 1, 6> velocity=< 1, 0>
|
||||
position=< 8, 9> velocity=< 0, -1>
|
||||
position=< 3, 3> velocity=<-1, 1>
|
||||
position=< 0, 5> velocity=< 0, -1>
|
||||
position=<-2, 2> velocity=< 2, 0>
|
||||
position=< 5, -2> velocity=< 1, 2>
|
||||
position=< 1, 4> velocity=< 2, 1>
|
||||
position=<-2, 7> velocity=< 2, -2>
|
||||
position=< 3, 6> velocity=<-1, -1>
|
||||
position=< 5, 0> velocity=< 1, 0>
|
||||
position=<-6, 0> velocity=< 2, 0>
|
||||
position=< 5, 9> velocity=< 1, -2>
|
||||
position=<14, 7> velocity=<-2, 0>
|
||||
position=<-3, 6> velocity=< 2, -1>
|
||||
3
advent_of_code_2018/day11/input.in
Normal file
3
advent_of_code_2018/day11/input.in
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
8199
|
||||
300
|
||||
300
|
||||
80
advent_of_code_2018/day11/main.cc
Normal file
80
advent_of_code_2018/day11/main.cc
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int evaluate_square(vector<vector<int>> const &grid, size_t topx, size_t lefty, size_t size = 3)
|
||||
{
|
||||
int sum = 0;
|
||||
|
||||
for (size_t idx = 0; idx != size; ++idx)
|
||||
{
|
||||
for (size_t idy = 0; idy != size; ++idy)
|
||||
sum += grid[topx + idx][lefty + idy];
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
size_t grid_width;
|
||||
size_t grid_height;
|
||||
int grid_serial_number;
|
||||
|
||||
cin >> grid_serial_number;
|
||||
cin >> grid_width;
|
||||
cin >> grid_height;
|
||||
|
||||
vector<vector<int>> grid;
|
||||
grid.resize(grid_width, vector<int>(grid_height, 0));
|
||||
|
||||
for (size_t idy = 0; idy < grid_height; ++idy)
|
||||
{
|
||||
for (size_t idx = 0; idx < grid_width; ++idx)
|
||||
{
|
||||
int rack_id = idx + 11;
|
||||
int powerlevel = rack_id * (idy + 1);
|
||||
|
||||
powerlevel += grid_serial_number;
|
||||
powerlevel *= rack_id;
|
||||
|
||||
string text = to_string(powerlevel);
|
||||
powerlevel = text.size() >= 3 ? (text[text.size() - 3] - '0') : 0;
|
||||
powerlevel -= 5;
|
||||
|
||||
grid[idx][idy] = powerlevel;
|
||||
// cout << setw(4) << powerlevel;
|
||||
}
|
||||
// cout << "\n";
|
||||
}
|
||||
|
||||
int top_value = numeric_limits<int>::min();
|
||||
size_t top_size;
|
||||
size_t top_x;
|
||||
size_t top_y;
|
||||
for (size_t size = 0; size != 300; ++size)
|
||||
{
|
||||
cout << "Size " << setw(3) << size << "/300\r" << flush;
|
||||
for (size_t idx = 1; idx != (grid_width - (size - 1)); ++idx)
|
||||
{
|
||||
for (size_t idy = 0; idy != (grid_width - (size - 1)); ++idy)
|
||||
{
|
||||
int value = evaluate_square(grid, idx, idy, size);
|
||||
if (value > top_value)
|
||||
{
|
||||
top_value = value;
|
||||
top_size = size;
|
||||
top_x = idx + 1;
|
||||
top_y = idy + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Top x,y,size is " << top_x << "," << top_y << "," << top_size
|
||||
<< " with " << top_value << " power\n";
|
||||
|
||||
}
|
||||
3
advent_of_code_2018/day11/test.in
Normal file
3
advent_of_code_2018/day11/test.in
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
18
|
||||
300
|
||||
300
|
||||
34
advent_of_code_2018/day12/input.in
Normal file
34
advent_of_code_2018/day12/input.in
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
initial state: ##.######...#.##.#...#...##.####..###.#.##.#.##...##..#...##.#..##....##...........#.#.#..###.#
|
||||
|
||||
.###. => #
|
||||
#.##. => .
|
||||
.#.## => #
|
||||
...## => .
|
||||
###.# => #
|
||||
##.## => .
|
||||
..... => .
|
||||
#..#. => #
|
||||
..#.. => #
|
||||
#.### => #
|
||||
##.#. => .
|
||||
..#.# => #
|
||||
#.#.# => #
|
||||
.##.# => #
|
||||
.#..# => #
|
||||
#..## => #
|
||||
##..# => #
|
||||
#...# => .
|
||||
...#. => #
|
||||
##### => .
|
||||
###.. => #
|
||||
#.#.. => .
|
||||
....# => .
|
||||
.#### => #
|
||||
..### => .
|
||||
..##. => #
|
||||
.##.. => .
|
||||
#.... => .
|
||||
####. => #
|
||||
.#.#. => .
|
||||
.#... => #
|
||||
##... => #
|
||||
127
advent_of_code_2018/day12/main.cc
Normal file
127
advent_of_code_2018/day12/main.cc
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
#include <algorithm>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
|
||||
using namespace std;
|
||||
|
||||
unordered_map<string, char> read_rules()
|
||||
{
|
||||
unordered_map<string, char> rules;
|
||||
|
||||
while(!cin.eof())
|
||||
{
|
||||
char result;
|
||||
string rule;
|
||||
|
||||
cin >> rule;
|
||||
cin.ignore(4); //ignore ' => '
|
||||
cin >> result;
|
||||
cin.ignore(1); //ignore '\n'
|
||||
|
||||
rules[rule] = result;
|
||||
}
|
||||
|
||||
return rules;
|
||||
}
|
||||
|
||||
vector<char> initial_state()
|
||||
{
|
||||
cin.ignore(15); // ignore 'initial state: '
|
||||
string buf;
|
||||
getline(cin, buf);
|
||||
|
||||
return vector<char>(buf.begin(), buf.end());
|
||||
}
|
||||
|
||||
string environment(vector<char> const &plants, size_t idx)
|
||||
{
|
||||
string sig;
|
||||
|
||||
switch(idx)
|
||||
{
|
||||
case 0:
|
||||
sig += "..";
|
||||
sig += string(plants.begin(), plants.begin() + 3);
|
||||
return sig;
|
||||
|
||||
case 1:
|
||||
|
||||
sig += ".";
|
||||
sig += string(plants.begin(), plants.begin() + 4);
|
||||
return sig;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (idx == (plants.size() - 2))
|
||||
{
|
||||
auto it = plants.begin() + idx;
|
||||
return string(it - 2, it + 2) + '.';
|
||||
}
|
||||
else if (idx == (plants.size() - 1))
|
||||
{
|
||||
auto it = plants.begin() + idx;
|
||||
return string(it - 2, it + 1) + "..";
|
||||
}
|
||||
|
||||
auto it = plants.begin() + idx;
|
||||
return string(it - 2, it + 3);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int first = 0;
|
||||
vector<char> plants = initial_state();
|
||||
unordered_map<string, char> rules = read_rules();
|
||||
|
||||
string original = string(plants.begin(), plants.end());
|
||||
cout << original << "\n";
|
||||
|
||||
for (size_t iterations = 20; iterations--; )
|
||||
{
|
||||
if (find(plants.begin(), plants.begin() + 3, '#')
|
||||
!= plants.begin() + 3)
|
||||
{
|
||||
first -= 2;
|
||||
plants.insert(plants.begin(), {'.', '.'});
|
||||
}
|
||||
|
||||
if (find(plants.end() - 3, plants.end(), '#')
|
||||
!= plants.end())
|
||||
{
|
||||
plants.insert(plants.end(), {'.', '.'});
|
||||
}
|
||||
vector<char> nextgen(plants.size(), '.');
|
||||
|
||||
// cout << "\n\n # now env new\n";
|
||||
for (size_t idx = 0; idx != plants.size(); ++idx)
|
||||
{
|
||||
// cout << setw(3) << first + static_cast<int>(idx) << " ";
|
||||
// cout << "[" << plants[idx] << "]: ";
|
||||
string env = environment(plants, idx);
|
||||
// cout << env << " => ";
|
||||
|
||||
char result = '?';
|
||||
if (auto it = rules.find(env); it != rules.end())
|
||||
result = it->second;
|
||||
// cout << result << "\n";
|
||||
nextgen[idx] = result;
|
||||
}
|
||||
plants.swap(nextgen);
|
||||
}
|
||||
|
||||
// cout << string(-first, ' ') << original << "\n";
|
||||
// cout << string(plants.begin(), plants.end()) << "\n";
|
||||
|
||||
int score = 0;
|
||||
for (size_t idx = 0; idx < plants.size(); ++idx)
|
||||
{
|
||||
score += (plants[idx] == '#' ? idx + first : 0);
|
||||
}
|
||||
cout << "score: " << score << "\n";
|
||||
|
||||
}
|
||||
2328
advent_of_code_2018/day12/out.txt
Normal file
2328
advent_of_code_2018/day12/out.txt
Normal file
File diff suppressed because it is too large
Load diff
250
advent_of_code_2018/day2/input.in
Normal file
250
advent_of_code_2018/day2/input.in
Normal file
|
|
@ -0,0 +1,250 @@
|
|||
jplenqtlagxhivmwmscfukzodp
|
||||
jbrehqtlagxhivmeyscfuvzodp
|
||||
jbreaqtlagxzivmwysofukzodp
|
||||
jxrgnqtlagxhivmwyscfukwodp
|
||||
jbrenqtwagjhivmwysxfukzodp
|
||||
jbrenqplagxhivmwyscfuazoip
|
||||
jbrenqtlagxhivzwyscfldzodp
|
||||
jbrefqtlagxhizmwyfcfukzodp
|
||||
jbrenqtlagxhevmwfsafukzodp
|
||||
jbrunqtlagxrivmsyscfukzodp
|
||||
jbrenqtlaguhivmwyhlfukzodp
|
||||
jbrcnstsagxhivmwyscfukzodp
|
||||
jbrenqtlagozivmwyscbukzodp
|
||||
jbrenqwlagxhivswysrfukzodp
|
||||
jbrenstlagxhuvmiyscfukzodp
|
||||
jbranqtlhgxhivmwysnfukzodp
|
||||
jbrenqtvagxhinmxyscfukzodp
|
||||
jbrenqtlagdhivmwyscfukxody
|
||||
jbrenqtlagelavmwyscfukzodp
|
||||
jbrenqtlagxhtvmwyhcfukzbdp
|
||||
jbrenqwlagxhivmwyscfutzopp
|
||||
jbrenqtlavxhibmtyscfukzodp
|
||||
jbronqtlagxnivmwyscfuzzodp
|
||||
jbredqtlagxhppmwyscfukzodp
|
||||
jbrcnqtlogxhivmwysxfukzodp
|
||||
jbremqtlagehivswyscfukzodp
|
||||
jbrenqolagxhivmcyscfukzokp
|
||||
jbrehqtlacxhgvmwyscfukzodp
|
||||
fbrlnqtlagxhivmwyscbukzodp
|
||||
zbrfnqtlagxhivrwyscfukzodp
|
||||
jbregqtlagxnivmwyscfhkzodp
|
||||
jbrenqtllgxnivmwystfukzodp
|
||||
jurenqtlagxhivmwyscfulzoup
|
||||
jbrenitdagxhivmwyxcfukzodp
|
||||
jbrenqtlagxqivmwyscvuszodp
|
||||
jbqenqwlagxhivmwyscfckzodp
|
||||
jbrenqtlagxhivmwxscqupzodp
|
||||
jbrenqtlagxhivmwysciuqiodp
|
||||
jbrjnjtlagxhivmwyscfukzode
|
||||
jbrenqtlagxhuvmwqscfukzods
|
||||
jbrenqtlagxhuvmuyscfukzudp
|
||||
ibrenqtlagxhivmwyscfuktokp
|
||||
jbsenqtlagxhivcwyscfuksodp
|
||||
jbrfnntlagxhivmwnscfukzodp
|
||||
jzrenqulagxhivmwyscfukzodx
|
||||
jbrenqtqygxhivmwyscfukzwdp
|
||||
jbrenqtlagxfixmwyscfukzcdp
|
||||
jbrenqaoagxhivmwyshfukzodp
|
||||
jbrenqtlazxhivmworcfukzodp
|
||||
jbrenqtlagxhicowyscfukrodp
|
||||
jbrqnqtlagxhivzwyzcfukzodp
|
||||
jbrenqtlalxhuvxwyscfukzodp
|
||||
jbrenqtlqgxhhviwyscfukzodp
|
||||
jbrenqtuggxhivmoyscfukzodp
|
||||
jbrenqtlagxpivmwyscfukkodw
|
||||
zbrenqhlagxhivmwyscdukzodp
|
||||
jbrenutlagxxivmwyscfukzoqp
|
||||
obrenqtlagxhivmwxscfuszodp
|
||||
jbrenqtlagxhlvmwyscfuixodp
|
||||
rbrenqtlagdhixmwyscfukzodp
|
||||
jbrenqtlagxhivmwescfyszodp
|
||||
jbrfnqtlagxhivmwyscaukzhdp
|
||||
jbrenqtiagxhivmbyscfuxzodp
|
||||
cbrrnqtuagxhivmwyscfukzodp
|
||||
jbkenqtlagxhigmwysufukzodp
|
||||
jbjewqtlagxhivmwyscfuqzodp
|
||||
jbrznqtlagxvivmwyscfukzovp
|
||||
jbrenttlacxhivmwyscfhkzodp
|
||||
jblenqtlagxhivmwylcfukaodp
|
||||
jbrenqtlagxhivmqysiftkzodp
|
||||
jbrenqtlagwhikmwyscfukqodp
|
||||
jbrenqtlegxhivmwvsckukzodp
|
||||
jbrenqwzagxhiamwyscfukzodp
|
||||
jbrenqtlagxhivcwyscfgkzodc
|
||||
jbrenqtlagxxhvmwxscfukzodp
|
||||
jbrenqtlngxhivmwyscfukoowp
|
||||
jbreomtlagxhivmwpscfukzodp
|
||||
jfrenqtlagxhivmwyscnumzodp
|
||||
jbrenqtlagphipmwyscfukfodp
|
||||
jvrenqtlagxhivmwyscfmkzodw
|
||||
jbrenqtlaxxoiemwyscfukzodp
|
||||
jbrenqtlagxhivmwyscemkzpdp
|
||||
jbrenyjldgxhivmwyscfukzodp
|
||||
jbrenqtlagxhivfvyspfukzodp
|
||||
kbrenctlakxhivmwyscfukzodp
|
||||
jbrmhqtlagxhivmwyscfuizodp
|
||||
jbjenqtlagxlivmbyscfukzodp
|
||||
jbrenqtlaaxhivmmyshfukzodp
|
||||
jbronqtlagxhirmvyscfukzodp
|
||||
jbcrnqtlagxwivmwyscfukzodp
|
||||
jxrenszlagxhivmwyscfukzodp
|
||||
jbpenqtlagxhivmwyscfukkody
|
||||
jbrewqtlawxhivmwyscfukzhdp
|
||||
jbrenqylagxhivmwlxcfukzodp
|
||||
jbrenqtlagxxivtwywcfukzodp
|
||||
jbrenqtlagxhcvgayscfukzodp
|
||||
jbrenitlagxhivmwiscfukzohp
|
||||
jbrenutlagxhivmwyscbukvodp
|
||||
nbrenqtlagxhivmwysnfujzodp
|
||||
jbrenqtlagxhivmwyqcfupzoop
|
||||
jbrenqtrarxhijmwyscfukzodp
|
||||
jbrenqtlagxhivmwysdfukzovy
|
||||
jbrrnqtlagxhivmwyvcfukzocp
|
||||
jbrenqtlagxhivmwyscfuvzzhp
|
||||
jbhenitlagxhivmwysufukzodp
|
||||
jbrenqtlagxhivmwyscfuwzoqx
|
||||
kbrenqtlagxhivmwysqfdkzodp
|
||||
jbrenqtlagxhivmwyxmfukzodx
|
||||
jbcenatlagxxivmwyscfukzodp
|
||||
jbrenhtlagvhdvmwyscfukzodp
|
||||
jxrenqtlafxhivfwyscfukzodp
|
||||
jbreaztlpgxhivmwyscfukzodp
|
||||
tqrenqtlagxfivmwyscfukzodp
|
||||
jbrenqgllgxhwvmwyscfukzodp
|
||||
jbrejjtlagxhivmgyscfukzodp
|
||||
jbrenqtlagxhivmwyscvukzoqv
|
||||
jbrvnqtlagxsibmwyscfukzodp
|
||||
jbrenqttagxhuvmwyscfukvodp
|
||||
jbrenqteagxhivmwcscfukqodp
|
||||
jbrenqtsabxhivmwyspfukzodp
|
||||
jbbenqtlagxhivmwyscjukztdp
|
||||
jnrenqtlagxhiimwydcfukzodp
|
||||
jbrenqtlagxhfvmwyscxukzodu
|
||||
jbrenqtluyxhiomwyscfukzodp
|
||||
jbrenqvlagxhivmwyscuukzolp
|
||||
ebrenqtlagxnivmwysrfukzodp
|
||||
jbreeqtlatxhigmwyscfukzodp
|
||||
jbrenqtvxgxhivmwyscfukzedp
|
||||
jbrmnqtlagxhivmwywcfuklodp
|
||||
jbreeqtvagxhivmwyscfukzody
|
||||
jbrenptlagxhivmxyscfumzodp
|
||||
jbrenqtlagxhivmwysgfukzfsp
|
||||
jurenqtlagjhivmwkscfukzodp
|
||||
jbrenntlagxhivmwtscffkzodp
|
||||
jbrenqglagxhivmwyocfokzodp
|
||||
wbrenqtlagxhivmwhscfukiodp
|
||||
jbrenqtligxhivmqascfukzodp
|
||||
jbrenqtlagxhivmwxscfukpojp
|
||||
jurenqtlagxhivmmyscfbkzodp
|
||||
jbrenqtmagxhivmwyscfrbzodp
|
||||
jcrenqtlagxhivmwysefukzodm
|
||||
jbrenqtlagxhicmwywcfukzodl
|
||||
jbvanqtlagfhivmwyscfukzodp
|
||||
jbmenqjlagxhivmwyscfdkzodp
|
||||
jbrenqtlagohivvwysctukzodp
|
||||
jbrenqtdagxdivmwyscfckzodp
|
||||
kbrefqtlagxhivmwyscfuazodp
|
||||
jbrwnqtoagxhivmwyswfukzodp
|
||||
jjhenqtlagxhivmwyscfukzorp
|
||||
jbgsnqtlagxhivkwyscfukzodp
|
||||
jbrynqtlagxhivmsyspfukzodp
|
||||
jbrenftlmkxhivmwyscfukzodp
|
||||
nbrenqtxagxhmvmwyscfukzodp
|
||||
jbrunqtlagxhijmwysmfukzodp
|
||||
jbrenqtlagmaivmwyscfukzowp
|
||||
jbrerqtlagxhihmwyscfukzudp
|
||||
jbrenqtlagahivmwysckukzokp
|
||||
kbrenqtlagxhirmwyscfupzodp
|
||||
jbrrnqtlagxhivmwyecfukzodz
|
||||
jbrenqtlavxhivmwyscfusiodp
|
||||
jnrenqtlagxhivmwyhcfukzodw
|
||||
jbretqtlagfhivmwyscfukzrdp
|
||||
jbreoqtnagxhivmwyscfukzopp
|
||||
jbrenbtllgxhivmwsscfukzodp
|
||||
jbrenqtlmgxhivmwyscfuwzedp
|
||||
jbnenqtlagxhivbwyscfukzokp
|
||||
jbrenqslagxhivmvyscfukzndp
|
||||
jbrenqtlagxzivmwuscfukztdp
|
||||
gbrenqtlagxhyvmwyscfukjodp
|
||||
jbrenqteagxhivmwyscfuszedp
|
||||
jbrenqtlaglhivmwysafukkodp
|
||||
jbrenqtlagxhcvmwascfukzogp
|
||||
jbrenqtlagxhsvmkcscfukzodp
|
||||
jbrenqslbgxhivmwyscfufzodp
|
||||
cbrenqtlagxhivkwtscfukzodp
|
||||
jbrenqtltgxhivmzyscfukzodj
|
||||
jbrgnqtlagihivmwyycfukzodp
|
||||
vbrenqauagxhivmwyscfukzodp
|
||||
jbrqnqtlagjhivmwyscfqkzodp
|
||||
jbrenqtlakxhivmwyscfukvobp
|
||||
jcrenqelagxhivmwtscfukzodp
|
||||
jbrrnqtlagxhlvmwyscfukzodw
|
||||
jbrenqtlagxhivmwkscaumzodp
|
||||
jbrenqdlagxhivmiescfukzodp
|
||||
jhrenqtlagxhqvmwyscmukzodp
|
||||
jbrenqtlaghhivmwyscfukkoyp
|
||||
jowenqtlagxyivmwyscfukzodp
|
||||
jbrenitaagxhivmwyscfqkzodp
|
||||
jbrenqtlagxhivmwyscfnkbudp
|
||||
jbyenqtlagxhivmiyscfukzhdp
|
||||
jbrenitlagxhibjwyscfukzodp
|
||||
jbrenqtlavxhjvmwpscfukzodp
|
||||
jbrenqyaagxhivmwyscflkzodp
|
||||
jbrenqylagxhivmwyicfupzodp
|
||||
jbrenqtlagxmevmwylcfukzodp
|
||||
lbrenqtlagxhiqmwyscfikzodp
|
||||
jbrenqtnarxhivmwyscfmkzodp
|
||||
jbrenqtlamxhivmwyscfnkzorp
|
||||
jbbenqtlavxhivmwyscjukztdp
|
||||
jbrenqtlagxhivmwyscfnliodp
|
||||
jbwenetlagxhivmwyscfukzodt
|
||||
jbrenatlagxhivmwysmfujzodp
|
||||
jbrsnstlagxhivmwyscfukgodp
|
||||
jbwvnitlagxhivmwyscfukzodp
|
||||
jbrenqtbagxhkvmwypcfukzodp
|
||||
jbrlnqtlafxhivmwyscfukdodp
|
||||
jbrenztlanxhivmwyscjukzodp
|
||||
jbrepqtlagxhivmwudcfukzodp
|
||||
jbrenqtlagxiivmwdscfskzodp
|
||||
jbrdjqtlagxhivmwyschukzodp
|
||||
jbrenqtoaguhivmwyccfukzodp
|
||||
jdrexqjlagxhivmwyscfukzodp
|
||||
jbrenqtlagxhovmwysckukaodp
|
||||
pbrfnqblagxhivmwyscfukzodp
|
||||
jbrenqtlagxrivgiyscfukzodp
|
||||
jbrelqtgagxhivmryscfukzodp
|
||||
jbrenqtlagxhicmwjscfikzodp
|
||||
jbrenqjlagxhivmwyscfmkjodp
|
||||
jbrenqtlagxpivmwzscgukzodp
|
||||
jbienqzlagxpivmwyscfukzodp
|
||||
jbrenqvlagxhivmwdscfukzodx
|
||||
owrenqtlagxhivmwyicfukzodp
|
||||
gbrenqtlaathivmwyscfukzodp
|
||||
jbgenqtlafxhivmwysqfukzodp
|
||||
jbrenqtlagxhivtwsscfukzokp
|
||||
jbrnnqylanxhivmwyscfukzodp
|
||||
ebrenqolagxhivmcyscfukzodp
|
||||
jbrenqtlarnhivgwyscfukzodp
|
||||
jbmenqtlagxhivmvyscfukzgdp
|
||||
jbrevqtlaglhivmwystfukzodp
|
||||
jbrenqplanthivmwyscfukzodp
|
||||
jbrenqtlagxhivmkyscbukzosp
|
||||
jbrenqtlagxaivmwyscfugzodo
|
||||
jbrenqplagxhnvmwyscfjkzodp
|
||||
jbrenqtlagxhivgwyscfusrodp
|
||||
cbrenqtlagxhivmwysmfukzody
|
||||
jbrenquwaexhivmwyscfukzodp
|
||||
jbredqtlagxhdvmwyscfukzoup
|
||||
jbrxnqtlagxhivmwysczukaodp
|
||||
jbrenqtlafnhivmwyscfuczodp
|
||||
jbbdkqtlagxhivmwyscfukzodp
|
||||
ubrenqtlagxhivkwyucfukzodp
|
||||
ebjenqtlagxhivmwyscfukzodj
|
||||
jbgenqtlugxxivmwyscfukzodp
|
||||
jbrenqtoagxqivmwdscfukzodp
|
||||
bbeenqtlagxhivmwyscfumzodp
|
||||
jbfeeqtlagxhivmwmscfukzodp
|
||||
jbrlnqtlagxhiimwescfukzodp
|
||||
jbrenqtlagwoivmwyscfukhodp
|
||||
jbrenqtlagnhivmwyscfuszovp
|
||||
40
advent_of_code_2018/day2/main1.cc
Normal file
40
advent_of_code_2018/day2/main1.cc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
size_t dubbles = 0;
|
||||
size_t tripples = 0;
|
||||
|
||||
string buffer;
|
||||
|
||||
while(getline(cin, buffer))
|
||||
{
|
||||
bool twice = false;
|
||||
bool thrice = false;
|
||||
size_t letters[26] = { };
|
||||
|
||||
for (char c : buffer)
|
||||
{
|
||||
++letters[c - 'a'];
|
||||
}
|
||||
|
||||
for (size_t idx = 0; idx < 26; ++idx)
|
||||
{
|
||||
if (letters[idx] == 2)
|
||||
twice = true;
|
||||
if (letters[idx] == 3)
|
||||
thrice = true;
|
||||
}
|
||||
|
||||
if (twice)
|
||||
++dubbles;
|
||||
if (thrice)
|
||||
++tripples;
|
||||
}
|
||||
|
||||
cout << "checsum: " << dubbles * tripples << "\n";
|
||||
}
|
||||
56
advent_of_code_2018/day2/main2.cc
Normal file
56
advent_of_code_2018/day2/main2.cc
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
size_t label_diff(string const &lhs, string const &rhs)
|
||||
{
|
||||
size_t diff = 0;
|
||||
for (size_t idx = 0; idx != lhs.size(); ++idx)
|
||||
diff += lhs[idx] - rhs[idx] ? 1 : 0;
|
||||
return diff;
|
||||
}
|
||||
|
||||
string equal_part(string const &lhs, string const &rhs)
|
||||
{
|
||||
string rval;
|
||||
rval.reserve(lhs.size() - 1);
|
||||
|
||||
for (size_t idx = 0; idx != lhs.size(); ++idx)
|
||||
{
|
||||
if (lhs[idx] == rhs[idx])
|
||||
rval.push_back(lhs[idx]);
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
size_t dubbles = 0;
|
||||
size_t tripples = 0;
|
||||
|
||||
string buffer;
|
||||
vector<string> labels;
|
||||
|
||||
while (getline(cin, buffer))
|
||||
labels.push_back(buffer);
|
||||
|
||||
for (string const &lhs : labels)
|
||||
{
|
||||
for (string const &rhs : labels)
|
||||
{
|
||||
size_t difference = label_diff(rhs, lhs);
|
||||
|
||||
if (difference == 1)
|
||||
{
|
||||
cout << "Equal part: " << equal_part(lhs, rhs) << "\n";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//jbbenqtlaxhivmwyscjukztdp correct
|
||||
1216
advent_of_code_2018/day25/input1.in
Normal file
1216
advent_of_code_2018/day25/input1.in
Normal file
File diff suppressed because it is too large
Load diff
137
advent_of_code_2018/day25/main.cc
Normal file
137
advent_of_code_2018/day25/main.cc
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Star
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
int t;
|
||||
};
|
||||
|
||||
istream& operator>>(istream& in, Star &star)
|
||||
{
|
||||
in >> star.x;
|
||||
in.ignore(); //ignore ','
|
||||
in >> star.y;
|
||||
in.ignore();
|
||||
in >> star.z;
|
||||
in.ignore();
|
||||
in >> star.t;
|
||||
in.ignore();
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
ostream &operator<<(ostream &out, Star const &star)
|
||||
{
|
||||
out << "[" << star.x << ", " << star.y << ", " << star.z << ", " << star.t << "]";
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
size_t distance(Star const &lhs, Star const &rhs)
|
||||
{
|
||||
int dist = abs(lhs.x - rhs.x)
|
||||
+ abs(lhs.y - rhs.y)
|
||||
+ abs(lhs.z - rhs.z)
|
||||
+ abs(lhs.t - rhs.t);
|
||||
|
||||
return dist;
|
||||
}
|
||||
|
||||
bool in_cluster(vector<Star> const &cluster, Star const &star)
|
||||
{
|
||||
for (Star clst : cluster)
|
||||
{
|
||||
if (distance(clst, star) <= 3)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool same_cluster(vector<Star> const &lhs, vector<Star> const &rhs)
|
||||
{
|
||||
for (Star left : lhs)
|
||||
{
|
||||
for (Star right : rhs)
|
||||
{
|
||||
if (distance(left, right) <= 3)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
vector<Star> stars;
|
||||
|
||||
while (cin)
|
||||
{
|
||||
Star star;
|
||||
cin >> star;
|
||||
stars.push_back(star);
|
||||
}
|
||||
|
||||
// kickstart 1st cluster
|
||||
vector<vector<Star>> clusters;
|
||||
|
||||
for (Star star : stars)
|
||||
{
|
||||
bool matched = false;
|
||||
|
||||
for (vector<Star> &cluster : clusters)
|
||||
{
|
||||
if (in_cluster(cluster, star))
|
||||
{
|
||||
cluster.push_back(star);
|
||||
matched = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!matched)
|
||||
{
|
||||
clusters.push_back({});
|
||||
clusters.back().push_back(star);
|
||||
}
|
||||
}
|
||||
|
||||
bool merged = true;
|
||||
while (merged)
|
||||
{
|
||||
merged = false;
|
||||
for (size_t idx = 0; idx < clusters.size(); ++idx)
|
||||
{
|
||||
for (size_t jdx = idx + 1; jdx < clusters.size(); ++jdx)
|
||||
{
|
||||
if (same_cluster(clusters[idx], clusters[jdx]))
|
||||
{
|
||||
clusters[idx].insert(clusters[idx].end(), clusters[jdx].begin(), clusters[jdx].end());
|
||||
clusters.erase(clusters.begin() + jdx);
|
||||
merged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (merged) break;
|
||||
}
|
||||
}
|
||||
|
||||
for (vector<Star> cluster : clusters)
|
||||
{
|
||||
cout << "\n\nCluster:\n";
|
||||
for (Star star : cluster)
|
||||
{
|
||||
cout << " Star: " << star << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Num clusters: " << clusters.size() << "\n";
|
||||
}
|
||||
10
advent_of_code_2018/day25/test.in
Normal file
10
advent_of_code_2018/day25/test.in
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
1,-1,0,1
|
||||
2,0,-1,0
|
||||
3,2,-1,0
|
||||
0,0,3,1
|
||||
0,0,-1,-1
|
||||
2,3,-2,0
|
||||
-2,2,0,0
|
||||
2,-2,0,-1
|
||||
1,-1,0,-1
|
||||
3,2,0,2
|
||||
1237
advent_of_code_2018/day3/input.in
Normal file
1237
advent_of_code_2018/day3/input.in
Normal file
File diff suppressed because it is too large
Load diff
83
advent_of_code_2018/day3/main1.cc
Normal file
83
advent_of_code_2018/day3/main1.cc
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Claim
|
||||
{
|
||||
size_t id;
|
||||
size_t px;
|
||||
size_t py;
|
||||
size_t width;
|
||||
size_t height;
|
||||
};
|
||||
|
||||
istream &operator>>(istream &in, Claim &claim)
|
||||
{
|
||||
// reading into char in favor if in.ignore(), to automatically
|
||||
// toss any present whitespace.
|
||||
char at;
|
||||
|
||||
cin >> at; //ignore '#'
|
||||
in >> claim.id;
|
||||
|
||||
in >> at; //ignore '@'
|
||||
in >> claim.px;
|
||||
cin >> at; //ignore ','
|
||||
in >> claim.py;
|
||||
|
||||
in >> at; //ignore ':'
|
||||
in >> claim.width;
|
||||
in >> at; //ignore 'x'
|
||||
in >> claim.height;
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
void layout_claim(vector<vector<int>> &canvas, Claim const &claim)
|
||||
{
|
||||
size_t end_x = claim.px + claim.width;
|
||||
size_t end_y = claim.py + claim.height;
|
||||
|
||||
for (size_t px = claim.px; px != end_x; ++px)
|
||||
{
|
||||
for (size_t py = claim.py; py != end_y; ++py)
|
||||
++canvas[px][py];
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
size_t total_width = 0;
|
||||
size_t total_height = 0;
|
||||
vector<Claim> claims;
|
||||
vector<vector<int>> canvas;
|
||||
|
||||
while (!cin.eof())
|
||||
{
|
||||
Claim claim;
|
||||
cin >> claim;
|
||||
|
||||
total_width = max(total_width, claim.px + claim.width);
|
||||
total_height = max(total_height, claim.py + claim.height);
|
||||
|
||||
claims.push_back(claim);
|
||||
}
|
||||
|
||||
canvas.resize(total_width, vector<int>(total_height, 0));
|
||||
for (Claim const &claim : claims)
|
||||
layout_claim(canvas, claim);
|
||||
|
||||
size_t overlap = 0;
|
||||
for (size_t py = 0; py < total_height; ++py)
|
||||
{
|
||||
for (size_t px = 0; px < total_width; ++px)
|
||||
{
|
||||
if (canvas[px][py] > 1)
|
||||
++overlap;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Overlap: " << overlap << "\n";
|
||||
}
|
||||
105
advent_of_code_2018/day3/main2.cc
Normal file
105
advent_of_code_2018/day3/main2.cc
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Claim
|
||||
{
|
||||
size_t id;
|
||||
size_t px;
|
||||
size_t py;
|
||||
size_t width;
|
||||
size_t height;
|
||||
};
|
||||
|
||||
istream &operator>>(istream &in, Claim &claim)
|
||||
{
|
||||
// reading into char in favor if in.ignore(), to automatically
|
||||
// toss any present whitespace.
|
||||
char at;
|
||||
|
||||
cin >> at; //ignore '#'
|
||||
in >> claim.id;
|
||||
|
||||
in >> at; //ignore '@'
|
||||
in >> claim.px;
|
||||
cin >> at; //ignore ','
|
||||
in >> claim.py;
|
||||
|
||||
in >> at; //ignore ':'
|
||||
in >> claim.width;
|
||||
in >> at; //ignore 'x'
|
||||
in >> claim.height;
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
void layout_claim(vector<vector<int>> &canvas, Claim const &claim)
|
||||
{
|
||||
size_t end_x = claim.px + claim.width;
|
||||
size_t end_y = claim.py + claim.height;
|
||||
|
||||
for (size_t px = claim.px; px != end_x; ++px)
|
||||
{
|
||||
for (size_t py = claim.py; py != end_y; ++py)
|
||||
++canvas[px][py];
|
||||
}
|
||||
}
|
||||
|
||||
bool overlaps(vector<vector<int>> &canvas, Claim const &claim)
|
||||
{
|
||||
size_t end_x = claim.px + claim.width;
|
||||
size_t end_y = claim.py + claim.height;
|
||||
|
||||
for (size_t px = claim.px; px != end_x; ++px)
|
||||
{
|
||||
for (size_t py = claim.py; py != end_y; ++py)
|
||||
{
|
||||
if (canvas[px][py] != 1)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
size_t total_width = 0;
|
||||
size_t total_height = 0;
|
||||
vector<Claim> claims;
|
||||
vector<vector<int>> canvas;
|
||||
|
||||
while (!cin.eof())
|
||||
{
|
||||
Claim claim;
|
||||
cin >> claim;
|
||||
|
||||
total_width = max(total_width, claim.px + claim.width);
|
||||
total_height = max(total_height, claim.py + claim.height);
|
||||
|
||||
claims.push_back(claim);
|
||||
}
|
||||
|
||||
canvas.resize(total_width, vector<int>(total_height, 0));
|
||||
for (Claim const &claim : claims)
|
||||
layout_claim(canvas, claim);
|
||||
|
||||
size_t overlap = 0;
|
||||
for (size_t py = 0; py < total_height; ++py)
|
||||
{
|
||||
for (size_t px = 0; px < total_width; ++px)
|
||||
{
|
||||
if (canvas[px][py] > 1)
|
||||
++overlap;
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t idx = 0; idx != claims.size(); ++idx)
|
||||
{
|
||||
if (!overlaps(canvas, claims[idx]))
|
||||
cout << "No overlap for " << idx << "\n";
|
||||
}
|
||||
|
||||
}
|
||||
3
advent_of_code_2018/day3/test.in
Normal file
3
advent_of_code_2018/day3/test.in
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#1 @ 1,3: 4x4
|
||||
#2 @ 3,1: 4x4
|
||||
#3 @ 5,5: 2x2
|
||||
1002
advent_of_code_2018/day4/input.in
Normal file
1002
advent_of_code_2018/day4/input.in
Normal file
File diff suppressed because it is too large
Load diff
159
advent_of_code_2018/day4/main1.cc
Normal file
159
advent_of_code_2018/day4/main1.cc
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
#include <algorithm>
|
||||
#include <ctime>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Event
|
||||
{
|
||||
tm time;
|
||||
string event;
|
||||
};
|
||||
|
||||
istream &operator>>(istream &in, Event &event)
|
||||
{
|
||||
char toss;
|
||||
|
||||
in >> toss; // toss '['
|
||||
in >> event.time.tm_year;
|
||||
event.time.tm_year -= 1900;
|
||||
in >> toss; // toss '-'
|
||||
in >> event.time.tm_mon;
|
||||
in >> toss; // toss '-'
|
||||
in >> event.time.tm_mday;
|
||||
|
||||
in >> event.time.tm_hour;
|
||||
in >> toss; // toss ':'
|
||||
in >> event.time.tm_min;
|
||||
in >> toss; // toss ']'
|
||||
|
||||
getline(cin, event.event);
|
||||
return in;
|
||||
}
|
||||
|
||||
ostream &operator<<(ostream &out, Event const &event)
|
||||
{
|
||||
out << "Event: \n";
|
||||
out << " " << put_time(&event.time, "%c") << "\n";
|
||||
out << " - " << event.event << "\n";
|
||||
return out;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<Event> events;
|
||||
map<int, int[60]> guards;
|
||||
|
||||
cout << setfill(' ');
|
||||
|
||||
while(!cin.eof())
|
||||
{
|
||||
Event event{};
|
||||
cin >> event;
|
||||
events.push_back(event);
|
||||
}
|
||||
|
||||
std::sort(events.begin(), events.end(),
|
||||
[](Event &lhs, Event &rhs)
|
||||
{
|
||||
time_t l_time = mktime(&lhs.time);
|
||||
time_t r_time = mktime(&rhs.time);
|
||||
|
||||
return l_time < r_time;
|
||||
});
|
||||
|
||||
int current_id;
|
||||
for (Event const &event : events)
|
||||
{
|
||||
size_t numstart = event.event.find("#");
|
||||
if (numstart != string::npos)
|
||||
{
|
||||
size_t end = event.event.find(" ", numstart);
|
||||
current_id = stoi(event.event.substr(numstart + 1, end - numstart - 1));
|
||||
}
|
||||
|
||||
else if (event.event.find("asleep") != string::npos)
|
||||
{
|
||||
for (size_t idx = event.time.tm_min; idx != 60; ++idx)
|
||||
++guards[current_id][idx];
|
||||
}
|
||||
|
||||
else if (event.event.find("wakes") != string::npos)
|
||||
{
|
||||
for (size_t idx = event.time.tm_min; idx != 60; ++idx)
|
||||
--guards[current_id][idx];
|
||||
}
|
||||
}
|
||||
|
||||
size_t max_id = 0;
|
||||
size_t sleeper = 0;
|
||||
|
||||
// cout << " Guard ID Minute\n";
|
||||
// cout << " 1 2 3 4 5\n";
|
||||
// cout << " 012345678901234567890123456789012345678901234567890123456789\n";
|
||||
cout << " ";
|
||||
for (size_t idx = 0; idx != 60; ++idx)
|
||||
cout << setw(3) << idx;
|
||||
cout << " | total\n";
|
||||
|
||||
for (auto const &[id, sleep] : guards)
|
||||
{
|
||||
cout << "Guard " << setw(5) << id << ": ";
|
||||
size_t total = 0;
|
||||
|
||||
for (int num : sleep)
|
||||
{
|
||||
cout << setw(3) << num;
|
||||
total += num;
|
||||
}
|
||||
cout << " | " << total << "\n";
|
||||
|
||||
|
||||
if (total > sleeper)
|
||||
{
|
||||
max_id = id;
|
||||
sleeper = total;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Max sleeper: " << max_id << "\n";
|
||||
|
||||
size_t min_id = 0;
|
||||
sleeper = 0;
|
||||
for (size_t idx = 0; idx != 60; ++idx)
|
||||
{
|
||||
if (guards[max_id][idx] > sleeper)
|
||||
{
|
||||
sleeper = guards[max_id][idx];
|
||||
min_id = idx;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Slept most in minute " << min_id << ", for " << sleeper << " minutes.\n";
|
||||
|
||||
sleeper = 0;
|
||||
min_id = 0;
|
||||
size_t minute = 0;
|
||||
|
||||
for (auto const &[id, sleep] : guards)
|
||||
{
|
||||
for (size_t idx = 0; idx != 60; ++idx)
|
||||
{
|
||||
if (sleep[idx] >= sleeper)
|
||||
{
|
||||
sleeper = sleep[idx];
|
||||
min_id = id;
|
||||
minute = idx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Guard " << min_id << " is most frequently asleep on minute ";
|
||||
cout << minute << "\n";
|
||||
cout << sleeper * minute << "\n";
|
||||
|
||||
}
|
||||
17
advent_of_code_2018/day4/test.in
Normal file
17
advent_of_code_2018/day4/test.in
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
[1518-11-01 00:00] Guard #10 begins shift
|
||||
[1518-11-01 00:05] falls asleep
|
||||
[1518-11-01 00:25] wakes up
|
||||
[1518-11-01 00:30] falls asleep
|
||||
[1518-11-01 00:55] wakes up
|
||||
[1518-11-01 23:58] Guard #99 begins shift
|
||||
[1518-11-02 00:40] falls asleep
|
||||
[1518-11-02 00:50] wakes up
|
||||
[1518-11-03 00:05] Guard #10 begins shift
|
||||
[1518-11-03 00:24] falls asleep
|
||||
[1518-11-03 00:29] wakes up
|
||||
[1518-11-04 00:02] Guard #99 begins shift
|
||||
[1518-11-04 00:36] falls asleep
|
||||
[1518-11-04 00:46] wakes up
|
||||
[1518-11-05 00:03] Guard #99 begins shift
|
||||
[1518-11-05 00:45] falls asleep
|
||||
[1518-11-05 00:55] wakes up
|
||||
1
advent_of_code_2018/day5/input.in
Normal file
1
advent_of_code_2018/day5/input.in
Normal file
File diff suppressed because one or more lines are too long
56
advent_of_code_2018/day5/main.cc
Normal file
56
advent_of_code_2018/day5/main.cc
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
size_t collapse_polymer(vector<char> polymer)
|
||||
{
|
||||
int react_diff = abs('a' - 'A');
|
||||
size_t oldsize = 0;
|
||||
while(oldsize != polymer.size())
|
||||
{
|
||||
oldsize = polymer.size();
|
||||
|
||||
for (size_t idx = 0; idx < polymer.size() - 1; ++idx)
|
||||
{
|
||||
if (abs(polymer[idx] - polymer[idx + 1]) == react_diff)
|
||||
{
|
||||
polymer.erase(polymer.begin() + idx, polymer.begin() + idx + 2);
|
||||
--idx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return polymer.size();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
vector<char> polymer {
|
||||
istreambuf_iterator<char>(cin),
|
||||
istreambuf_iterator<char>()
|
||||
};
|
||||
cout << "Read polymer of size: " << polymer.size() << "\n";
|
||||
|
||||
size_t minsize = polymer.size();
|
||||
for (size_t idx = 0; idx < 26; ++idx)
|
||||
{
|
||||
char current = 'a' + idx;
|
||||
vector<char> filtered{polymer};
|
||||
|
||||
auto it = remove_if(filtered.begin(), filtered.end(), [=](char c)
|
||||
{
|
||||
if (c == current || c == toupper(current))
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
filtered.erase(it, filtered.end());
|
||||
|
||||
minsize = min(collapse_polymer(filtered), minsize);
|
||||
}
|
||||
|
||||
cout << "Smallest collapsed polymer size: " << minsize << "\n";
|
||||
}
|
||||
50
advent_of_code_2018/day6/input.in
Normal file
50
advent_of_code_2018/day6/input.in
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
118, 274
|
||||
102, 101
|
||||
216, 203
|
||||
208, 251
|
||||
309, 68
|
||||
330, 93
|
||||
91, 179
|
||||
298, 278
|
||||
201, 99
|
||||
280, 272
|
||||
141, 312
|
||||
324, 290
|
||||
41, 65
|
||||
305, 311
|
||||
198, 68
|
||||
231, 237
|
||||
164, 224
|
||||
103, 189
|
||||
216, 207
|
||||
164, 290
|
||||
151, 91
|
||||
166, 250
|
||||
129, 149
|
||||
47, 231
|
||||
249, 100
|
||||
262, 175
|
||||
299, 237
|
||||
62, 288
|
||||
228, 219
|
||||
224, 76
|
||||
310, 173
|
||||
80, 46
|
||||
312, 65
|
||||
183, 158
|
||||
272, 249
|
||||
57, 141
|
||||
331, 191
|
||||
163, 359
|
||||
271, 210
|
||||
142, 137
|
||||
349, 123
|
||||
55, 268
|
||||
160, 82
|
||||
180, 70
|
||||
231, 243
|
||||
133, 353
|
||||
246, 315
|
||||
164, 206
|
||||
229, 97
|
||||
268, 94
|
||||
125
advent_of_code_2018/day6/main1.cc
Normal file
125
advent_of_code_2018/day6/main1.cc
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Point
|
||||
{
|
||||
size_t x;
|
||||
size_t y;
|
||||
|
||||
Point()
|
||||
: x(0), y(0)
|
||||
{ }
|
||||
|
||||
Point(size_t x, size_t y)
|
||||
: x(x), y(y)
|
||||
{ }
|
||||
};
|
||||
|
||||
istream &operator>>(istream& in, Point &point)
|
||||
{
|
||||
cin >> point.x;
|
||||
cin.ignore(); // ignore ','
|
||||
cin >> point.y;
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
inline size_t manhattan_distance(Point const &p1, Point const &p2)
|
||||
{
|
||||
return (p1.x > p2.x ? p1.x - p2.x : p2.x - p1.x)
|
||||
+ (p1.y > p2.y ? p1.y - p2.y : p2.y - p1.y);
|
||||
}
|
||||
|
||||
int closest(Point location, vector<Point> const &points)
|
||||
{
|
||||
int index = -1;
|
||||
size_t mindist = std::numeric_limits<size_t>::max();
|
||||
|
||||
for (size_t idx = 0; idx != points.size(); ++idx)
|
||||
{
|
||||
size_t distance = manhattan_distance(location, points[idx]);
|
||||
|
||||
if (distance == mindist)
|
||||
index = -1;
|
||||
else if (distance < mindist)
|
||||
{
|
||||
mindist = distance;
|
||||
index = idx;
|
||||
}
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
size_t width = 0;
|
||||
size_t height = 0;
|
||||
vector<Point> points;
|
||||
|
||||
while(!cin.eof())
|
||||
{
|
||||
Point point;
|
||||
cin >> point;
|
||||
|
||||
points.push_back(point);
|
||||
width = max(width, point.x + 1);
|
||||
height = max(height, point.y + 1);
|
||||
}
|
||||
|
||||
cout << "grid size: " << width << " x " << height << "\n";
|
||||
vector<int> counts(points.size(), 0);
|
||||
|
||||
for (size_t idx = 0; idx != width; ++idx)
|
||||
{
|
||||
for (size_t idy = 0; idy != height; ++idy)
|
||||
{
|
||||
int index = closest(Point{idx, idy}, points);
|
||||
if (index == -1) continue;
|
||||
++counts[index];
|
||||
}
|
||||
}
|
||||
|
||||
// if a class hits the edge its infinite.
|
||||
// we check highest and lowers rows first.
|
||||
for (size_t idx = 0; idx != width; ++idx)
|
||||
{
|
||||
int index = closest(Point{idx, 0}, points);
|
||||
int index2 = closest(Point{idx, height - 1}, points);
|
||||
|
||||
if (index != -1)
|
||||
counts[index] = -1;
|
||||
|
||||
if (index2 != -1)
|
||||
counts[index2] = -1;
|
||||
}
|
||||
|
||||
//side rows
|
||||
for (size_t idx = 0; idx != height; ++idx)
|
||||
{
|
||||
int index = closest(Point{0, idx}, points);
|
||||
int index2 = closest(Point{width - 1, idx}, points);
|
||||
|
||||
if (index != -1)
|
||||
counts[index] = -1;
|
||||
|
||||
if (index2 != -1)
|
||||
counts[index2] = -1;
|
||||
}
|
||||
|
||||
size_t maxclass = 0;
|
||||
int space = counts[0];
|
||||
for (size_t idx = 1; idx != counts.size(); ++idx)
|
||||
{
|
||||
if (counts[idx] > space)
|
||||
{
|
||||
space = counts[idx];
|
||||
maxclass = idx;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "biggest class is " << maxclass << " with a size of " << space << "\n";
|
||||
}
|
||||
73
advent_of_code_2018/day6/main2.cc
Normal file
73
advent_of_code_2018/day6/main2.cc
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
struct Point
|
||||
{
|
||||
size_t x;
|
||||
size_t y;
|
||||
|
||||
Point()
|
||||
: x(0), y(0)
|
||||
{ }
|
||||
|
||||
Point(size_t x, size_t y)
|
||||
: x(x), y(y)
|
||||
{ }
|
||||
};
|
||||
|
||||
istream &operator>>(istream& in, Point &point)
|
||||
{
|
||||
cin >> point.x;
|
||||
cin.ignore(); // ignore ','
|
||||
cin >> point.y;
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
inline size_t manhattan_distance(Point const &p1, Point const &p2)
|
||||
{
|
||||
return (p1.x > p2.x ? p1.x - p2.x : p2.x - p1.x)
|
||||
+ (p1.y > p2.y ? p1.y - p2.y : p2.y - p1.y);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
size_t width = 0;
|
||||
size_t height = 0;
|
||||
vector<Point> points;
|
||||
|
||||
while(!cin.eof())
|
||||
{
|
||||
Point point;
|
||||
cin >> point;
|
||||
|
||||
points.push_back(point);
|
||||
width = max(width, point.x + 1);
|
||||
height = max(height, point.y + 1);
|
||||
}
|
||||
|
||||
size_t region_size = 0;
|
||||
size_t distance_limit = 10000;
|
||||
for (size_t idx = 0; idx != width; ++idx)
|
||||
{
|
||||
for (size_t idy = 0; idy != height; ++idy)
|
||||
{
|
||||
size_t sum = 0;
|
||||
Point current {idx, idy};
|
||||
for_each(points.begin(), points.end(), [&](Point const &point)
|
||||
{
|
||||
sum += manhattan_distance(current, point);
|
||||
});
|
||||
|
||||
if (sum < distance_limit)
|
||||
region_size++;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "region size: " << region_size << "\n";
|
||||
}
|
||||
101
advent_of_code_2018/day7/input.in
Normal file
101
advent_of_code_2018/day7/input.in
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
Step J must be finished before step K can begin.
|
||||
Step N must be finished before step X can begin.
|
||||
Step S must be finished before step G can begin.
|
||||
Step T must be finished before step R can begin.
|
||||
Step H must be finished before step L can begin.
|
||||
Step V must be finished before step W can begin.
|
||||
Step G must be finished before step U can begin.
|
||||
Step K must be finished before step A can begin.
|
||||
Step D must be finished before step Z can begin.
|
||||
Step C must be finished before step E can begin.
|
||||
Step X must be finished before step P can begin.
|
||||
Step Y must be finished before step U can begin.
|
||||
Step R must be finished before step O can begin.
|
||||
Step W must be finished before step U can begin.
|
||||
Step O must be finished before step Q can begin.
|
||||
Step A must be finished before step P can begin.
|
||||
Step B must be finished before step E can begin.
|
||||
Step F must be finished before step E can begin.
|
||||
Step Q must be finished before step U can begin.
|
||||
Step M must be finished before step E can begin.
|
||||
Step P must be finished before step U can begin.
|
||||
Step L must be finished before step Z can begin.
|
||||
Step Z must be finished before step U can begin.
|
||||
Step U must be finished before step E can begin.
|
||||
Step I must be finished before step E can begin.
|
||||
Step H must be finished before step G can begin.
|
||||
Step X must be finished before step I can begin.
|
||||
Step K must be finished before step X can begin.
|
||||
Step Z must be finished before step I can begin.
|
||||
Step S must be finished before step M can begin.
|
||||
Step L must be finished before step U can begin.
|
||||
Step A must be finished before step M can begin.
|
||||
Step W must be finished before step A can begin.
|
||||
Step N must be finished before step A can begin.
|
||||
Step S must be finished before step E can begin.
|
||||
Step W must be finished before step Q can begin.
|
||||
Step J must be finished before step L can begin.
|
||||
Step Q must be finished before step L can begin.
|
||||
Step M must be finished before step U can begin.
|
||||
Step H must be finished before step E can begin.
|
||||
Step D must be finished before step E can begin.
|
||||
Step V must be finished before step P can begin.
|
||||
Step Q must be finished before step M can begin.
|
||||
Step X must be finished before step W can begin.
|
||||
Step K must be finished before step I can begin.
|
||||
Step T must be finished before step H can begin.
|
||||
Step Y must be finished before step L can begin.
|
||||
Step G must be finished before step O can begin.
|
||||
Step M must be finished before step Z can begin.
|
||||
Step F must be finished before step Z can begin.
|
||||
Step Q must be finished before step E can begin.
|
||||
Step H must be finished before step C can begin.
|
||||
Step Q must be finished before step P can begin.
|
||||
Step D must be finished before step U can begin.
|
||||
Step Z must be finished before step E can begin.
|
||||
Step O must be finished before step M can begin.
|
||||
Step L must be finished before step I can begin.
|
||||
Step J must be finished before step A can begin.
|
||||
Step Q must be finished before step Z can begin.
|
||||
Step P must be finished before step I can begin.
|
||||
Step K must be finished before step O can begin.
|
||||
Step R must be finished before step E can begin.
|
||||
Step W must be finished before step F can begin.
|
||||
Step D must be finished before step Q can begin.
|
||||
Step R must be finished before step U can begin.
|
||||
Step W must be finished before step P can begin.
|
||||
Step S must be finished before step Z can begin.
|
||||
Step T must be finished before step P can begin.
|
||||
Step B must be finished before step Q can begin.
|
||||
Step S must be finished before step T can begin.
|
||||
Step R must be finished before step A can begin.
|
||||
Step K must be finished before step R can begin.
|
||||
Step N must be finished before step G can begin.
|
||||
Step C must be finished before step W can begin.
|
||||
Step T must be finished before step A can begin.
|
||||
Step B must be finished before step Z can begin.
|
||||
Step C must be finished before step P can begin.
|
||||
Step D must be finished before step P can begin.
|
||||
Step B must be finished before step P can begin.
|
||||
Step F must be finished before step U can begin.
|
||||
Step V must be finished before step X can begin.
|
||||
Step K must be finished before step W can begin.
|
||||
Step Y must be finished before step I can begin.
|
||||
Step C must be finished before step B can begin.
|
||||
Step X must be finished before step L can begin.
|
||||
Step X must be finished before step M can begin.
|
||||
Step H must be finished before step P can begin.
|
||||
Step S must be finished before step F can begin.
|
||||
Step J must be finished before step Y can begin.
|
||||
Step Y must be finished before step Z can begin.
|
||||
Step B must be finished before step I can begin.
|
||||
Step S must be finished before step C can begin.
|
||||
Step K must be finished before step E can begin.
|
||||
Step N must be finished before step Q can begin.
|
||||
Step A must be finished before step Z can begin.
|
||||
Step J must be finished before step I can begin.
|
||||
Step Y must be finished before step O can begin.
|
||||
Step Y must be finished before step F can begin.
|
||||
Step S must be finished before step U can begin.
|
||||
Step D must be finished before step W can begin.
|
||||
Step V must be finished before step D can begin.
|
||||
63
advent_of_code_2018/day7/main1.cc
Normal file
63
advent_of_code_2018/day7/main1.cc
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Constraint
|
||||
{
|
||||
bool placed = false;
|
||||
vector<char> requires;
|
||||
vector<char> required_by;
|
||||
};
|
||||
|
||||
bool satisfied(Constraint const &constraint, string const &plan)
|
||||
{
|
||||
for (char c : constraint.requires)
|
||||
{
|
||||
if (plan.find(c) == string::npos)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
array<Constraint, 26> constraints {};
|
||||
|
||||
while (!cin.eof())
|
||||
{
|
||||
char step;
|
||||
char requires;
|
||||
|
||||
cin.ignore(5); // 'Step '
|
||||
cin >> requires;
|
||||
cin.ignore(30); // ' must be finished before step '
|
||||
cin >> step;
|
||||
cin.ignore(12); //' can begin.\n'
|
||||
|
||||
cout << step << " requires " << requires << "\n";
|
||||
constraints[step - 'A'].requires.push_back(requires);
|
||||
constraints[requires - 'A'].required_by.push_back(step);
|
||||
}
|
||||
|
||||
string plan;
|
||||
while(plan.size() != 26)
|
||||
{
|
||||
for (size_t idx = 0; idx < 26; ++idx)
|
||||
{
|
||||
if (!constraints[idx].placed && satisfied(constraints[idx], plan))
|
||||
{
|
||||
plan += static_cast<char>('A' + idx);
|
||||
constraints[idx].placed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cout << plan.size() << " / '" << plan << "'\n";
|
||||
}
|
||||
|
||||
cout << plan.size() << " / '" << plan << "'\n";
|
||||
}
|
||||
142
advent_of_code_2018/day7/main2.cc
Normal file
142
advent_of_code_2018/day7/main2.cc
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
#include <unistd.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Constraint
|
||||
{
|
||||
bool placed = false;
|
||||
vector<char> requires;
|
||||
vector<char> required_by;
|
||||
};
|
||||
|
||||
struct Task
|
||||
{
|
||||
char step = '\0';
|
||||
size_t time_left = 0;
|
||||
};
|
||||
|
||||
bool satisfied(Constraint const &constraint, string const &plan)
|
||||
{
|
||||
for (char c : constraint.requires)
|
||||
{
|
||||
if (plan.find(c) == string::npos)
|
||||
{
|
||||
cout << "Constraint not met in plan '" << plan << "', missing " << c << "\n";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
char find_satisfied(array<Constraint, 26> const &constraints, string const&plan, string const&goal)
|
||||
{
|
||||
cout << "Finding next step from plan '" << plan << "', already done: '" << goal << "'\n";
|
||||
|
||||
for (char c : plan)
|
||||
{
|
||||
if (satisfied(constraints[c - 'A'], goal))
|
||||
return c;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
array<Constraint, 26> constraints {};
|
||||
size_t plansize = 26;
|
||||
size_t baseline = 60;
|
||||
|
||||
while (!cin.eof())
|
||||
{
|
||||
char step;
|
||||
char requires;
|
||||
|
||||
cin.ignore(5); // 'Step '
|
||||
cin >> requires;
|
||||
cin.ignore(30); // ' must be finished before step '
|
||||
cin >> step;
|
||||
cin.ignore(12); //' can begin.\n'
|
||||
|
||||
cout << step << " requires " << requires << "\n";
|
||||
constraints[step - 'A'].requires.push_back(requires);
|
||||
constraints[requires - 'A'].required_by.push_back(step);
|
||||
}
|
||||
|
||||
string plan;
|
||||
while(plan.size() != plansize)
|
||||
{
|
||||
for (size_t idx = 0; idx < 26; ++idx)
|
||||
{
|
||||
if (!constraints[idx].placed && satisfied(constraints[idx], plan))
|
||||
{
|
||||
plan += static_cast<char>('A' + idx);
|
||||
constraints[idx].placed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cout << plan.size() << " / '" << plan << "'\n";
|
||||
}
|
||||
|
||||
cout << plan.size() << " / '" << plan << "'\n";
|
||||
|
||||
/************************************/
|
||||
/************************************/
|
||||
/************************************/
|
||||
string done;
|
||||
Task workers[5];
|
||||
size_t duration = 0;
|
||||
|
||||
while (done.size() != plansize)
|
||||
{
|
||||
++duration;
|
||||
for(Task &task : workers)
|
||||
if (task.time_left != 0) --task.time_left;
|
||||
|
||||
for (Task &task : workers)
|
||||
{
|
||||
if (task.time_left == 0 && task.step != '\0')
|
||||
{
|
||||
done += task.step;
|
||||
task.step = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
for (Task &task : workers)
|
||||
{
|
||||
char next = find_satisfied(constraints, plan, done);
|
||||
if (next == 0) break;
|
||||
|
||||
if (task.time_left == 0)
|
||||
{
|
||||
if (plan.size() > 0 && satisfied(constraints[next - 'A'], done))
|
||||
{
|
||||
task.time_left = baseline + (next - 'A') + 1;
|
||||
task.step = next;
|
||||
plan.erase(plan.find(next), 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Plan / Done: '" << plan << "' / '" << done << "'\n";
|
||||
cout << "Workers on: \n";
|
||||
for (Task &task : workers)
|
||||
{
|
||||
cout << " Step: " << (task.step == '\0' ? '-' : task.step) << "\n";
|
||||
cout << " Time: " << task.time_left << "\n";
|
||||
}
|
||||
cout << "\n";
|
||||
// this_thread::sleep_for(std::chrono::milliseconds(1000));
|
||||
}
|
||||
|
||||
cout << "Total time: " << duration << "s \n";
|
||||
}
|
||||
7
advent_of_code_2018/day7/test.in
Normal file
7
advent_of_code_2018/day7/test.in
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
Step C must be finished before step A can begin.
|
||||
Step C must be finished before step F can begin.
|
||||
Step A must be finished before step B can begin.
|
||||
Step A must be finished before step D can begin.
|
||||
Step B must be finished before step E can begin.
|
||||
Step D must be finished before step E can begin.
|
||||
Step F must be finished before step E can begin.
|
||||
1
advent_of_code_2018/day8/input.in
Normal file
1
advent_of_code_2018/day8/input.in
Normal file
File diff suppressed because one or more lines are too long
83
advent_of_code_2018/day8/main.cc
Normal file
83
advent_of_code_2018/day8/main.cc
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <numeric>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Node
|
||||
{
|
||||
size_t child_count;
|
||||
size_t metadata_count;
|
||||
vector<Node> children;
|
||||
vector<int> metadata;
|
||||
|
||||
Node()
|
||||
: child_count(0), metadata_count(0)
|
||||
{ }
|
||||
};
|
||||
|
||||
size_t metadata_sum = 0;
|
||||
Node parse_node(vector<int> &data)
|
||||
{
|
||||
Node rval;
|
||||
rval.child_count = data.back();
|
||||
data.pop_back();
|
||||
|
||||
rval.metadata_count = data.back();
|
||||
data.pop_back();
|
||||
|
||||
for (size_t idx = 0; idx != rval.child_count; ++idx)
|
||||
{
|
||||
rval.children.push_back(parse_node(data));
|
||||
}
|
||||
|
||||
for (size_t idx = 0; idx != rval.metadata_count; ++idx)
|
||||
{
|
||||
rval.metadata.push_back(data.back());
|
||||
data.pop_back();
|
||||
metadata_sum += rval.metadata.back();
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
size_t node_value(Node const &node)
|
||||
{
|
||||
if (node.children.empty())
|
||||
{
|
||||
return accumulate(node.metadata.begin(), node.metadata.end(), 0);
|
||||
|
||||
}
|
||||
|
||||
size_t sum = 0;
|
||||
for (int idx : node.metadata)
|
||||
{
|
||||
int index = idx - 1;
|
||||
if (index >= node.children.size())
|
||||
continue;
|
||||
|
||||
sum += node_value(node.children[index]);
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<int> data;
|
||||
|
||||
while(!cin.eof())
|
||||
{
|
||||
int tmp;
|
||||
cin >> tmp;
|
||||
data.push_back(tmp);
|
||||
}
|
||||
|
||||
vector<int> copy(data.rbegin(), data.rend()); //reverse data
|
||||
Node root = parse_node(copy);
|
||||
|
||||
cout << "metadata sum: " << metadata_sum << "\n"; // answer to 1
|
||||
cout << "node value: " << node_value(root) << "\n"; // answer to 2
|
||||
}
|
||||
1
advent_of_code_2018/day8/test.in
Normal file
1
advent_of_code_2018/day8/test.in
Normal file
|
|
@ -0,0 +1 @@
|
|||
2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2
|
||||
1
advent_of_code_2018/day9/input.in
Normal file
1
advent_of_code_2018/day9/input.in
Normal file
|
|
@ -0,0 +1 @@
|
|||
468 players; last marble is worth 7184300 points
|
||||
120
advent_of_code_2018/day9/main1.cc
Normal file
120
advent_of_code_2018/day9/main1.cc
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/* Slow-as-fuck solution:
|
||||
|
||||
$ time ./a.out < input.in
|
||||
Num players: 468
|
||||
Last marble: 7184300
|
||||
Best player had a score of 3156297594
|
||||
./a.out < input.in 5143.54s user 1.02s system 99% cpu 1:25:53.91 total
|
||||
|
||||
*/
|
||||
|
||||
struct Game
|
||||
{
|
||||
size_t num_players;
|
||||
size_t last_marble;
|
||||
};
|
||||
|
||||
istream &operator>>(istream &in, Game &game)
|
||||
{
|
||||
cin >> game.num_players;
|
||||
cin.ignore(31); // ignore ' players; last marble is worth '.
|
||||
cin >> game.last_marble;
|
||||
cin.ignore(8); // ignore ' points\n'
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
size_t index(size_t main, size_t size)
|
||||
{
|
||||
main += 2;
|
||||
main = main % size;
|
||||
return main;
|
||||
}
|
||||
|
||||
void print_gamestate(size_t round, vector<size_t> const &game, size_t main)
|
||||
{
|
||||
cout << setw(7) << ("["s + to_string(round) + "]: "s);
|
||||
for (size_t idx = 0; idx != game.size(); ++idx)
|
||||
{
|
||||
if (idx == main)
|
||||
cout << setw(5) << ("("s + to_string(game[idx]) + ")"s);
|
||||
else
|
||||
cout << setw(5) << game[idx];
|
||||
}
|
||||
cout << "\n";
|
||||
}
|
||||
|
||||
size_t insert_marble(vector<size_t> *game, size_t main, size_t marble)
|
||||
{
|
||||
size_t before = (main + 2) % game->size();
|
||||
|
||||
if (before == 0)
|
||||
{
|
||||
game->push_back(marble);
|
||||
return game->size() - 1;
|
||||
}
|
||||
|
||||
game->insert(game->begin() + before, marble);
|
||||
return before;
|
||||
}
|
||||
|
||||
size_t bonus_marble(size_t main, size_t size)
|
||||
{
|
||||
if (main < 7)
|
||||
return size - (7 - main);
|
||||
|
||||
return main - 7;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
Game game;
|
||||
cin >> game;
|
||||
|
||||
cout << "Num players: " << game.num_players << "\n";
|
||||
cout << "Last marble: " << game.last_marble << "\n";
|
||||
|
||||
size_t main_marble = 0;
|
||||
|
||||
vector<size_t> players;
|
||||
players.resize(game.num_players, 0);
|
||||
|
||||
vector<size_t> marbles { 0 };
|
||||
// print_gamestate(0, marbles, main_marble);
|
||||
|
||||
for (size_t idx = 1; idx != game.last_marble + 1; ++idx)
|
||||
{
|
||||
cout << "Progress: " << idx / static_cast<float>(game.last_marble) * 100 << "\r";
|
||||
|
||||
if (idx % 23 == 0) //special case
|
||||
{
|
||||
size_t player = (idx - 1) % game.num_players;
|
||||
players[player] += idx;
|
||||
|
||||
main_marble = bonus_marble(main_marble, marbles.size());
|
||||
players[player] += marbles[main_marble];
|
||||
marbles.erase(marbles.begin() + main_marble);
|
||||
}
|
||||
else
|
||||
{
|
||||
main_marble = insert_marble(&marbles, main_marble, idx);
|
||||
}
|
||||
// print_gamestate(idx, marbles, main_marble);
|
||||
}
|
||||
|
||||
size_t best_player = 0;
|
||||
for (size_t idx = 1; idx < players.size(); ++idx)
|
||||
{
|
||||
if (players[best_player] < players[idx])
|
||||
best_player = idx;
|
||||
}
|
||||
|
||||
cout << "Best player had a score of " << players[best_player] << "\n";
|
||||
}
|
||||
146
advent_of_code_2018/day9/main2.cc
Normal file
146
advent_of_code_2018/day9/main2.cc
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/*
|
||||
$ time ./a.out < input.in
|
||||
Num players: 468
|
||||
Last marble: 7184300
|
||||
Highest reached score: 3156297594
|
||||
./a.out < input.in 0.16s user 0.05s system 99% cpu 0.203 total
|
||||
|
||||
*/
|
||||
|
||||
struct Game
|
||||
{
|
||||
size_t num_players;
|
||||
size_t last_marble;
|
||||
};
|
||||
|
||||
istream &operator>>(istream &in, Game &game)
|
||||
{
|
||||
cin >> game.num_players;
|
||||
cin.ignore(31); // ignore ' players; last marble is worth '.
|
||||
cin >> game.last_marble;
|
||||
cin.ignore(8); // ignore ' points\n'
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
struct List
|
||||
{
|
||||
size_t marble;
|
||||
List *next;
|
||||
List *previous;
|
||||
|
||||
List(size_t num)
|
||||
: marble(num), next(this), previous(this)
|
||||
{ }
|
||||
|
||||
List *rotate(int direction)
|
||||
{
|
||||
List *rval = this;
|
||||
|
||||
if (direction > 0)
|
||||
{
|
||||
for (; direction--; )
|
||||
rval = rval->next;
|
||||
}
|
||||
else
|
||||
{
|
||||
direction *= -1;
|
||||
for (; direction--; )
|
||||
rval = rval->previous;
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
List* insert_after(List *entry) //assume single entry
|
||||
{
|
||||
entry->next = next;
|
||||
entry->next->previous = entry;
|
||||
entry->previous = this;
|
||||
next = entry;
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
||||
//returns next in list. or nullptr when list size == 1
|
||||
List* remove_current()
|
||||
{
|
||||
if (next == this)
|
||||
{
|
||||
delete this;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
next->previous = previous;
|
||||
previous->next = next;
|
||||
|
||||
List *rval = next;
|
||||
delete this;
|
||||
return rval;
|
||||
}
|
||||
|
||||
void print_list()
|
||||
{
|
||||
List *current = next;
|
||||
cout << setw(5) << marble;
|
||||
|
||||
while (current != this)
|
||||
{
|
||||
cout << setw(5) << current->marble;
|
||||
current = current->next;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
Game game;
|
||||
cin >> game;
|
||||
|
||||
cout << "Num players: " << game.num_players << "\n";
|
||||
cout << "Last marble: " << game.last_marble << "\n";
|
||||
|
||||
List *root = new List(0);
|
||||
List *main = root;
|
||||
|
||||
vector<size_t> players;
|
||||
players.resize(game.num_players, 0);
|
||||
|
||||
for (size_t idx = 1; idx < game.last_marble + 1; ++idx)
|
||||
{
|
||||
if (idx % 23 == 0)
|
||||
{
|
||||
size_t player = (idx + 1) % game.num_players;
|
||||
players[player] += idx;
|
||||
|
||||
main = main->rotate(-7); //?
|
||||
players[player] += main->marble;
|
||||
main = main->remove_current();
|
||||
}
|
||||
else
|
||||
{
|
||||
main = main->rotate(1)->insert_after(new List(idx));
|
||||
}
|
||||
}
|
||||
|
||||
size_t player = 0;
|
||||
for (size_t idx = 0; idx < game.num_players; ++idx)
|
||||
{
|
||||
if (players[player] < players[idx])
|
||||
player = idx;
|
||||
}
|
||||
|
||||
cout << "Highest reached score: " << players[player] << "\n";
|
||||
|
||||
while(root)
|
||||
root = root->remove_current();
|
||||
|
||||
}
|
||||
1
advent_of_code_2018/day9/test.in
Normal file
1
advent_of_code_2018/day9/test.in
Normal file
|
|
@ -0,0 +1 @@
|
|||
10 players; last marble is worth 1618 points
|
||||
100
advent_of_code_2019/day1/input.txt
Normal file
100
advent_of_code_2019/day1/input.txt
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
84242
|
||||
87800
|
||||
131272
|
||||
84629
|
||||
105398
|
||||
91086
|
||||
99863
|
||||
146591
|
||||
58757
|
||||
51370
|
||||
108422
|
||||
95689
|
||||
91513
|
||||
113692
|
||||
79189
|
||||
113603
|
||||
52750
|
||||
123562
|
||||
147710
|
||||
145313
|
||||
98785
|
||||
86959
|
||||
89755
|
||||
97093
|
||||
62048
|
||||
98872
|
||||
145829
|
||||
76682
|
||||
65788
|
||||
119356
|
||||
124600
|
||||
69459
|
||||
80167
|
||||
56122
|
||||
117390
|
||||
72303
|
||||
141896
|
||||
140568
|
||||
82565
|
||||
75431
|
||||
54613
|
||||
124106
|
||||
104628
|
||||
78531
|
||||
63748
|
||||
139285
|
||||
111926
|
||||
101999
|
||||
53435
|
||||
57906
|
||||
58120
|
||||
146795
|
||||
147754
|
||||
79892
|
||||
65395
|
||||
121551
|
||||
50577
|
||||
122520
|
||||
66441
|
||||
86009
|
||||
121899
|
||||
71715
|
||||
112666
|
||||
112863
|
||||
140695
|
||||
54016
|
||||
78041
|
||||
91757
|
||||
130007
|
||||
89595
|
||||
142289
|
||||
149842
|
||||
136738
|
||||
70046
|
||||
89586
|
||||
142234
|
||||
142090
|
||||
147759
|
||||
85957
|
||||
136288
|
||||
86895
|
||||
131370
|
||||
71565
|
||||
128290
|
||||
95531
|
||||
110317
|
||||
115170
|
||||
56454
|
||||
71468
|
||||
113938
|
||||
64193
|
||||
115562
|
||||
73585
|
||||
81194
|
||||
92754
|
||||
105826
|
||||
104739
|
||||
137106
|
||||
104467
|
||||
120320
|
||||
25
advent_of_code_2019/day1/main1.cc
Normal file
25
advent_of_code_2019/day1/main1.cc
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int required_fuel(int mass)
|
||||
{
|
||||
return (mass / 3) - 2;
|
||||
}
|
||||
|
||||
int main(int argv, char **argc)
|
||||
{
|
||||
int sum = 0;
|
||||
|
||||
while (!cin.eof())
|
||||
{
|
||||
int mass;
|
||||
cin >> mass;
|
||||
|
||||
cout << mass << " requires " << required_fuel(mass) << "\n";
|
||||
|
||||
sum += required_fuel(mass);
|
||||
}
|
||||
|
||||
cout << "Total required fuel: " << sum << "\n";
|
||||
}
|
||||
29
advent_of_code_2019/day1/main2.cc
Normal file
29
advent_of_code_2019/day1/main2.cc
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int required_fuel(int mass)
|
||||
{
|
||||
int fuel = (mass / 3) - 2;
|
||||
|
||||
if (fuel <= 0)
|
||||
return 0;
|
||||
|
||||
return fuel + required_fuel(fuel);
|
||||
}
|
||||
|
||||
int main(int argv, char **argc)
|
||||
{
|
||||
int sum = 0;
|
||||
|
||||
while (!cin.eof())
|
||||
{
|
||||
int mass;
|
||||
cin >> mass;
|
||||
sum += required_fuel(mass);
|
||||
// cout << mass << " requires " << required_fuel(mass) << "\n";
|
||||
|
||||
}
|
||||
|
||||
cout << "Total required fuel: " << sum << "\n";
|
||||
}
|
||||
1
advent_of_code_2019/day2/input.txt
Normal file
1
advent_of_code_2019/day2/input.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,10,19,1,19,5,23,1,6,23,27,1,27,5,31,2,31,10,35,2,35,6,39,1,39,5,43,2,43,9,47,1,47,6,51,1,13,51,55,2,9,55,59,1,59,13,63,1,6,63,67,2,67,10,71,1,9,71,75,2,75,6,79,1,79,5,83,1,83,5,87,2,9,87,91,2,9,91,95,1,95,10,99,1,9,99,103,2,103,6,107,2,9,107,111,1,111,5,115,2,6,115,119,1,5,119,123,1,123,2,127,1,127,9,0,99,2,0,14,0
|
||||
59
advent_of_code_2019/day2/main1.cc
Normal file
59
advent_of_code_2019/day2/main1.cc
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
vector<int> read_input()
|
||||
{
|
||||
vector<int> rval;
|
||||
int buffer;
|
||||
char comma;
|
||||
|
||||
while (cin)
|
||||
{
|
||||
cin >> buffer;
|
||||
rval.push_back(buffer);
|
||||
cin >> comma;
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
vector<int> program = read_input();
|
||||
size_t instruction = 0;
|
||||
|
||||
// fix according to assignment
|
||||
program[1] = 12;
|
||||
program[2] = 2;
|
||||
|
||||
while(true)
|
||||
{
|
||||
switch(program[instruction++])
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
size_t lhs = program[instruction++];
|
||||
size_t rhs = program[instruction++];
|
||||
size_t result = program[instruction++];
|
||||
program[result] = program[lhs] + program[rhs];
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
{
|
||||
size_t lhs = program[instruction++];
|
||||
size_t rhs = program[instruction++];
|
||||
size_t result = program[instruction++];
|
||||
program[result] = program[lhs] * program[rhs];
|
||||
}
|
||||
break;
|
||||
|
||||
case 99:
|
||||
cout << "Result: " << program[0] << "\n";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
79
advent_of_code_2019/day2/main2.cc
Normal file
79
advent_of_code_2019/day2/main2.cc
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
vector<int> read_input()
|
||||
{
|
||||
vector<int> rval;
|
||||
int buffer;
|
||||
char comma;
|
||||
|
||||
while (cin)
|
||||
{
|
||||
cin >> buffer;
|
||||
rval.push_back(buffer);
|
||||
cin >> comma;
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
int run_program(vector<int> program, int noun = 12, int verb = 2)
|
||||
{
|
||||
cout << "running program!\n";
|
||||
size_t instruction = 0;
|
||||
|
||||
program[1] = noun;
|
||||
program[2] = verb;
|
||||
|
||||
while(true)
|
||||
{
|
||||
switch(program[instruction++])
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
size_t lhs = program[instruction++];
|
||||
size_t rhs = program[instruction++];
|
||||
size_t result = program[instruction++];
|
||||
program[result] = program[lhs] + program[rhs];
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
{
|
||||
size_t lhs = program[instruction++];
|
||||
size_t rhs = program[instruction++];
|
||||
size_t result = program[instruction++];
|
||||
program[result] = program[lhs] * program[rhs];
|
||||
}
|
||||
break;
|
||||
|
||||
case 99:
|
||||
return program[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
vector<int> program = read_input();
|
||||
int target_output = 19690720;
|
||||
|
||||
for (int noun = 0; noun < 100; ++noun)
|
||||
{
|
||||
cout << "\rIteration: " << noun << " / 100";
|
||||
for (int verb = 0; verb < 100; ++verb)
|
||||
{
|
||||
int result = run_program(program, noun, verb);
|
||||
|
||||
if (result == target_output)
|
||||
{
|
||||
cout << "Noun: " << noun << "\n";
|
||||
cout << "Verb: " << verb << "\n";
|
||||
cout << "Answer: " << (100 * noun + verb) << "\n";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1
advent_of_code_2019/day2/test.txt
Normal file
1
advent_of_code_2019/day2/test.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
2,3,0,3,99
|
||||
2
advent_of_code_2019/day3/input.txt
Normal file
2
advent_of_code_2019/day3/input.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
R1009,U263,L517,U449,L805,D78,L798,D883,L777,D562,R652,D348,R999,D767,L959,U493,R59,D994,L225,D226,R634,D200,R953,U343,L388,U158,R943,U544,L809,D785,R618,U499,L476,U600,L452,D693,L696,U764,L927,D346,L863,D458,L789,U268,R586,U884,L658,D371,L910,U178,R524,U169,R973,D326,R483,U233,R26,U807,L246,D711,L641,D75,R756,U365,R203,D377,R624,U430,L422,U367,R547,U294,L916,D757,R509,D332,R106,D401,L181,U5,L443,U197,R406,D829,R878,U35,L958,U31,L28,D362,R188,D582,R358,U750,R939,D491,R929,D513,L541,U418,R861,D639,L917,U582,R211,U725,R711,D718,L673,U921,L157,U83,L199,U501,L66,D993,L599,D947,L26,U237,L981,U833,L121,U25,R641,D372,L757,D645,R287,U390,R274,U964,R288,D209,R109,D364,R983,U715,L315,U758,R36,D500,R626,U893,L840,U716,L606,U831,L969,D643,L300,D838,R31,D751,L632,D702,R468,D7,L169,U149,R893,D33,R816,D558,R152,U489,L237,U415,R434,D472,L198,D874,L351,U148,R761,U809,R21,D25,R586,D338,L568,U20,L157,U221,L26,U424,R261,D227,L551,D754,L90,U110,L791,U433,R840,U323,R240,U124,L723,D418,R938,D173,L160,U293,R773,U204,R192,U958,L472,D703,R556,D168,L263,U574,L845,D932,R165,D348,R811,D834,R960,U877,R935,D141,R696,U748,L316,U236,L796,D566,R524,U449,R378,U480,L79,U227,R867,D185,R474,D757,R366,U153,R882,U252,R861,U900,R28,U381,L845,U642,L849,U352,R134,D294,R788,D406,L693,D697,L433,D872,R78,D364,R240,U995,R48,D681,R727,D825,L583,U44,R743,D929,L616,D262,R997,D15,R575,U341,R595,U889,R254,U76,R962,D944,R724,D261,R608,U753,L389,D324,L569,U308,L488,D358,L695,D863,L712,D978,R149,D177,R92
|
||||
L1003,D960,L10,D57,R294,U538,R867,D426,L524,D441,R775,U308,R577,D785,R495,U847,R643,D895,R448,U685,L253,U312,L312,U753,L89,U276,R799,D923,L33,U595,R400,U111,L664,D542,R171,U709,L809,D713,L483,U918,L14,U854,L150,D69,L158,D500,L91,D800,R431,D851,L798,U515,L107,U413,L94,U390,L17,U221,L999,D546,L191,U472,L568,U114,L913,D743,L713,D215,L569,D674,L869,U549,L789,U259,L330,D76,R243,D592,L646,U880,L363,U542,L464,D955,L107,U473,R818,D786,R852,U968,R526,D78,L275,U891,R480,U991,L981,D391,R83,U691,R689,D230,L217,D458,R10,U736,L317,D145,R902,D428,R344,U334,R131,D739,R438,D376,L652,U304,L332,D452,R241,D783,R82,D317,R796,U323,R287,D487,L302,D110,R233,U631,R584,U973,L878,D834,L930,U472,R120,U78,R806,D21,L521,U988,R251,D817,R44,D789,R204,D669,R616,D96,R624,D891,L532,U154,R438,U469,R785,D431,R945,U649,R670,D11,R840,D521,L235,D69,L551,D266,L454,U807,L885,U590,L647,U763,R449,U194,R68,U809,L884,U962,L476,D648,L139,U96,L300,U351,L456,D202,R168,D698,R161,U834,L273,U47,L8,D157,L893,D200,L454,U723,R886,U92,R474,U262,L190,U110,L407,D723,R786,D786,L572,D915,L904,U744,L820,D663,R205,U878,R186,U247,L616,D386,R582,U688,L349,D399,R702,U132,L276,U866,R851,D633,R468,D263,R678,D96,L50,U946,R349,D482,R487,U525,R464,U977,L499,D187,R546,U708,L627,D470,R673,D886,L375,U616,L503,U38,L775,D8,L982,D556,R159,U680,L124,U777,L640,D607,R248,D671,L65,D290,R445,U778,L650,U679,L846,D1,L769,U659,R734,D962,R588,U178,R888,D753,R223,U318,L695,D586,R430,D61,R105,U801,R953,U721,L856,U769,R937,D335,R895
|
||||
104
advent_of_code_2019/day3/main.ih
Normal file
104
advent_of_code_2019/day3/main.ih
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <tuple>
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct Instr//uction
|
||||
{
|
||||
char dir;
|
||||
int steps;
|
||||
};
|
||||
|
||||
struct Point
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
void print_grid(vector<char> const &grid, size_t width)
|
||||
{
|
||||
for (size_t idx = 0; idx < grid.size(); idx += width)
|
||||
{
|
||||
for (size_t col = 0; col < width; ++col)
|
||||
{
|
||||
cout << grid[idx + col];
|
||||
}
|
||||
cout << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
size_t index(Point const &point, int width)
|
||||
{
|
||||
return point.y * width + point.x;
|
||||
}
|
||||
|
||||
Point index_to_point(int index, int width)
|
||||
{
|
||||
return {index % width, index / width};
|
||||
}
|
||||
|
||||
Point update(Point point, Instr const &instr)
|
||||
{
|
||||
switch(instr.dir)
|
||||
{
|
||||
case 'R':
|
||||
point.x += instr.steps;
|
||||
break;
|
||||
case 'L':
|
||||
point.x -= instr.steps;
|
||||
break;
|
||||
case 'U':
|
||||
point.y -= instr.steps;
|
||||
break;
|
||||
case 'D':
|
||||
point.y += instr.steps;
|
||||
break;
|
||||
default:
|
||||
cout << "unknown direction '" << instr.dir << "'\n";
|
||||
}
|
||||
return point;
|
||||
}
|
||||
|
||||
auto dimensions(vector<Instr> const &instructions, Point start = {0, 0})
|
||||
{
|
||||
Point min{0, 0};
|
||||
Point max{0, 0};
|
||||
|
||||
for (Instr const &instr : instructions)
|
||||
{
|
||||
start = update(start, instr);
|
||||
min.x = std::min(start.x, min.x);
|
||||
max.x = std::max(start.x, max.x);
|
||||
min.y = std::min(start.y, min.y);
|
||||
max.y = std::max(start.y, max.y);
|
||||
}
|
||||
|
||||
return tuple<Point, Point>(min, max);
|
||||
}
|
||||
|
||||
vector<Instr> parse_instructions(std::string const &line)
|
||||
{
|
||||
stringstream ss{line};
|
||||
vector<Instr> rval;
|
||||
char dir;
|
||||
int steps;
|
||||
|
||||
while (ss)
|
||||
{
|
||||
ss >> dir;
|
||||
ss >> steps;
|
||||
rval.push_back({dir, steps});
|
||||
ss >> dir; // parse comma
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
vector<Instr> parse_line()
|
||||
{
|
||||
string buffer;
|
||||
getline(cin, buffer);
|
||||
return parse_instructions(buffer);
|
||||
}
|
||||
143
advent_of_code_2019/day3/main1.cc
Normal file
143
advent_of_code_2019/day3/main1.cc
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
#include "main.ih"
|
||||
#include <limits>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
vector<Instr> wire_one = parse_line();
|
||||
vector<Instr> wire_two = parse_line();
|
||||
|
||||
auto [min1, max1] = dimensions(wire_one);
|
||||
auto [min2, max2] = dimensions(wire_two);
|
||||
|
||||
Point min = {std::min(min1.x, min2.x), std::min(min1.y, min2.y)};
|
||||
Point max = {std::max(max1.x, max2.x), std::max(max1.y, max2.y)};
|
||||
|
||||
int width = max.x + abs(min.x) + 2;
|
||||
int height = max.y + abs(min.y) + 2;
|
||||
Point startp = {abs(min.x) + 1, abs(min.y) + 1};
|
||||
|
||||
vector<Point> overlaps;
|
||||
|
||||
vector<char> grid;
|
||||
grid.resize(width * height, '.');
|
||||
size_t location = index(startp, width);
|
||||
size_t stored_start = location;
|
||||
grid[location] = 'O';
|
||||
|
||||
for (Instr const &instr : wire_one)
|
||||
{
|
||||
switch (instr.dir)
|
||||
{
|
||||
case 'R':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
location += 1;
|
||||
grid[location] = '1';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
location -= 1;
|
||||
grid[location] = '1';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
location -= width;
|
||||
grid[location] = '1';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
location += width;
|
||||
grid[location] = '1';
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// some delish copy-paste
|
||||
location = stored_start;
|
||||
for (Instr const &instr : wire_two)
|
||||
{
|
||||
switch (instr.dir)
|
||||
{
|
||||
case 'R':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
location += 1;
|
||||
if (grid[location] == '1')
|
||||
{
|
||||
grid[location] = 'X';
|
||||
overlaps.push_back(index_to_point(location, width));
|
||||
}
|
||||
else
|
||||
grid[location] = '2';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
location -= 1;
|
||||
if (grid[location] == '1')
|
||||
{
|
||||
grid[location] = 'X';
|
||||
overlaps.push_back(index_to_point(location, width));
|
||||
}
|
||||
else
|
||||
grid[location] = '2';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
location -= width;
|
||||
if (grid[location] == '1')
|
||||
{
|
||||
grid[location] = 'X';
|
||||
overlaps.push_back(index_to_point(location, width));
|
||||
}
|
||||
else
|
||||
grid[location] = '2';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
location += width;
|
||||
if (grid[location] == '1')
|
||||
{
|
||||
grid[location] = 'X';
|
||||
overlaps.push_back(index_to_point(location, width));
|
||||
}
|
||||
else
|
||||
grid[location] = '2';
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// print_grid(grid, width);
|
||||
|
||||
auto manhattan = [](Point p1, Point p2) -> int
|
||||
{
|
||||
return abs(p1.x - p2.x) + abs(p1.y - p2.y);
|
||||
};
|
||||
|
||||
int mindist = numeric_limits<int>::max();
|
||||
for (Point overlap : overlaps)
|
||||
{
|
||||
mindist = std::min(mindist, manhattan(startp, overlap));
|
||||
}
|
||||
|
||||
cout << "mindist: " << mindist << "\n";
|
||||
}
|
||||
144
advent_of_code_2019/day3/main2.cc
Normal file
144
advent_of_code_2019/day3/main2.cc
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
#include "main.ih"
|
||||
#include <limits>
|
||||
|
||||
struct Location
|
||||
{
|
||||
int wire_one_dist = -1;
|
||||
int wire_two_dist = -1;
|
||||
|
||||
int time()
|
||||
{
|
||||
if (wire_one_dist == -1 || wire_two_dist == -1)
|
||||
return numeric_limits<int>::max();
|
||||
return wire_one_dist + wire_two_dist;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
vector<Instr> wire_one = parse_line();
|
||||
vector<Instr> wire_two = parse_line();
|
||||
|
||||
auto [min1, max1] = dimensions(wire_one);
|
||||
auto [min2, max2] = dimensions(wire_two);
|
||||
|
||||
Point min = {std::min(min1.x, min2.x), std::min(min1.y, min2.y)};
|
||||
Point max = {std::max(max1.x, max2.x), std::max(max1.y, max2.y)};
|
||||
|
||||
int width = max.x + abs(min.x) + 2;
|
||||
int height = max.y + abs(min.y) + 2;
|
||||
Point startp = {abs(min.x) + 1, abs(min.y) + 1};
|
||||
|
||||
vector<int> overlaps;
|
||||
|
||||
vector<Location> grid;
|
||||
grid.resize(width * height);
|
||||
size_t location = index(startp, width);
|
||||
size_t stored_start = location;
|
||||
grid[location] = {0, 0};
|
||||
|
||||
int distance = 0;
|
||||
for (Instr const &instr : wire_one)
|
||||
{
|
||||
switch (instr.dir)
|
||||
{
|
||||
case 'R':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
++distance;
|
||||
location += 1;
|
||||
grid[location].wire_one_dist = grid[location].wire_one_dist == -1 ? distance : grid[location].wire_one_dist;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
++distance;
|
||||
location -= 1;
|
||||
grid[location].wire_one_dist = grid[location].wire_one_dist == -1 ? distance : grid[location].wire_one_dist;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
++distance;
|
||||
location -= width;
|
||||
grid[location].wire_one_dist = grid[location].wire_one_dist == -1 ? distance : grid[location].wire_one_dist;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
++distance;
|
||||
location += width;
|
||||
grid[location].wire_one_dist = grid[location].wire_one_dist == -1 ? distance : grid[location].wire_one_dist;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// some delish copy-paste
|
||||
location = stored_start;
|
||||
distance = 0;
|
||||
for (Instr const &instr : wire_two)
|
||||
{
|
||||
switch (instr.dir)
|
||||
{
|
||||
case 'R':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
++distance;
|
||||
location += 1;
|
||||
grid[location].wire_two_dist = grid[location].wire_two_dist == -1 ? distance : grid[location].wire_two_dist;
|
||||
if (grid[location].wire_one_dist != -1)
|
||||
overlaps.push_back(location);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
++distance;
|
||||
location -= 1;
|
||||
grid[location].wire_two_dist = grid[location].wire_two_dist == -1 ? distance : grid[location].wire_two_dist;
|
||||
if (grid[location].wire_one_dist != -1)
|
||||
overlaps.push_back(location);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
++distance;
|
||||
location -= width;
|
||||
grid[location].wire_two_dist = grid[location].wire_two_dist == -1 ? distance : grid[location].wire_two_dist;
|
||||
if (grid[location].wire_one_dist != -1)
|
||||
overlaps.push_back(location);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
for (int idx = 0; idx < instr.steps; ++idx)
|
||||
{
|
||||
++distance;
|
||||
location += width;
|
||||
grid[location].wire_two_dist = grid[location].wire_two_dist == -1 ? distance : grid[location].wire_two_dist;
|
||||
if (grid[location].wire_one_dist != -1)
|
||||
overlaps.push_back(location);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int mintime = numeric_limits<int>::max();
|
||||
for (int overlap : overlaps)
|
||||
{
|
||||
cout << "time: " << grid[overlap].time() << "\n";
|
||||
mintime = std::min(grid[overlap].time(), mintime);
|
||||
}
|
||||
|
||||
cout << "mintime: " << mintime << "\n";
|
||||
}
|
||||
2
advent_of_code_2019/day3/test.txt
Normal file
2
advent_of_code_2019/day3/test.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
R75,D30,R83,U83,L12,D49,R71,U7,L72
|
||||
U62,R66,U55,R34,D71,R55,D58,R83
|
||||
41
advent_of_code_2019/day4/main1.cc
Normal file
41
advent_of_code_2019/day4/main1.cc
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool meets_criteria(size_t passwd)
|
||||
{
|
||||
string number = to_string(passwd);
|
||||
|
||||
bool adjacent = false;
|
||||
|
||||
char min = '0';
|
||||
char prev = '1';
|
||||
for (char ch : number)
|
||||
{
|
||||
adjacent = adjacent | (prev == ch);
|
||||
|
||||
if (ch < min)
|
||||
return false;
|
||||
|
||||
min = ch;
|
||||
prev = ch;
|
||||
}
|
||||
|
||||
return adjacent;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
const size_t LOWER = 178416;
|
||||
const size_t UPPER = 676461;
|
||||
|
||||
size_t valid = 0;
|
||||
for (size_t idx = LOWER; idx <= UPPER; ++idx)
|
||||
{
|
||||
if (meets_criteria(idx))
|
||||
++valid;
|
||||
}
|
||||
|
||||
cout << "valid: " << valid << "\n";
|
||||
}
|
||||
62
advent_of_code_2019/day4/main2.cc
Normal file
62
advent_of_code_2019/day4/main2.cc
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool meets_criteria(size_t passwd)
|
||||
{
|
||||
string number = to_string(passwd);
|
||||
|
||||
bool adjacent = false;
|
||||
int groupsize = 0;
|
||||
|
||||
char min = '0';
|
||||
char prev = '1';
|
||||
for (char ch : number)
|
||||
{
|
||||
adjacent = adjacent | (prev == ch);
|
||||
|
||||
if (prev == ch)
|
||||
++groupsize;
|
||||
else
|
||||
{
|
||||
if (groupsize > 1 && groupsize % 2 != 0)
|
||||
{
|
||||
cout << "groupsize bounced: " << passwd << "\n";
|
||||
return false; //uneven group
|
||||
}
|
||||
|
||||
prev = ch;
|
||||
groupsize = 1;
|
||||
}
|
||||
|
||||
if (ch < min)
|
||||
return false;
|
||||
|
||||
min = ch;
|
||||
}
|
||||
|
||||
if (groupsize == 1)
|
||||
return adjacent;
|
||||
else if (groupsize % 2 != 0)
|
||||
{
|
||||
cout << "groupsize bounced (end): " << passwd << "\n";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
const size_t LOWER = 178416;
|
||||
const size_t UPPER = 676461;
|
||||
|
||||
size_t valid = 0;
|
||||
for (size_t idx = LOWER; idx <= UPPER; ++idx)
|
||||
{
|
||||
if (meets_criteria(idx))
|
||||
++valid;
|
||||
}
|
||||
|
||||
cout << "valid: " << valid << "\n";
|
||||
}
|
||||
200
advent_of_code_2020/day1/input.txt
Normal file
200
advent_of_code_2020/day1/input.txt
Normal file
|
|
@ -0,0 +1,200 @@
|
|||
997
|
||||
1582
|
||||
1790
|
||||
1798
|
||||
1094
|
||||
1831
|
||||
1879
|
||||
1730
|
||||
1995
|
||||
1702
|
||||
1680
|
||||
1869
|
||||
1964
|
||||
1777
|
||||
1862
|
||||
1928
|
||||
1997
|
||||
1741
|
||||
1604
|
||||
1691
|
||||
1219
|
||||
1458
|
||||
1749
|
||||
1717
|
||||
1786
|
||||
1665
|
||||
1724
|
||||
1998
|
||||
1589
|
||||
1828
|
||||
1953
|
||||
1848
|
||||
1500
|
||||
1590
|
||||
1968
|
||||
1948
|
||||
1323
|
||||
1800
|
||||
1986
|
||||
679
|
||||
1907
|
||||
1916
|
||||
1820
|
||||
1661
|
||||
1479
|
||||
1808
|
||||
1824
|
||||
1825
|
||||
1952
|
||||
1666
|
||||
1541
|
||||
1791
|
||||
1906
|
||||
1638
|
||||
1557
|
||||
1999
|
||||
1710
|
||||
1549
|
||||
1912
|
||||
1974
|
||||
1628
|
||||
1748
|
||||
1411
|
||||
1978
|
||||
1865
|
||||
1932
|
||||
1839
|
||||
1892
|
||||
1981
|
||||
1807
|
||||
357
|
||||
912
|
||||
1443
|
||||
1972
|
||||
1816
|
||||
1890
|
||||
1029
|
||||
1175
|
||||
1522
|
||||
1750
|
||||
2001
|
||||
1655
|
||||
1955
|
||||
1949
|
||||
1660
|
||||
233
|
||||
1891
|
||||
1994
|
||||
1934
|
||||
1908
|
||||
1573
|
||||
1712
|
||||
1622
|
||||
1770
|
||||
1574
|
||||
1778
|
||||
1851
|
||||
2004
|
||||
1818
|
||||
1200
|
||||
1229
|
||||
1110
|
||||
1005
|
||||
1716
|
||||
1765
|
||||
1835
|
||||
1773
|
||||
15
|
||||
1914
|
||||
1833
|
||||
1689
|
||||
1843
|
||||
1718
|
||||
1872
|
||||
390
|
||||
1941
|
||||
1178
|
||||
1670
|
||||
1899
|
||||
1864
|
||||
1913
|
||||
2010
|
||||
1855
|
||||
1797
|
||||
1767
|
||||
1673
|
||||
1657
|
||||
1607
|
||||
1305
|
||||
1341
|
||||
1662
|
||||
1845
|
||||
1980
|
||||
1534
|
||||
1789
|
||||
1876
|
||||
1849
|
||||
1926
|
||||
1958
|
||||
977
|
||||
1709
|
||||
1647
|
||||
1832
|
||||
1785
|
||||
1854
|
||||
1667
|
||||
1679
|
||||
1970
|
||||
1186
|
||||
2000
|
||||
1681
|
||||
1684
|
||||
1614
|
||||
1988
|
||||
1561
|
||||
1594
|
||||
1636
|
||||
1327
|
||||
1696
|
||||
1915
|
||||
1045
|
||||
1829
|
||||
1079
|
||||
1295
|
||||
1213
|
||||
1714
|
||||
1992
|
||||
1984
|
||||
1951
|
||||
1687
|
||||
1842
|
||||
1792
|
||||
87
|
||||
1732
|
||||
428
|
||||
1799
|
||||
1850
|
||||
1962
|
||||
1629
|
||||
1965
|
||||
1142
|
||||
1040
|
||||
131
|
||||
1844
|
||||
1454
|
||||
1779
|
||||
1369
|
||||
1960
|
||||
1887
|
||||
1725
|
||||
1893
|
||||
1465
|
||||
1676
|
||||
1826
|
||||
1462
|
||||
1408
|
||||
1937
|
||||
1643
|
||||
1069
|
||||
1759
|
||||
35
advent_of_code_2020/day1/main1.cc
Normal file
35
advent_of_code_2020/day1/main1.cc
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<int> numbers;
|
||||
ifstream in("input.txt");
|
||||
|
||||
while (true)
|
||||
{
|
||||
int tmp;
|
||||
in >> tmp;
|
||||
|
||||
if (!in)
|
||||
break;
|
||||
|
||||
numbers.push_back(tmp);
|
||||
cout << "read " << tmp << "\n";
|
||||
}
|
||||
|
||||
cout << "Read " << numbers.size() << " numbers.\n";
|
||||
|
||||
for (size_t outer = 0; outer < numbers.size(); ++outer)
|
||||
{
|
||||
for (size_t inner = outer + 1; inner < numbers.size(); ++inner)
|
||||
{
|
||||
if (numbers[outer] + numbers[inner]== 2020)
|
||||
cout << "Answer: " << numbers[outer] * numbers[inner] << "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
42
advent_of_code_2020/day1/main2.cc
Normal file
42
advent_of_code_2020/day1/main2.cc
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
vector<int> numbers;
|
||||
ifstream in("input.txt");
|
||||
|
||||
while (true)
|
||||
{
|
||||
int tmp;
|
||||
in >> tmp;
|
||||
|
||||
if (!in)
|
||||
break;
|
||||
|
||||
numbers.push_back(tmp);
|
||||
cout << "read " << tmp << "\n";
|
||||
}
|
||||
|
||||
cout << "Read " << numbers.size() << " numbers.\n";
|
||||
|
||||
for (size_t outer = 0; outer < numbers.size(); ++outer)
|
||||
{
|
||||
for (size_t inner = outer + 1; inner < numbers.size(); ++inner)
|
||||
{
|
||||
for (size_t innest = inner + 1; innest < numbers.size(); ++innest)
|
||||
{
|
||||
if (numbers[outer] + numbers[inner] + numbers[innest] == 2020)
|
||||
cout << "Answer: " << numbers[outer] * numbers[inner] * numbers[innest] << "\n";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue