Towers of Hanoi: Difference between revisions

m
→‎{{header|Haskell}}: Tidied monoid version. Removed an import line which is redundant in GHC 8
m (→‎{{header|Haskell}}: Tidied monoid version. Removed an import line which is redundant in GHC 8)
Line 2,247:
 
or, defining it as a monoid, and adding some output:
<lang haskell>import-------------------------- Data.MonoidHANOI ((<>), mempty)-------------------------
import Data.List (intercalate, transpose)
 
hanoi :: Int -> tString -> tString -> tString -> [[t](String, String)]
hanoi 0 _ _ _ = mempty
hanoi n l r m = hanoi (n - 1) l m r <> [[(l, r])] <> hanoi (n - 1) m r l
 
 
-- TEST ------------------------------------ TEST -------------------------
main :: IO ()
main = putStrLn $ showHanoi 5</lang>
 
 
------------------------- DISPLAY ------------------------
showHanoi :: Int -> String
showHanoi n =
unlines $
fmap
intercalate " -> " <$>
(\(from, to) -> concat [justifyRight 5 ' ' from, " -> ", to])
transpose
((justifyLeft 6 ' ' <$>) <$> transpose (hanoi n "left" "right" "mid"))
 
justifyLeftjustifyRight :: Int -> Char -> String -> String
justifyLeftjustifyRight n c s = take(drop n. (slength) <*> (replicate n c <>)</lang>
 
-- TEST -------------------------------------------------------------
main :: IO ()
main = putStrLn $ showHanoi 5</lang>
{{Out}}
<pre> left -> right
left -> mid
right -> mid
left -> right
mid mid -> left
mid mid -> right
left -> right
left -> mid
right -> mid
right -> left
mid mid -> left
right -> mid
left -> right
left -> mid
right -> mid
left -> right
mid mid -> left
mid mid -> right
left -> right
mid mid -> left
right -> mid
right -> left
mid mid -> left
mid mid -> right
left -> right
left -> mid
right -> mid
left -> right
mid mid -> left
mid mid -> right
left -> right</pre>
 
=={{header|HolyC}}==
9,659

edits