RosettaCodeData/Task/Floyds-triangle/Haskell/floyds-triangle-3.hs

24 lines
542 B
Haskell
Raw Permalink Normal View History

2017-09-23 10:01:46 +02:00
import Data.List (mapAccumL)
2019-09-12 10:33:56 -07:00
import Control.Arrow ((&&&))
2017-09-23 10:01:46 +02:00
floyd :: Int -> [[Int]]
floyd n =
snd $
mapAccumL
2018-08-17 15:15:24 +01:00
(\a x ->
2019-09-12 10:33:56 -07:00
((succ &&& enumFromTo a) (a + x)))
2017-09-23 10:01:46 +02:00
1
[0 .. pred n]
2018-08-17 15:15:24 +01:00
-- TEST -------------------------------------
2017-09-23 10:01:46 +02:00
showFloyd :: [[Int]] -> String
showFloyd xs =
let padRight n = length >>= (<$> mappend (replicate n ' ')) . drop
in unlines $
(concat .
zipWith ((. show) . padRight) ((succ . length . show) <$> last xs)) <$>
xs
main :: IO ()
main = mapM_ putStrLn $ (showFloyd . floyd) <$> [5, 14]