aoc

My solutions for the Advent of Code
git clone https://git.tronto.net/aoc
Download | Log | Files | Refs | README

day02b.cpp (831B)


      1 #include <iostream>
      2 #include <sstream>
      3 #include <vector>
      4 #include <algorithm>
      5 #include <string>
      6 using namespace std;
      7 
      8 bool isvalid_v(const vector<int> &v) {
      9 	int b = v[0] > v[1] ? 1 : -1;
     10 	for (unsigned i = 0; i < v.size()-1; i++) {
     11 		int d = b * (v[i] - v[i+1]);
     12 		if (d < 1 || d > 3)
     13 			return false;
     14 	}
     15 	return true;
     16 }
     17 
     18 vector<int> getv(const string &line) {
     19 	int x;
     20 	vector<int> ret;
     21 	istringstream s(line);
     22 
     23 	while(s >> x)
     24 		ret.push_back(x);
     25 
     26 	return ret;
     27 }
     28 
     29 bool isvalid(const string &line) {
     30 	vector v0 = getv(line);
     31 	if (isvalid_v(v0))
     32 		return true;
     33 	for (unsigned i = 0; i < v0.size(); i++) {
     34 		vector v = v0;
     35 		v.erase(v.begin() + i);
     36 		if (isvalid_v(v))
     37 			return true;
     38 	}
     39 	return false;
     40 }
     41 
     42 int main() {
     43 	int tot = 0;
     44 	for (string line; getline(cin, line); )
     45 		tot += isvalid(line);
     46 	cout << tot << endl;
     47 	return 0;
     48 }