Added day 6 solution.
This commit is contained in:
parent
6f71ac93cb
commit
aa2d9cd442
|
@ -0,0 +1,2 @@
|
||||||
|
Time: 41 96 88 94
|
||||||
|
Distance: 214 1789 1127 1055
|
|
@ -0,0 +1,2 @@
|
||||||
|
Time: 7 15 30
|
||||||
|
Distance: 9 40 200
|
|
@ -0,0 +1,51 @@
|
||||||
|
import std.stdio;
|
||||||
|
import std.array;
|
||||||
|
import std.algorithm;
|
||||||
|
import std.string;
|
||||||
|
import std.conv;
|
||||||
|
import std.math;
|
||||||
|
|
||||||
|
struct Race {
|
||||||
|
long time, dist;
|
||||||
|
}
|
||||||
|
|
||||||
|
Race[] parseRaces(string filename) {
|
||||||
|
string[] lines = File(filename).byLineCopy.array;
|
||||||
|
long[] times = lines[0].split(":")[1].strip.split.map!(to!long).array;
|
||||||
|
long[] distances = lines[1].split(":")[1].strip.split.map!(to!long).array;
|
||||||
|
Race[] result = new Race[](times.length);
|
||||||
|
foreach (size_t i, long time; times) {
|
||||||
|
result[i] = Race(time, distances[i]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
Race parseKernedRace(string filename) {
|
||||||
|
string[] lines = File(filename).byLineCopy.array;
|
||||||
|
long time = lines[0].split(":")[1].strip.split.join.to!long;
|
||||||
|
long dist = lines[1].split(":")[1].strip.split.join.to!long;
|
||||||
|
return Race(time, dist);
|
||||||
|
}
|
||||||
|
|
||||||
|
long computeSolutions(in Race r) {
|
||||||
|
double D = r.time * r.time - 4 * r.dist;
|
||||||
|
double t1 = (-r.time + sqrt(D)) / -2;
|
||||||
|
double t2 = (-r.time - sqrt(D)) / -2;
|
||||||
|
long minWinningTime = cast(long) (ceil(t1) == t1 ? t1 + 1 : ceil(t1));
|
||||||
|
long maxWinningTime = cast(long) (floor(t2) == t2 ? t2 - 1 : floor(t2));
|
||||||
|
return maxWinningTime - minWinningTime + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void part1() {
|
||||||
|
parseRaces("input.txt").map!computeSolutions.fold!((a, b) => a * b).writeln;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void part2() {
|
||||||
|
parseKernedRace("input.txt").computeSolutions.writeln;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
part1();
|
||||||
|
part2();
|
||||||
|
}
|
Loading…
Reference in New Issue