Day 4
This commit is contained in:
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -39,6 +39,7 @@
|
||||
"xstddef": "cpp",
|
||||
"xstring": "cpp",
|
||||
"xtr1common": "cpp",
|
||||
"xutility": "cpp"
|
||||
"xutility": "cpp",
|
||||
"algorithm": "cpp"
|
||||
}
|
||||
}
|
||||
25
2019/4thDay/challenge.txt
Normal file
25
2019/4thDay/challenge.txt
Normal file
@@ -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?
|
||||
45
2019/4thDay/challenge1.cpp
Normal file
45
2019/4thDay/challenge1.cpp
Normal file
@@ -0,0 +1,45 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
BIN
2019/4thDay/challenge1.exe
Normal file
BIN
2019/4thDay/challenge1.exe
Normal file
Binary file not shown.
44
2019/4thDay/challenge2.cpp
Normal file
44
2019/4thDay/challenge2.cpp
Normal file
@@ -0,0 +1,44 @@
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
BIN
2019/4thDay/challenge2.exe
Normal file
BIN
2019/4thDay/challenge2.exe
Normal file
Binary file not shown.
Reference in New Issue
Block a user