Mercurial > hg > aoc
view 2017/day19/app.d @ 33:bc652fa0a645
Move all solutions to per-day subdirs
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Tue, 09 Jan 2018 21:50:37 -0500 |
parents | 2017/day19.d@836d284fff87 |
children |
line wrap: on
line source
import std.stdio; import std.array: array; import std.algorithm: map; import std.string: indexOf; import std.typecons: tuple; auto walkPath(T)(T grid) { char[] path; long i = grid[0].indexOf("|"), j = 1; int steps = 1; enum DIR {u, d, l, r}; DIR dir = DIR.d; while(i > 0) { steps++; auto next = grid[j][i]; switch(next) { case 'A': .. case 'Z': path ~= next; break; case '+': if(dir == DIR.u || dir == DIR.d) { if(grid[j][i-1] == '-') { dir = DIR.l; } else { dir = DIR.r; } } else { if(grid[j-1][i] == '|') { dir = DIR.u; } else { dir = DIR.d; } } break; default: } final switch(dir){ case DIR.d: j++; break; case DIR.u: j--; break; case DIR.l: i--; break; case DIR.r: i++; break; } } return tuple(path, steps); } void main(string[] args) { auto grid = File(args[1]).byLineCopy.array.dup; auto ret = grid.walkPath; writeln(ret[0]); writeln(ret[1]); }