1
0
Fork 0
mirror of https://github.com/HenkKalkwater/aoc-2020 synced 2024-05-19 21:12:42 +00:00

Day 2, puzzle 1

This commit is contained in:
Chris Josten 2020-12-02 17:53:43 +01:00
parent f6a49daaf9
commit a29b28b303
Signed by: chris
GPG key ID: 1795A594046530AB
4 changed files with 1031 additions and 2 deletions

1000
in/2.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -6,12 +6,14 @@ import std.stdio;
import std.getopt;
import day1;
import day2;
import dayutil;
immutable string progName = "aoc-2020";
void function(string[])[] programs = [
&day1.run
&day1.run,
&day2.run
];
void printUsage(string name) {

View file

@ -15,7 +15,7 @@ void run(string[] args) {
/* For each line on stdin, copy it, map it to an integer and sort it.
Sorting a range makes it a SortedRange and functions like contains(range, elem)
will make use of optimised implementations, in the case of contains(range, elem)
will make use of optimised implementations, in the case of contains(range, elem)
it will use a binary search instead of a linear search */
auto numbers = stdin.byLineCopy.map!(a => to!int(a)).array.sort;

27
source/day2.d Normal file
View file

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