[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/wjpQvvAo    [ raw code | output | fork ]

programmingpraxis - Haskell, pasted on Mar 7:
-- knight moves

type KnightPos = (Int,Int)
 
moveKnight :: KnightPos -> [KnightPos]
moveKnight (c, r) = filter onBoard [(c + 2, r + 1), (c + 2, r - 1),
                                    (c - 2, r + 1), (c - 2, r - 1),
                                    (c + 1, r + 2), (c + 1, r - 2),
                                    (c - 1, r + 2), (c - 1, r - 2)]
    where onBoard = \(c',r') -> c' `elem` [1..8] && r' `elem` [1..8]

type Path = [KnightPos]
 
nKnightMoves :: Int -> KnightPos -> [Path]
nKnightMoves n pos
    | n == 0 = return []
    | otherwise = do
        ps <- map return (moveKnight pos)
        ps' <- nKnightMoves (n - 1) (last ps)
        return (ps ++ ps')
 
pathsTo :: Int -> KnightPos -> KnightPos -> [Path]
pathsTo n start end = filter ((==end) . last) $ nKnightMoves n start

main = let
           start = (8,8)
           end = (1,1)
           n = 6
       in do
           putStrLn $ "To reach " ++ show end ++ " from " ++ show start ++ " in " ++ show n ++ " moves:"
           mapM_ putStrLn $ map show $ pathsTo n start end


Output:
To reach (1,1) from (8,8) in 6 moves:
[(6,7),(8,6),(6,5),(4,4),(2,3),(1,1)]
[(6,7),(8,6),(6,5),(4,4),(3,2),(1,1)]
[(6,7),(8,6),(6,5),(5,3),(3,2),(1,1)]
[(6,7),(8,6),(7,4),(5,3),(3,2),(1,1)]
[(6,7),(4,8),(2,7),(3,5),(2,3),(1,1)]
[(6,7),(4,8),(2,7),(1,5),(2,3),(1,1)]
[(6,7),(4,8),(5,6),(3,5),(2,3),(1,1)]
[(6,7),(4,8),(5,6),(4,4),(2,3),(1,1)]
[(6,7),(4,8),(5,6),(4,4),(3,2),(1,1)]
[(6,7),(4,8),(3,6),(1,5),(2,3),(1,1)]
[(6,7),(4,8),(3,6),(4,4),(2,3),(1,1)]
[(6,7),(4,8),(3,6),(4,4),(3,2),(1,1)]
[(6,7),(4,8),(3,6),(2,4),(3,2),(1,1)]
[(6,7),(4,6),(6,5),(4,4),(2,3),(1,1)]
[(6,7),(4,6),(6,5),(4,4),(3,2),(1,1)]
[(6,7),(4,6),(6,5),(5,3),(3,2),(1,1)]
[(6,7),(4,6),(2,7),(3,5),(2,3),(1,1)]
[(6,7),(4,6),(2,7),(1,5),(2,3),(1,1)]
[(6,7),(4,6),(2,5),(4,4),(2,3),(1,1)]
[(6,7),(4,6),(2,5),(4,4),(3,2),(1,1)]
[(6,7),(4,6),(2,5),(1,3),(3,2),(1,1)]
[(6,7),(4,6),(5,4),(3,5),(2,3),(1,1)]
[(6,7),(4,6),(5,4),(4,2),(2,3),(1,1)]
[(6,7),(4,6),(3,4),(5,3),(3,2),(1,1)]
[(6,7),(4,6),(3,4),(1,5),(2,3),(1,1)]
[(6,7),(4,6),(3,4),(1,3),(3,2),(1,1)]
[(6,7),(4,6),(3,4),(4,2),(2,3),(1,1)]
[(6,7),(7,5),(5,6),(3,5),(2,3),(1,1)]
[(6,7),(7,5),(5,6),(4,4),(2,3),(1,1)]
[(6,7),(7,5),(5,6),(4,4),(3,2),(1,1)]
[(6,7),(7,5),(5,4),(3,5),(2,3),(1,1)]
[(6,7),(7,5),(5,4),(4,2),(2,3),(1,1)]
[(6,7),(7,5),(6,3),(4,4),(2,3),(1,1)]
[(6,7),(7,5),(6,3),(4,4),(3,2),(1,1)]
[(6,7),(7,5),(6,3),(4,2),(2,3),(1,1)]
[(6,7),(7,5),(6,3),(5,1),(3,2),(1,1)]
[(6,7),(5,5),(7,4),(5,3),(3,2),(1,1)]
[(6,7),(5,5),(3,6),(1,5),(2,3),(1,1)]
[(6,7),(5,5),(3,6),(4,4),(2,3),(1,1)]
[(6,7),(5,5),(3,6),(4,4),(3,2),(1,1)]
[(6,7),(5,5),(3,6),(2,4),(3,2),(1,1)]
[(6,7),(5,5),(3,4),(5,3),(3,2),(1,1)]
[(6,7),(5,5),(3,4),(1,5),(2,3),(1,1)]
[(6,7),(5,5),(3,4),(1,3),(3,2),(1,1)]
[(6,7),(5,5),(3,4),(4,2),(2,3),(1,1)]
[(6,7),(5,5),(6,3),(4,4),(2,3),(1,1)]
[(6,7),(5,5),(6,3),(4,4),(3,2),(1,1)]
[(6,7),(5,5),(6,3),(4,2),(2,3),(1,1)]
[(6,7),(5,5),(6,3),(5,1),(3,2),(1,1)]
[(6,7),(5,5),(4,7),(3,5),(2,3),(1,1)]
[(6,7),(5,5),(4,3),(2,4),(3,2),(1,1)]
[(6,7),(5,5),(4,3),(5,1),(3,2),(1,1)]
[(6,7),(5,5),(4,3),(3,5),(2,3),(1,1)]
[(6,7),(5,5),(4,3),(3,1),(2,3),(1,1)]
[(7,6),(5,7),(3,6),(1,5),(2,3),(1,1)]
[(7,6),(5,7),(3,6),(4,4),(2,3),(1,1)]
[(7,6),(5,7),(3,6),(4,4),(3,2),(1,1)]
[(7,6),(5,7),(3,6),(2,4),(3,2),(1,1)]
[(7,6),(5,7),(6,5),(4,4),(2,3),(1,1)]
[(7,6),(5,7),(6,5),(4,4),(3,2),(1,1)]
[(7,6),(5,7),(6,5),(5,3),(3,2),(1,1)]
[(7,6),(5,7),(4,5),(2,4),(3,2),(1,1)]
[(7,6),(5,7),(4,5),(5,3),(3,2),(1,1)]
[(7,6),(5,5),(7,4),(5,3),(3,2),(1,1)]
[(7,6),(5,5),(3,6),(1,5),(2,3),(1,1)]
[(7,6),(5,5),(3,6),(4,4),(2,3),(1,1)]
[(7,6),(5,5),(3,6),(4,4),(3,2),(1,1)]
[(7,6),(5,5),(3,6),(2,4),(3,2),(1,1)]
[(7,6),(5,5),(3,4),(5,3),(3,2),(1,1)]
[(7,6),(5,5),(3,4),(1,5),(2,3),(1,1)]
[(7,6),(5,5),(3,4),(1,3),(3,2),(1,1)]
[(7,6),(5,5),(3,4),(4,2),(2,3),(1,1)]
[(7,6),(5,5),(6,3),(4,4),(2,3),(1,1)]
[(7,6),(5,5),(6,3),(4,4),(3,2),(1,1)]
[(7,6),(5,5),(6,3),(4,2),(2,3),(1,1)]
[(7,6),(5,5),(6,3),(5,1),(3,2),(1,1)]
[(7,6),(5,5),(4,7),(3,5),(2,3),(1,1)]
[(7,6),(5,5),(4,3),(2,4),(3,2),(1,1)]
[(7,6),(5,5),(4,3),(5,1),(3,2),(1,1)]
[(7,6),(5,5),(4,3),(3,5),(2,3),(1,1)]
[(7,6),(5,5),(4,3),(3,1),(2,3),(1,1)]
[(7,6),(8,4),(6,5),(4,4),(2,3),(1,1)]
[(7,6),(8,4),(6,5),(4,4),(3,2),(1,1)]
[(7,6),(8,4),(6,5),(5,3),(3,2),(1,1)]
[(7,6),(8,4),(6,3),(4,4),(2,3),(1,1)]
[(7,6),(8,4),(6,3),(4,4),(3,2),(1,1)]
[(7,6),(8,4),(6,3),(4,2),(2,3),(1,1)]
[(7,6),(8,4),(6,3),(5,1),(3,2),(1,1)]
[(7,6),(8,4),(7,2),(5,3),(3,2),(1,1)]
[(7,6),(8,4),(7,2),(5,1),(3,2),(1,1)]
[(7,6),(6,8),(4,7),(3,5),(2,3),(1,1)]
[(7,6),(6,8),(5,6),(3,5),(2,3),(1,1)]
[(7,6),(6,8),(5,6),(4,4),(2,3),(1,1)]
[(7,6),(6,8),(5,6),(4,4),(3,2),(1,1)]
[(7,6),(6,4),(4,5),(2,4),(3,2),(1,1)]
[(7,6),(6,4),(4,5),(5,3),(3,2),(1,1)]
[(7,6),(6,4),(4,3),(2,4),(3,2),(1,1)]
[(7,6),(6,4),(4,3),(5,1),(3,2),(1,1)]
[(7,6),(6,4),(4,3),(3,5),(2,3),(1,1)]
[(7,6),(6,4),(4,3),(3,1),(2,3),(1,1)]
[(7,6),(6,4),(7,2),(5,3),(3,2),(1,1)]
[(7,6),(6,4),(7,2),(5,1),(3,2),(1,1)]
[(7,6),(6,4),(5,6),(3,5),(2,3),(1,1)]
[(7,6),(6,4),(5,6),(4,4),(2,3),(1,1)]
[(7,6),(6,4),(5,6),(4,4),(3,2),(1,1)]
[(7,6),(6,4),(5,2),(3,1),(2,3),(1,1)]
[(7,6),(6,4),(5,2),(4,4),(2,3),(1,1)]
[(7,6),(6,4),(5,2),(4,4),(3,2),(1,1)]


Create a new paste based on this one


Comments: