4
Drainage (continued)
•procedure drainage();
•[R] begin
•   Up := 0; Dn := 0;
•   read(A);
•   Up := A=(min<<A);
•   Dn := A=(max<<A);
•   repeat
• Tu := Up; Td := Dn;
• Dn := Dn | (A<=A@no & Dn@no) | (A<=Ane & Dn@ne)
•          | (A<=A@ea & Dn@ea) | (A<=Ase & Dn@se)
•          | (A<=A@so & Dn@so) | (A<=Asw & Dn@sw)
•          | (A<=A@we & Dn@we) | (A<=Anw & Dn@nw);
• Up := Up | (A>=A@no & Up@no) | (A>=Ane & Up@ne)
•          | (A>=A@ea & Up@ea) | (A>=Ase & Up@se)
•          | (A>=A@so & Up@so) | (A>=Asw & Up@sw)
•          | (A>=A@we & Up@we) | (A>=Anw & Up@nw);
•   until ! |<<((Tu != Up) | (Td != Dn));
•   write(Up&Dn);
•    end;
Moving up
Moving down
Boundaries not included