Word wrap: Difference between revisions

Content added Content deleted
Line 2,421: Line 2,421:




Alternative greedy wrapping: <lang haskell>import Data.List (inits, tails, tail)
Alternative greedy wrapping: <lang haskell>import Data.List (inits, tail, tails)


wWrap :: Int -> String -> String
testString =
wWrap n =
concat
unlines
[ "In olden times when wishing still helped one, there lived a king"
. map unwords
, " whose daughters were all beautiful, but the youngest was so beautiful"
. wWrap'' n
, " that the sun itself, which has seen so much, was astonished whenever"
. words
, " it shone in her face. Close by the king's castle lay a great dark"
. concat
, " forest, and under an old lime-tree in the forest was a well, and when"
. lines
, " the day was very warm, the king's child went out into the forest and"
, " sat down by the side of the cool fountain, and when she was bored she"
, " took a golden ball, and threw it up on high and caught it, and this"
, " ball was her favorite plaything."
]


wWrap'' :: Int -> [String] -> [[String]]
wWrap'' _ [] = []
wWrap'' _ [] = []
wWrap'' i ss =
wWrap'' n ss =
(\(a, b) -> a : wWrap'' i b) $
(\(a, b) -> a : wWrap'' n b) $
last . filter ((<= i) . length . unwords . fst) $ zip (inits ss) (tails ss)
last . filter ((<= n) . length . unwords . fst) $
zip (inits ss) (tails ss)


wWrap :: Int -> String -> String
wWrap i = unlines . map unwords . wWrap'' i . words . concat . lines


main :: IO ()
main = putStrLn $ wWrap 80 testString</lang>
main =
putStrLn $
wWrap 80 $
concat
[ "In olden times when wishing still helped one,",
" there lived a king whose daughters were all",
" beautiful, but the youngest was so beautiful",
" that the sun itself, which has seen so much,",
" was astonished whenever, it shone in her",
" face. Close by the king's castle lay a great",
" dark forest, and under an old lime-tree in",
" the forest was a well, and when the day was",
" very warm, the king's child went out into the",
" forest and sat down by the side of the cool",
" fountain, and when she was bored she took a",
" golden ball, and threw it up on high and",
" caught it, and this ball was her favorite",
" plaything."
]</lang>


=={{header|Icon}} and {{header|Unicon}}==
=={{header|Icon}} and {{header|Unicon}}==