Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Prelude hiding (putStrLn, getContents)
- import Data.Char
- import Data.List
- import qualified Data.Map as M
- import Data.Maybe
- import Data.Monoid
- import System.Random
- import System.IO.UTF8
- main = do
- текст <- getContents
- let всеСлова = words текст
- let сочетания = zip всеСлова (map return $ tail всеСлова)
- let табличкаСледующихСлов = M.fromListWith mappend сочетания
- let списокДебютов = filter похожеНаДебют (M.keys табличкаСледующихСлов)
- предложение <- сочинительПредложений списокДебютов табличкаСледующихСлов
- putStrLn предложение
- сочинительПредложений дебюты табличка = do
- дебют <- случайноеСлово дебюты
- предложение <- погнали табличка [дебют] дебют
- return (unwords $ reverse предложение)
- погнали табличка креатив слово
- | конецПредложения слово = return креатив
- | otherwise = case M.lookup слово табличка of
- Nothing -> return креатив
- Just следующие -> do
- следующее <- случайноеСлово следующие
- погнали табличка (следующее : креатив) следующее
- случайноеСлово слова = do
- i <- getStdRandom (randomR (0, length слова - 1))
- return (слова !! i)
- похожеНаДебют слово = isUpper (head слово) && not (конецПредложения слово)
- конецПредложения слово =
- or $ map заканчиваетсяНа [".", "?", "!", "!»", "?»", ".»"]
- where заканчиваетсяНа = flip isSuffixOf слово
Add Comment
Please, Sign In to add comment