Mercurial > hg > aoc
changeset 6:94a2bb2aad6a
day 6
author | Jordi GutiƩrrez Hermoso <jordigh@octave.org> |
---|---|
date | Thu, 07 Dec 2017 11:44:54 -0500 (2017-12-07) |
parents | 20d440f0793e |
children | 52fdca7ea9be |
files | 2017/day06.d |
diffstat | 1 files changed, 33 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/2017/day06.d @@ -0,0 +1,33 @@ +import std.algorithm: map; +import std.conv: to; +import std.array: array; +import std.range: enumerate; +import std.stdio; +import std.algorithm: maxElement; + +auto redistribute(numType)(numType[] membank) { + auto max = membank.enumerate.maxElement!"a.value"; + membank[max.index] = 0; + for(auto idx = 0; idx < max.value; idx++) { + auto circ_idx = (max.index + idx + 1) % membank.length; + membank[circ_idx]++; + } + return membank; +} + +auto waitForDupe(numType)(numType[] membank) { + numType steps = 1; + auto seen = [membank.idup: steps]; + writeln(membank); + while( membank.redistribute !in seen) { + seen[membank.idup] = steps; + steps++; + } + + return [steps, steps - seen[membank]]; +} + +void main(string[] args) { + auto membank = args[1..$].map!(to!int).array; + writeln(waitForDupe(membank)); +}