Guest User

Untitled

a guest
Jul 22nd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. import Prelude hiding (putStrLn, getContents)
  2. import Data.Char
  3. import Data.List
  4. import qualified Data.Map as M
  5. import Data.Maybe
  6. import Data.Monoid
  7. import System.Random
  8. import System.IO.UTF8
  9.  
  10. main = do
  11. текст <- getContents
  12. let всеСлова = words текст
  13. let сочетания = zip всеСлова (map return $ tail всеСлова)
  14. let табличкаСледующихСлов = M.fromListWith mappend сочетания
  15. let списокДебютов = filter похожеНаДебют (M.keys табличкаСледующихСлов)
  16. предложение <- сочинительПредложений списокДебютов табличкаСледующихСлов
  17. putStrLn предложение
  18.  
  19. сочинительПредложений дебюты табличка = do
  20. дебют <- случайноеСлово дебюты
  21. предложение <- погнали табличка [дебют] дебют
  22. return (unwords $ reverse предложение)
  23.  
  24. погнали табличка креатив слово
  25. | конецПредложения слово = return креатив
  26. | otherwise = case M.lookup слово табличка of
  27. Nothing -> return креатив
  28. Just следующие -> do
  29. следующее <- случайноеСлово следующие
  30. погнали табличка (следующее : креатив) следующее
  31.  
  32. случайноеСлово слова = do
  33. i <- getStdRandom (randomR (0, length слова - 1))
  34. return (слова !! i)
  35.  
  36. похожеНаДебют слово = isUpper (head слово) && not (конецПредложения слово)
  37.  
  38. конецПредложения слово =
  39. or $ map заканчиваетсяНа [".", "?", "!", "!»", "?»", ".»"]
  40. where заканчиваетсяНа = flip isSuffixOf слово
Add Comment
Please, Sign In to add comment