Mercurial > hg > aoc
changeset 14:56b75b62d591
day 13
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Wed, 13 Dec 2017 23:51:28 -0500 |
parents | 13f69301183f |
children | 817954f71d53 |
files | 2017/day13.d |
diffstat | 1 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/2017/day13.d @@ -0,0 +1,29 @@ +import std.stdio; +import std.algorithm: filter, map, sum; +import std.string: split; +import std.conv: to; +import std.array: array; + +auto getHits(T)(T firewall, int init = 0) { + return firewall.filter!(xy => (init + xy[0]) % (2*(xy[1]-1)) == 0); +} + +auto computeSeverity(T)(T firewall) { + return firewall.getHits.map!(xy => xy[0]*xy[1]).sum; +} + +auto findPassing(T)(T firewall) { + auto init = 0; + while(! firewall.getHits(init).empty) { + init++; + } + return init; +} + +void main(string[] args) { + auto firewall = File(args[1]).byLineCopy.map!( + x => x.split(": ").map!(to!int) + ).array; + writeln(firewall.computeSeverity); + writeln(firewall.findPassing); +}