: walk ( stack point -- stack' ) { [ clone [ 1 + ] change-x over push ] [ clone [ 1 - ] change-x over push ] [ clone [ 1 + ] change-y over push ] [ clone [ 1 - ] change-y over push ] } cleave ; : (ant) ( total seen stack -- total' ) [ dup empty? ] [ dup pop pick dupd in? [ drop ] [ [ pick adjoin ] keep dup walkable? [ [ 1 + ] 3dip walk ] [ drop ] if ] if ] until 2drop ; : ant-no-locals ( -- total ) 0 HS{ } clone V{ } clone 1000 1000 over push (ant) ;