advent-of-code/12021/10/10.awk

36 lines
532 B
Awk

function push( c ){
sp++
stack[sp] = c
}
function pop(){
sp--
return stack[sp+1]
}
function peek(){
return stack[sp]
}
BEGIN{
FS = ""
sp = 0
}
{
for(i=1;i<=NF;i++){
t = peek()
if($i=="(" || $i=="[" || $i=="{" || $i=="<"){
push($i)
}
else{
if(i<NF && (($i==")"&&t!="(") || ($i=="]" && t!="[") || ($i=="}" && t!="{") || ($i==">" && t!="<" ))){
# print NR, "corrupted", $i, i
score += ($i==")") ? 3 : ($i=="]") ? 57 : ($i=="}") ? 1197 : 25137
break
}
else pop()
}
}
delete stack
}
END{
print score
}