51 lines
754 B
Awk
51 lines
754 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
|
|
scorep = 1
|
|
}
|
|
{
|
|
corrupted = 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
|
|
corrupted = 1
|
|
break
|
|
}
|
|
else pop()
|
|
}
|
|
}
|
|
if(!corrupted){
|
|
score = 0
|
|
for(i=sp;i>0;i--){
|
|
score *= 5
|
|
v = stack[i]
|
|
score += (v=="(") ? 1 : v=="[" ? 2 : v=="{" ? 3 : 4
|
|
}
|
|
scores[scorep++] = score
|
|
# print score
|
|
}
|
|
delete stack
|
|
sp = 0
|
|
}
|
|
END{
|
|
asort(scores)
|
|
# print length(scores), scorep
|
|
print scores[ scorep/2 ]
|
|
}
|