1
0
Fork 0
mirror of https://github.com/HenkKalkwater/aoc-2020 synced 2024-11-25 12:35:16 +00:00

Added day 2 part 2

This commit is contained in:
Chris Josten 2020-12-02 18:22:20 +01:00
parent a29b28b303
commit beb7b447e9
Signed by: chris
GPG key ID: 1795A594046530AB

View file

@ -1,11 +1,20 @@
import std.algorithm; import std.algorithm;
import std.format; import std.format;
import std.functional;
import std.stdio; import std.stdio;
import dayutil; import dayutil;
bool isPasswordValid(T)(T line) { void run(string[] args) {
ulong count = parts!ulong(args,
() => stdin.byLine.count!(l => isPasswordValid1(l)),
() => stdin.byLine.count!(l => isPasswordValid2(l)));
writeln(count);
}
/// Part 1
bool isPasswordValid1(T)(T line) {
int min, max; int min, max;
char c; char c;
string password; string password;
@ -14,14 +23,28 @@ bool isPasswordValid(T)(T line) {
return min <= charCount && charCount <= max; return min <= charCount && charCount <= max;
} }
void run(string[] args) { unittest {
ulong count = stdin.byLine assert(isPasswordValid1("1-3 a: abcde") == true);
.count!(l => isPasswordValid(l)); assert(isPasswordValid1("1-3 b: cdefg") == false);
writeln(count); assert(isPasswordValid1("2-9 c: ccccccccc") == true);
}
/// Part 2
bool isPasswordValid2(T)(T line) {
int min, max;
char c;
string password;
line.formattedRead("%d-%d %c: %s", min, max, c, password);
// 1 2 | R
// T T | F
// T F | T
// F T | T
// F F | F
return (password[min - 1] == c) != (password[max - 1] == c);
} }
unittest { unittest {
assert(isPasswordValid("1-3 a: abcde") == true); assert(isPasswordValid2("1-3 a: abcde") == true);
assert(isPasswordValid("1-3 b: cdefg") == false); assert(isPasswordValid2("1-3 b: cdefg") == false);
assert(isPasswordValid("2-9 c: ccccccccc") == true); assert(isPasswordValid2("2-9 c: ccccccccc") == false);
} }