Day 2
This commit is contained in:
parent
51868fb59f
commit
ac2d6076fc
1 changed files with 49 additions and 0 deletions
49
2.d
Executable file
49
2.d
Executable file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/bin/env rdmd
|
||||||
|
module aoc24_2;
|
||||||
|
|
||||||
|
import std;
|
||||||
|
|
||||||
|
auto absDiff(T)(T a, T b) if(isSigned!T){
|
||||||
|
return abs(a - b);
|
||||||
|
}
|
||||||
|
bool isWithinRange(T)(T n, T low, T high){
|
||||||
|
return n >= low && n <= high;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Skipper(T){ // Just smile and wave, boys. Smile and wave
|
||||||
|
T range;
|
||||||
|
long iter = -1;
|
||||||
|
bool empty(){
|
||||||
|
return iter == range.length;
|
||||||
|
}
|
||||||
|
void popFront(){
|
||||||
|
iter++;
|
||||||
|
}
|
||||||
|
auto front(){
|
||||||
|
if(iter == -1)
|
||||||
|
return tuple(iter, range.array);
|
||||||
|
return tuple(iter, joiner([range[0 .. iter], range[iter+1 .. $]]).array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(){
|
||||||
|
size_t totalSafe, totalMostlySafe;
|
||||||
|
foreach(line; stdin.byLine){
|
||||||
|
auto nums = line.split(' ').map!(to!int);
|
||||||
|
foreach(l, lnums; Skipper!(typeof(nums))(nums)){
|
||||||
|
bool isIncreasing = lnums.isStrictlyMonotonic!"b > a";
|
||||||
|
bool isDecreasing = lnums.isStrictlyMonotonic!"a > b";
|
||||||
|
bool differLittle = lnums.slide(2).all!(x => absDiff(x[0], x[1]).isWithinRange(1, 3));
|
||||||
|
if((isIncreasing || isDecreasing) && differLittle){
|
||||||
|
if(l == -1)
|
||||||
|
totalSafe++;
|
||||||
|
totalMostlySafe++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
writeln("Part one ", totalSafe);
|
||||||
|
writeln("Part two ", totalMostlySafe);
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue