 !     A ---> D ---------> E ---> F
 !       (2)       (1)       (1)
 
+<<
+
+! In this version, we will use the quotations-aware version through <astar>.
+
 : n ( pos -- neighbours )
     $[ { "ABD" "BC" "C" "DCE" "ECF" } [ unclip swap 2array ] map >hashtable ] at ;
 

USING: arrays assocs astar combinators hashtables kernel literals math math.functions
math.vectors sequences sorting splitting strings tools.test ;
IN: astar.tests

<<

! Use a 10x9 maze (see below) to try to go from s to e, f or g.
! X means that a position is unreachable.

  8  X X X X X X X X X X"
        "\n" split ] nth nth CHAR: X = not ;

M: maze neighbours
    drop
    first2
    { [ 1 + 2array ] [ 1 - 2array ] [ [ 1 + ] dip 2array ] [ [ 1 - ] dip 2array ] } 2cleave
    4array
    [ reachable? ] filter ;

M: maze heuristic
    drop v- [ abs ] [ + ] map-reduce ;

M: maze cost
    drop 2dup [ first ] bi@ = [ [ second ] bi@ > 1 5 ? ] [ 2drop 2 ] if ;

: test1 ( to -- path considered )
    { 1 1 } swap maze new [ find-path ] [ considered ] bi ;
>>

! Existing path from s to f
