Multiplication tables: Difference between revisions

Content added Content deleted
(→‎{{header|Haskell}}: Separating data definition from string formatting)
Line 2,252: Line 2,252:




Or, making do without imports beyond the Prelude:
Or, making do without imports beyond the Prelude, and separating data from formatting:


<lang Haskell>table :: Int -> [String]
<lang Haskell>multTable :: Int -> [[[Int]]]
multTable n = (\x -> [x] : [] : (
table n = concat <$> xs
(\y -> if y < x then [] else [x * y])
where
xs = (\x -> fmt x : drop 2 pad : (
<$> range))
(\y -> if y < x then pad else fmt $ x * y)
<$> range))
<$> range
<$> range
where range = [1..n]

tableString :: [[[Int]]] -> String
tableString tbl = unlines $ (concat . (fmt <$>)) <$> tbl
where
pad = " "
fmt [ ] = pad
fmt [e] = drop (length s) (pad ++ s)
where
where
range = [1..n]
s = show e

pad = " "
fmt e = drop (length s) (pad ++ s)
where
s = show e
main :: IO ()
main :: IO ()
main = mapM_ putStrLn $ table 12</lang>
main = putStr $ tableString $ 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>


=={{header|HicEst}}==
=={{header|HicEst}}==