Multiplication tables: Difference between revisions

→‎{{header|Haskell}}: Adjusted for more flexible column widths (for larger tables and longer integer strings)
No edit summary
(→‎{{header|Haskell}}: Adjusted for more flexible column widths (for larger tables and longer integer strings))
Line 2,320:
 
=={{header|Haskell}}==
<lang haskell>multTableimport ::Data.List Int -> [[Maybe Int]](maximumBy)
import Data.Ord (comparing)
 
multTable :: Int -> [[String]]
multTable n =
(\x ->
Justmappend (show x) ":" :
Nothing :
((\y ->
if y < x
then Nothingmempty
else Justshow (x * y)) <$>
range[1 .. n])) <$>
range = [1 .. n]
range
where
range = [1 .. n]
 
tableString :: [[Maybe Int]] -> String
tableString tbln = unlines $ (concatunwords . (fmtjustifyRight (maxLen tbl) ' ' <$>)) <$> tbl
where
justifyRight n c s = drop (length s) (mappend (replicate n c) s)
pad = " "
mx = maximumBy (comparing length)
fmt Nothing = pad
fmtmaxLen (Just= n)length =. dropmx (length s). (pad ++mx s<$>)
tbl = wheremultTable n
s = show n
 
main :: IO ()
main = putStr .$ tableString $ multTable 12</lang>
 
{{Out}}
<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
3 : 9 12 15 18 21 24 27 30 33 36
4 : 16 20 24 28 32 36 40 44 48
5 : 25 30 35 40 45 50 55 60
6 : 36 42 48 54 60 66 72
7 : 49 56 63 70 77 84
8 : 64 72 80 88 96
9 : 81 90 99 108
10 : 100 110 120
11 : 121 132
12 : 144</pre>
 
=={{header|HicEst}}==
9,659

edits