diff --git a/day05/sol.awk b/day05/sol.awk new file mode 100644 index 0000000..7beb429 --- /dev/null +++ b/day05/sol.awk @@ -0,0 +1,58 @@ +# run me with awk -f sol.awk < input + +/\[/ { + gsub("^ ", "[ ]") + gsub(" {4}", " [ ]") + gsub("^\\[|\\] \\[|\\]$", "") + lines[nlines++] = $0 + if (nstacks < length()) + nstacks = length() +} + +/^$/ { + for (i = 1; i <= nstacks; i++) { + s = "" + for (j = nlines-1; j >= 0; j--) { + c = substr(lines[j], i, 1) + if (c != " ") s = s c + } + stack[i] = s + stack2[i] = s + print s "." + } + print "----" +} + +function reverse(s) { + r = "" + for (i = length(s); i > 0; i--) + r = r substr(s, i, 1) + return r +} + +function move(S, n, fr, to, flip) { + #print n, fr, to + m = length(S[fr]) - n + if (flip) chunk = reverse(substr(S[fr], m+1)) + else chunk = substr(S[fr], m+1) + #print stack[to] + #print stack[fr] + S[to] = S[to] chunk + S[fr] = substr(S[fr], 1, m) + #print stack[to] + #print stack[fr] +} + +/^move .* from .* to .*/ { + move(stack, $2, $4, $6, 0) + move(stack2, $2, $4, $6, 1) +} + +END { + for (i = 1; i <= nstacks; i++) { + p1 = p1 substr(stack[i], length(stack[i])) + p2 = p2 substr(stack2[i], length(stack2[i])) + } + print p1 + print p2 +}