69 lines
1.4 KiB
Awk
69 lines
1.4 KiB
Awk
BEGIN{
|
|
FS = ""
|
|
}
|
|
{
|
|
n = NF
|
|
for(i=1;i<=NF;i++){
|
|
h[NR,i] = $i
|
|
}
|
|
}
|
|
END {
|
|
bi = 1
|
|
for(y=1;y<=NR;y++){
|
|
for(x=1;x<=n;x++){
|
|
islowx = (h[y,x-1]>h[y,x]) && (h[y,x+1]>h[y,x]) || (x==1 && (h[y,x+1]>h[y,x])) || (x==n && h[y,x-1]>h[y,x])
|
|
islowy = (h[y-1,x]>h[y,x]) && (h[y+1,x]>h[y,x]) || (y==1 && h[y+1,x]>h[y,x]) || (y==NR && h[y-1,x]>h[y,x])
|
|
if(islowx && islowy ) {
|
|
lowy[bi] = y; lowx[bi++]=x
|
|
}
|
|
}
|
|
}
|
|
for( p in lowx ){
|
|
delete tocheck; delete visited
|
|
px = lowx[p]
|
|
py = lowy[p]
|
|
size[p] = 1
|
|
visited[py,px] = 1
|
|
tocheck[py,px] = 1
|
|
do{
|
|
delete ncheck
|
|
for(y=1;y<=NR;y++){
|
|
for(x=1;x<=n;x++){
|
|
if(tocheck[y,x]){
|
|
if(x>1 && h[y,x-1]<9 && !visited[y,x-1]){
|
|
ncheck[y,x-1]=1; visited[y,x-1] = 1
|
|
}
|
|
if(x<n && h[y,x+1]<9 && !visited[y,x+1]){
|
|
ncheck[y,x+1]=1; visited[y,x+1] = 1
|
|
}
|
|
if(y>1 && h[y-1,x]<9 && !visited[y-1,x]){
|
|
ncheck[y-1,x]=1; visited[y-1,x] = 1
|
|
}
|
|
if(y<NR && h[y+1,x]<9 && !visited[y+1,x]){
|
|
ncheck[y+1,x]=1; visited[y+1,x] = 1
|
|
}
|
|
tocheck[y,x] = 0
|
|
}
|
|
}
|
|
}
|
|
ntocheck = 0
|
|
for(y=1;y<=NR;y++){
|
|
for(x=1;x<=n;x++){
|
|
tocheck[y,x] = ncheck[y,x]
|
|
size[p] += tocheck[y,x]
|
|
ntocheck += tocheck[y,x]
|
|
# printf "%d ", ncheck[y,x]
|
|
}
|
|
# print ""
|
|
}
|
|
# print ntocheck
|
|
}while(ntocheck)
|
|
# print "---", size[p]
|
|
}
|
|
|
|
asort(size)
|
|
len = length(size)
|
|
print size[len]*size[len-1]*size[len-2]
|
|
|
|
}
|