diff --git a/.vscode/settings.json b/.vscode/settings.json index c93ffad..d002ed5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -39,6 +39,7 @@ "xstddef": "cpp", "xstring": "cpp", "xtr1common": "cpp", - "xutility": "cpp" + "xutility": "cpp", + "algorithm": "cpp" } } \ No newline at end of file diff --git a/2019/4thDay/challenge.txt b/2019/4thDay/challenge.txt new file mode 100644 index 0000000..0c8f826 --- /dev/null +++ b/2019/4thDay/challenge.txt @@ -0,0 +1,25 @@ +--- Day 4: Secure Container --- +You arrive at the Venus fuel depot only to discover it's protected by a password. The Elves had written the password on a sticky note, but someone threw it out. + +However, they do remember a few key facts about the password: + +It is a six-digit number. +The value is within the range given in your puzzle input. +Two adjacent digits are the same (like 22 in 122345). +Going from left to right, the digits never decrease; they only ever increase or stay the same (like 111123 or 135679). +Other than the range rule, the following are true: + +111111 meets these criteria (double 11, never decreases). +223450 does not meet these criteria (decreasing pair of digits 50). +123789 does not meet these criteria (no double). +How many different passwords within the range given in your puzzle input meet these criteria? + +--- Part Two --- +An Elf just remembered one more important detail: the two adjacent matching digits are not part of a larger group of matching digits. + +Given this additional criterion, but still ignoring the range rule, the following are now true: + +112233 meets these criteria because the digits never decrease and all repeated digits are exactly two digits long. +123444 no longer meets the criteria (the repeated 44 is part of a larger group of 444). +111122 meets the criteria (even though 1 is repeated more than twice, it still contains a double 22). +How many different passwords within the range given in your puzzle input meet all of the criteria? diff --git a/2019/4thDay/challenge1.cpp b/2019/4thDay/challenge1.cpp new file mode 100644 index 0000000..5553950 --- /dev/null +++ b/2019/4thDay/challenge1.cpp @@ -0,0 +1,45 @@ +#include +#include + +bool checkPassword( std::string pass ) +{ + + // Is less than 6 + if ( pass.length() > 6 || pass.length() < 6 ) return false; + + // Have any repeats + bool repeats = false; + char lastr = pass[0]; + for ( int i = 1; i < pass.length(); i++ ) + { + if ( lastr == pass[i] ) repeats = true; + lastr = pass[i]; + } + + if ( !repeats ) return false; + + // Digets never decrease + bool decreases = true; + for ( int i = 1; i < pass.length(); i++ ) + if ( pass[i - 1] > pass[i] ) decreases = false; + + if ( !decreases ) return false; + + return true; + +} + +int main(int argc, char** argv) +{ + + int upper = 893698; + int lower = 367479; + + int accumilator = 0; + for ( int i = lower; i < upper; i++ ) + if ( checkPassword( std::to_string( i ) ) ) + accumilator++; + + std::cout << "There are : " << accumilator << " valid passwords" << std::endl; + +} diff --git a/2019/4thDay/challenge1.exe b/2019/4thDay/challenge1.exe new file mode 100644 index 0000000..f31a06b Binary files /dev/null and b/2019/4thDay/challenge1.exe differ diff --git a/2019/4thDay/challenge2.cpp b/2019/4thDay/challenge2.cpp new file mode 100644 index 0000000..0624c23 --- /dev/null +++ b/2019/4thDay/challenge2.cpp @@ -0,0 +1,44 @@ +#include +#include +#include + +bool checkPassword( std::string pass ) +{ + + // Is less than 6 + if ( pass.length() > 6 || pass.length() < 6 ) return false; + + // Digets never decrease + bool decreases = true; + for ( int i = 1; i < pass.length(); i++ ) + if ( pass[i - 1] > pass[i] ) decreases = false; + + if ( !decreases ) return false; + + // No repeats ( conform w part 2 rule ) + if ( std::any_of( pass.begin(), pass.end(), + [&]( auto d ) { + return std::count( pass.begin(), pass.end(), d ) == 2; + } ) ) + { + return true; + } + + return false; + +} + +int main(int argc, char** argv) +{ + + int upper = 893698; + int lower = 367479; + + int accumilator = 0; + for ( int i = lower; i < upper; i++ ) + if ( checkPassword( std::to_string( i ) ) ) + accumilator++; + + std::cout << "There are : " << accumilator << " valid passwords" << std::endl; + +} diff --git a/2019/4thDay/challenge2.exe b/2019/4thDay/challenge2.exe new file mode 100644 index 0000000..ccfefe4 Binary files /dev/null and b/2019/4thDay/challenge2.exe differ