Towers of Hanoi: Difference between revisions
Content added Content deleted
m (→{{header|Haskell}}: Tidied monoid version. Removed an import line which is redundant in GHC 8) |
|||
Line 2,247: | Line 2,247: | ||
or, defining it as a monoid, and adding some output: |
or, defining it as a monoid, and adding some output: |
||
<lang haskell> |
<lang haskell>-------------------------- HANOI ------------------------- |
||
import Data.List (intercalate, transpose) |
|||
hanoi :: Int -> |
hanoi :: Int -> String -> String -> String -> [(String, String)] |
||
hanoi 0 _ _ _ = mempty |
hanoi 0 _ _ _ = mempty |
||
hanoi n l r m = hanoi (n - 1) l m r <> [ |
hanoi n l r m = hanoi (n - 1) l m r <> [(l, r)] <> hanoi (n - 1) m r l |
||
⚫ | |||
⚫ | |||
⚫ | |||
------------------------- DISPLAY ------------------------ |
|||
showHanoi :: Int -> String |
showHanoi :: Int -> String |
||
showHanoi n = |
showHanoi n = |
||
unlines $ |
unlines $ |
||
fmap |
|||
intercalate " -> " <$> |
|||
(\(from, to) -> concat [justifyRight 5 ' ' from, " -> ", to]) |
|||
transpose |
|||
(hanoi n "left" "right" "mid") |
|||
justifyRight :: Int -> Char -> String -> String |
|||
justifyRight n c = (drop . length) <*> (replicate n c <>)</lang> |
|||
⚫ | |||
⚫ | |||
⚫ | |||
{{Out}} |
{{Out}} |
||
<pre>left |
<pre> left -> right |
||
left |
left -> mid |
||
right |
right -> mid |
||
left |
left -> right |
||
mid -> left |
|||
mid -> right |
|||
left |
left -> right |
||
left |
left -> mid |
||
right |
right -> mid |
||
right |
right -> left |
||
mid -> left |
|||
right |
right -> mid |
||
left |
left -> right |
||
left |
left -> mid |
||
right |
right -> mid |
||
left |
left -> right |
||
mid -> left |
|||
mid -> right |
|||
left |
left -> right |
||
mid -> left |
|||
right |
right -> mid |
||
right |
right -> left |
||
mid -> left |
|||
mid -> right |
|||
left |
left -> right |
||
left |
left -> mid |
||
right |
right -> mid |
||
left |
left -> right |
||
mid -> left |
|||
mid -> right |
|||
left |
left -> right</pre> |
||
=={{header|HolyC}}== |
=={{header|HolyC}}== |