Added solution to Day4-1
This commit is contained in:
133
Day4-1.cpp
Normal file
133
Day4-1.cpp
Normal file
@@ -0,0 +1,133 @@
|
||||
//Fun/AdventCalendar2020/Day4-1.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 12-04-20
|
||||
//Modified: 12-04-20
|
||||
//Validate passport data
|
||||
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
|
||||
|
||||
struct passport{
|
||||
std::string birthYear;
|
||||
std::string issueYear;
|
||||
std::string expirationYear;
|
||||
std::string height;
|
||||
std::string hairColor;
|
||||
std::string eyeColor;
|
||||
std::string passportId;
|
||||
std::string countryId;
|
||||
//Returns true if the passport is valid
|
||||
bool isValid(){
|
||||
if(validString(birthYear) && validString(issueYear) && validString(expirationYear) && validString(height) && validString(hairColor) && validString(eyeColor) && validString(passportId)){
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//Returns true if the string is a valid string
|
||||
bool validString(std::string str){
|
||||
if(!str.empty()){
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
std::vector<passport> importData(){
|
||||
std::vector<passport> passports;
|
||||
std::ifstream inputFile;
|
||||
inputFile.open("inputs/Day4.txt"); //Open the file that has the input for the question
|
||||
|
||||
//Get the input one line at a time because a full blank line is the end of a passport
|
||||
while(!inputFile.eof()){
|
||||
passport currentPassport;
|
||||
std::string currentLine;
|
||||
std::getline(inputFile, currentLine);
|
||||
while(currentLine != ""){
|
||||
//Split the string on [space]
|
||||
for(std::string str : mee::split(currentLine, ' ')){
|
||||
//Split the string on :
|
||||
std::vector<std::string> fields = mee::split(str, ':');
|
||||
std::string field = fields[0];
|
||||
std::string value = fields[1];
|
||||
|
||||
//Determine what field you are dealing with and save the data
|
||||
if(field == "byr"){
|
||||
currentPassport.birthYear = value;
|
||||
}
|
||||
else if(field == "iyr"){
|
||||
currentPassport.issueYear = value;
|
||||
}
|
||||
else if(field == "eyr"){
|
||||
currentPassport.expirationYear = value;
|
||||
}
|
||||
else if(field == "hgt"){
|
||||
currentPassport.height = value;
|
||||
}
|
||||
else if(field == "hcl"){
|
||||
currentPassport.hairColor = value;
|
||||
}
|
||||
else if(field == "ecl"){
|
||||
currentPassport.eyeColor = value;
|
||||
}
|
||||
else if(field == "pid"){
|
||||
currentPassport.passportId = value;
|
||||
}
|
||||
else if(field == "cid"){
|
||||
currentPassport.countryId = value;
|
||||
}
|
||||
else{
|
||||
std::cout << "ERROR!\n" << "field = " << field << "\tValue = " << value << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
std::getline(inputFile, currentLine);
|
||||
}
|
||||
passports.push_back(currentPassport);
|
||||
}
|
||||
|
||||
return passports;
|
||||
}
|
||||
|
||||
int main(){
|
||||
mee::Stopwatch timer;
|
||||
int validPassports = 0;
|
||||
|
||||
//Start the timer
|
||||
timer.start();
|
||||
|
||||
|
||||
//Get the passport data
|
||||
std::vector<passport> passports = importData();
|
||||
|
||||
//Count how many are valid
|
||||
for(passport pspt : passports){
|
||||
if(pspt.isValid()){
|
||||
++validPassports;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Print the results
|
||||
std::cout << "There are " << validPassports << " valid passports"
|
||||
<< "\nIt took " << timer.getStr() << " to finish this problem" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Results:
|
||||
|
||||
*/
|
||||
Reference in New Issue
Block a user