Multiplication tables: Difference between revisions

Content added Content deleted
m (→‎{{header|Haskell}}: (Slight rearrangement))
m (→‎{{header|Haskell}}: Adjusted tabulation function)
Line 2,320: Line 2,320:


=={{header|Haskell}}==
=={{header|Haskell}}==
<lang haskell>import Data.List (maximumBy)
<lang haskell>import Data.Monoid ((<>))
import Data.Ord (comparing)
import Data.List (intercalate, transpose)
import Data.Monoid ((<>))


multTable :: Int -> [[String]]
multTable :: Int -> [[String]]
Line 2,338: Line 2,337:
]
]


tableString :: [[String]] -> String
table :: String -> [[String]] -> [String]
table delim rows =
tableString tbl = unlines $ (unwords . (justifyRight colWidth ' ' <$>)) <$> tbl
let justifyRight n c s = drop (length s) (replicate n c <> s)
where
in intercalate delim <$>
colWidth = length $ (last . last) tbl
transpose
justifyRight n c s = drop (length s) (replicate n c <> s)
((\col -> justifyRight (maximum (length <$> col)) ' ' <$> col) <$>
transpose rows)


main :: IO ()
main :: IO ()
main = putStr $ (tableString . multTable) 12</lang>
main = putStrLn (unlines (table " " (multTable 12)))</lang>

{{Out}}
{{Out}}
<pre> 1: 1 2 3 4 5 6 7 8 9 10 11 12
<pre> 1: 1 2 3 4 5 6 7 8 9 10 11 12
2: 4 6 8 10 12 14 16 18 20 22 24
2: 4 6 8 10 12 14 16 18 20 22 24
3: 9 12 15 18 21 24 27 30 33 36
3: 9 12 15 18 21 24 27 30 33 36
4: 16 20 24 28 32 36 40 44 48
4: 16 20 24 28 32 36 40 44 48
5: 25 30 35 40 45 50 55 60
5: 25 30 35 40 45 50 55 60
6: 36 42 48 54 60 66 72
6: 36 42 48 54 60 66 72
7: 49 56 63 70 77 84
7: 49 56 63 70 77 84
8: 64 72 80 88 96
8: 64 72 80 88 96
9: 81 90 99 108
9: 81 90 99 108
10: 100 110 120
10: 100 110 120
11: 121 132
11: 121 132
12: 144</pre>
12: 144</pre>