day 5 awk solution
parent
f4be6a5be3
commit
29b20e27fc
|
@ -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
|
||||||
|
}
|
Loading…
Reference in New Issue