Created
November 8, 2015 13:29
-
-
Save jagajaga/a1da69bd287dbba3ec2c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE OverloadedStrings #-} | |
module Main where | |
import Data.List | |
import Data.Text (Text) | |
import Data.Text.IO as IO | |
import Prelude hiding (drop, lenght, take) | |
import System.Random | |
type Tasks = [[ Text ]] | |
type TasksWithBackup = ([ Text ], [ Text ]) | |
type Version = [ Text ] | |
deleteNth n xs = take (n-1) xs ++ drop n xs | |
genVer :: [TasksWithBackup] -> IO ([TasksWithBackup], Version) | |
genVer t = do | |
mapM getItem t >>= return . foldl (\(a, b) (c, d) -> (a ++ [c], b ++ d)) ([], []) | |
where | |
getItem :: TasksWithBackup -> IO (TasksWithBackup, Version) | |
getItem (tasks, allTasks) = do | |
i <- randomRIO (0, 1000) >>= return . flip mod (length tasks) | |
let res = tasks !! i | |
let newTasks = if (length tasks) - 1 == 0 then allTasks else (deleteNth i tasks) | |
return $ ((newTasks, allTasks), [res]) | |
generate :: Int -> [TasksWithBackup] -> IO [Version] | |
generate n tasks | n > 0 = do | |
(newTasks, ver) <- genVer tasks | |
vars <- (generate (n - 1) newTasks) | |
return $ ver:vars | |
generate n tasks = return [] | |
canonizeTasks :: Tasks -> [TasksWithBackup] | |
canonizeTasks a = map (\b -> (b, b)) a | |
main = do | |
versions <- generate 45 $ canonizeTasks cw | |
mapM_ (\(n, v) -> print n >> IO.putStrLn header >> mapM_ IO.putStrLn (concat $ zipWith (\a b -> a : [b]) exers v) >> IO.putStrLn "-------------") $ zip [1..] versions |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment