day 5 awk solution

main
magical 2022-12-07 00:05:58 -08:00
parent f4be6a5be3
commit 29b20e27fc
1 changed files with 58 additions and 0 deletions

58
day05/sol.awk 100644
View File

@ -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
}