From bc21556c79eb9a3ed64621606e11da4a46d20b05 Mon Sep 17 00:00:00 2001 From: Sudhanshu Jaiswal Date: Thu, 26 Jan 2017 04:47:06 +0530 Subject: [PATCH 01/29] forked and minor changes done --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fb5148a..536da0e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # ACA Haskell -ACA Project Haskell +ACA Project Haskell -- Sudhanshu Jaiswal + +26 Jan :Successfully forked by Sudhanshu.Trying out other tasks in process. + Members: @@ -17,3 +20,4 @@ Members: 5. Haskell stack setup with latest version of GHC 6. Basic Git : fork, branch, minor change, remote host update, pull request 7. Basic text editing using vim/emacs (Optional) + From ea22aa0303d3e793a42c3d2789aa832864e29183 Mon Sep 17 00:00:00 2001 From: Sudhanshu Jaiswal Date: Fri, 27 Jan 2017 01:34:42 +0530 Subject: [PATCH 02/29] updated with 27th Jan's work --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 536da0e..30c8820 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # ACA Haskell ACA Project Haskell -- Sudhanshu Jaiswal -26 Jan :Successfully forked by Sudhanshu.Trying out other tasks in process. - +26 Jan :Successfully forked by Sudhanshu.Tried command line navigation. Trying out other tasks in process. +27 Jan : Vim installed, zsh installed, Haskell Stack installed and set-up. Members: From 9db5bc525fcd78cebc866108cf172d019578e79c Mon Sep 17 00:00:00 2001 From: Sudhanshu Jaiswal Date: Fri, 27 Jan 2017 01:35:06 +0530 Subject: [PATCH 03/29] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 30c8820..5e73f0a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ ACA Project Haskell -- Sudhanshu Jaiswal 26 Jan :Successfully forked by Sudhanshu.Tried command line navigation. Trying out other tasks in process. + + 27 Jan : Vim installed, zsh installed, Haskell Stack installed and set-up. Members: From 607b693334a1bb4b4f32861321240463599af400 Mon Sep 17 00:00:00 2001 From: Sudhanshu Jaiswal Date: Sun, 29 Jan 2017 23:42:46 +0530 Subject: [PATCH 04/29] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5e73f0a..b2843b9 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ ACA Project Haskell -- Sudhanshu Jaiswal 27 Jan : Vim installed, zsh installed, Haskell Stack installed and set-up. +29 Jan : Trying basic file manipulation. + Members: * Ankit Kumar Singh From 3331912a268aedc87059df8e42b6a9fc4cca622c Mon Sep 17 00:00:00 2001 From: Sudhanshu Jaiswal Date: Wed, 8 Feb 2017 02:00:06 +0530 Subject: [PATCH 05/29] Create Sudswork.md --- Sudswork.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Sudswork.md diff --git a/Sudswork.md b/Sudswork.md new file mode 100644 index 0000000..0a7d3ec --- /dev/null +++ b/Sudswork.md @@ -0,0 +1,7 @@ +ACA Project Haskell -- Sudhanshu Jaiswal + +26 Jan :Successfully forked by Sudhanshu.Tried command line navigation. Trying out other tasks in process. + +27 Jan : Vim installed, zsh installed, Haskell Stack installed and set-up. + +8 Feb : Created this and started basic programs with Haskell From f85a05784ad565297881cc0cefe161fd0c4648e5 Mon Sep 17 00:00:00 2001 From: Sudhanshu Jaiswal Date: Tue, 14 Feb 2017 01:04:44 +0530 Subject: [PATCH 06/29] Delete README.md --- README.md | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index b2843b9..0000000 --- a/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# ACA Haskell -ACA Project Haskell -- Sudhanshu Jaiswal - -26 Jan :Successfully forked by Sudhanshu.Tried command line navigation. Trying out other tasks in process. - - -27 Jan : Vim installed, zsh installed, Haskell Stack installed and set-up. - -29 Jan : Trying basic file manipulation. - -Members: - -* Ankit Kumar Singh -* Sudhanshu Jaiswal -* Ahsan -* Abhishek -* Siddhant Kar - -## Initial Tasks -1. Command line navigation: mkdir, cd, rm, printenv, man -2. Basic file manipulation: cut, paste, awk (Difficult) -3. Searching : grep, regex -4. Haskell stack -5. Haskell stack setup with latest version of GHC -6. Basic Git : fork, branch, minor change, remote host update, pull request -7. Basic text editing using vim/emacs (Optional) - From 358e7a591b2e71fe0f663b058e3910413cebe184 Mon Sep 17 00:00:00 2001 From: sudsj Date: Tue, 14 Feb 2017 01:11:17 +0530 Subject: [PATCH 07/29] Updated with my tasks --- Sudswork.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Sudswork.md b/Sudswork.md index 0a7d3ec..9ef5750 100644 --- a/Sudswork.md +++ b/Sudswork.md @@ -5,3 +5,7 @@ ACA Project Haskell -- Sudhanshu Jaiswal 27 Jan : Vim installed, zsh installed, Haskell Stack installed and set-up. 8 Feb : Created this and started basic programs with Haskell + +13 Feb : Added some haskell functions I tried, Installed i3 window manager, now using vim for majority of my editing. + + From aa9882c811bc4ae8033a9c9bd1d990a6a80bf146 Mon Sep 17 00:00:00 2001 From: sudsj Date: Tue, 14 Feb 2017 01:28:14 +0530 Subject: [PATCH 08/29] Added haskell functions file --- new.hs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 new.hs diff --git a/new.hs b/new.hs new file mode 100644 index 0000000..485801d --- /dev/null +++ b/new.hs @@ -0,0 +1,12 @@ +doubleMe x = x+x +doubletwo x y = doubleMe x + doubleMe y + 9 +doubleBig x = if x > 100 then x*2 else x +doubleBig' x = (if x > 100 then x*2 else x) + 2 + + +b = take 10 [5,8..305] + +evens :: [Integer] -> [[Char]] +evens s = [if x < 10 then "Small even" else "Big even" | x <- s, not (odd x)] + + From e52c4a3c6ac874fe9a11e08c5b400b3a6039b1ea Mon Sep 17 00:00:00 2001 From: sudsj Date: Tue, 14 Feb 2017 01:52:45 +0530 Subject: [PATCH 09/29] added one more --- new.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/new.hs b/new.hs index 485801d..f125eb5 100644 --- a/new.hs +++ b/new.hs @@ -10,3 +10,5 @@ evens :: [Integer] -> [[Char]] evens s = [if x < 10 then "Small even" else "Big even" | x <- s, not (odd x)] +onlyUpper :: [Char] -> [Char] +onlyUpper st = [x|x <- st,x `elem` ['A'..'Z']] From 0897dc56ef5a727576a331701a889bb72577ddde Mon Sep 17 00:00:00 2001 From: sudsj Date: Wed, 15 Feb 2017 03:52:36 +0530 Subject: [PATCH 10/29] Added a function --- new.hs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/new.hs b/new.hs index f125eb5..01490e3 100644 --- a/new.hs +++ b/new.hs @@ -12,3 +12,16 @@ evens s = [if x < 10 then "Small even" else "Big even" | x <- s, not (odd x)] onlyUpper :: [Char] -> [Char] onlyUpper st = [x|x <- st,x `elem` ['A'..'Z']] + +doYouGAF :: [[Char]] -> [[Char]] +doYouGAF st = [if (x == "No" || x== "no") then "No Fs given" else "But why" | x <- st, x == head st] + + +HoursYouReadBooks :: (Integral a) => a -> a -> String + +HoursYouReadBooks hours books + | ratio <= 1 = "C'mmon give those books some time" + | ratio <= 2 = "That's quite good!" + | ratio <= 3 = "Oh you are a devotee" + | otherwise = "Get OUT! Like Seriously!" + where ratio = (fromIntegral (hours) / books) From 5755f6e0fcf3fade5ec2d3deddd1c776f0d3f2bd Mon Sep 17 00:00:00 2001 From: sudsj Date: Sat, 18 Feb 2017 22:47:28 +0530 Subject: [PATCH 11/29] Fixed an error --- new.hs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/new.hs b/new.hs index 01490e3..5fc27bb 100644 --- a/new.hs +++ b/new.hs @@ -17,11 +17,10 @@ doYouGAF :: [[Char]] -> [[Char]] doYouGAF st = [if (x == "No" || x== "no") then "No Fs given" else "But why" | x <- st, x == head st] -HoursYouReadBooks :: (Integral a) => a -> a -> String - -HoursYouReadBooks hours books +hoursYouReadBooks :: (Integral a) => a -> a -> String +hoursYouReadBooks hours books | ratio <= 1 = "C'mmon give those books some time" | ratio <= 2 = "That's quite good!" | ratio <= 3 = "Oh you are a devotee" | otherwise = "Get OUT! Like Seriously!" - where ratio = (fromIntegral (hours) / books) + where ratio = (fromIntegral (hours) / fromIntegral(books)) From cf00c17b374824098b58a55ce0452e323edc6392 Mon Sep 17 00:00:00 2001 From: sudsj Date: Sun, 19 Feb 2017 04:02:20 +0530 Subject: [PATCH 12/29] New prob solved --- new.hs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/new.hs b/new.hs index 5fc27bb..cd917b8 100644 --- a/new.hs +++ b/new.hs @@ -9,6 +9,7 @@ b = take 10 [5,8..305] evens :: [Integer] -> [[Char]] evens s = [if x < 10 then "Small even" else "Big even" | x <- s, not (odd x)] +sumsp = sum(takeWhile(<1000)[x|x<-[1..],x `mod` 3 == 0 || x `mod` 5 ==0]) onlyUpper :: [Char] -> [Char] onlyUpper st = [x|x <- st,x `elem` ['A'..'Z']] @@ -24,3 +25,7 @@ hoursYouReadBooks hours books | ratio <= 3 = "Oh you are a devotee" | otherwise = "Get OUT! Like Seriously!" where ratio = (fromIntegral (hours) / fromIntegral(books)) + + + + From b3eabdc24f477a01574f89e5d295aad5ae99d796 Mon Sep 17 00:00:00 2001 From: sudsj Date: Tue, 21 Feb 2017 00:38:49 +0530 Subject: [PATCH 13/29] Added folds by recursion --- new.hs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/new.hs b/new.hs index cd917b8..a3cbac1 100644 --- a/new.hs +++ b/new.hs @@ -8,9 +8,21 @@ b = take 10 [5,8..305] evens :: [Integer] -> [[Char]] evens s = [if x < 10 then "Small even" else "Big even" | x <- s, not (odd x)] +--folds by recursion +foldl' :: (b -> a -> b) -> b -> [a] -> b +foldl' f acc [] = acc +foldl' f acc (x:xs) = foldl' f (f acc x) xs + +foldr' :: (a -> b -> b) -> b -> [a] -> b +foldr' f acc [] = acc +foldr' f acc (x:xs) = f x (foldr' f acc xs) sumsp = sum(takeWhile(<1000)[x|x<-[1..],x `mod` 3 == 0 || x `mod` 5 ==0]) +sumsp' = sum(takeWhile(<1000)(filter p [1..])) -- using filter + where p x = (x `mod` 3 == 0 || x `mod` 5 == 0) + + onlyUpper :: [Char] -> [Char] onlyUpper st = [x|x <- st,x `elem` ['A'..'Z']] From 2812dd3fd84ec6ff36ad84e50e535eaf6117c9bf Mon Sep 17 00:00:00 2001 From: sudsj Date: Tue, 21 Feb 2017 15:34:21 +0530 Subject: [PATCH 14/29] Added take and drop by recursion --- new.hs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/new.hs b/new.hs index a3cbac1..9f44099 100644 --- a/new.hs +++ b/new.hs @@ -17,6 +17,20 @@ foldr' :: (a -> b -> b) -> b -> [a] -> b foldr' f acc [] = acc foldr' f acc (x:xs) = f x (foldr' f acc xs) +--take and frop by recursion +take' :: Integer -> [b] -> [b] +take' n [] = [] +take' n (x:xs) + | n <= 0 = [] + | n >= 0 = (x:(take' (n-1) xs)) + +drop' :: Integer -> [b] -> [b] +drop' n [] = [] +drop' n (x:xs) + | n <= 0 = xs + | n >= 0 = (drop' (n-1) xs) + +--sum of all numbers less than 1000 which are divisible by 3 or 5 sumsp = sum(takeWhile(<1000)[x|x<-[1..],x `mod` 3 == 0 || x `mod` 5 ==0]) sumsp' = sum(takeWhile(<1000)(filter p [1..])) -- using filter From 00310d97429deeb4783301f6e95705c32bb8fb27 Mon Sep 17 00:00:00 2001 From: sudsj Date: Sun, 5 Mar 2017 18:33:03 +0530 Subject: [PATCH 15/29] Updates --- .new.hs.swp | Bin 0 -> 12288 bytes new.hs | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 .new.hs.swp diff --git a/.new.hs.swp b/.new.hs.swp new file mode 100644 index 0000000000000000000000000000000000000000..0c8623e97745ed8c8c3783495f9e7cc5e9a09f14 GIT binary patch literal 12288 zcmeI2&2G~`6osb#(J~<03X_W4*uF*`PBye04 z;@#^v_uu9UVr)+cKQJxB^{pVf_m5-X%dc$a*OitHr4CQ$X* zV)%#Baf+_&6fFOQm3)Z_Fo9DM2=qaIW>id-C*!aB&D1#ExW0R;lDwD+FaajO1egF5 zU;<2l2{3`PML@Sl#B)SGm&6`R&LczTWXdNdzyz286JP>NfC(@GCcp%k025#WOyCR> zFiat~E(`G$ihlq9{r>;+st_NcSI}d~hAe0c+Js8bk1IlahrU4{pqJ1KNI{pNi_it= z)2I;dp{LLuRD{k$QO_^X=cqRyOn?b60Vco%m;e)C0!)AjFoFLdKtvr&dXhXt+lnfb zIq+0#)zz};84hJE6?lG@iWL1%+0P219x06#9ov_%r+o+LoTJ0^jM5 zr($cr>Rg4UBJYMpT@{dlb_SX92!DT;L%wq4+p!Ft_UTDrYe`L|%;9R2k!vyCYAKhR z_K_rQDa460lCN60V7E{@PX9m!cco!2L>r*^O5b?G-Pu{n4EAnhsWOkC`Q&3;d$!vY zB!sC@bGf=izDAImeL$IzDu}eMQq=2F7>!+($|9F^qsz49$3fi`Ne4+&3xNjsF6yw}C38iSVlx$(UWjGE+hQSW(W-?E<;7<^_N>fIe zCWYC0QZ8y0GnL+O{02H{1CI^b)TSq93WcfCbR9uV6*L^VU^mkd6Uu;aNb|5Ial%{W rKF2UiIVvCfWBcFTiBWeHj9pajH(HaJ=8h*_Ol~LM_+Ev=Tqu44mhvqe literal 0 HcmV?d00001 diff --git a/new.hs b/new.hs index 9f44099..d3daf7d 100644 --- a/new.hs +++ b/new.hs @@ -1,3 +1,5 @@ +import Data.List (sort) + doubleMe x = x+x doubletwo x y = doubleMe x + doubleMe y + 9 doubleBig x = if x > 100 then x*2 else x @@ -30,6 +32,39 @@ drop' n (x:xs) | n <= 0 = xs | n >= 0 = (drop' (n-1) xs) +--sinx with error bounds +fact' :: Float -> Float +fact' 1 = 1 +fact' n = n * fact' (n-1) + +sin' :: Float -> Float +sin' x = sum(take 3 [(term 0),(term 1)..]) + where term n = ((x ** ((2*n)+1)) * ((-1) ** n)) / (fact'((2*n)+1)) + errorsin x = abs(sin x - sin' x) + +--sin' :: Float -> Float -> Float +--sin' x y = sum(takeWhile ((errorsin x) < (y)) [(term 0),(term 1)..]) +-- where term n = ((x ** ((2*n)+1)) * ((-1) ** n)) / (fact'((2*n)+1)) +-- errorsin x = abs(sin x - sin' x) + +term n x = ((x ** ((2*n)+1)) * ((-1) ** n)) / (fact'((2*n)+1)) +errorsin x = abs(sin x - sin' x) + +--merge lists +mergels :: [a] -> [a] -> [a] +mergels xs [] = xs +mergels [] ys = ys +mergels (x:xs) (y:ys) = (x : (y : (mergels xs ys))) + + +--merge lists and sort +mergelst :: (Ord) => [a] -> [a] -> [a] +mergelst xs [] = xs +mergelst [] ys = ys +mergelst (x:xs) (y:ys) = (a : (b : (mergelst as bs))) + where a:as = sort (xs) + b:bs = sort (ys) + --sum of all numbers less than 1000 which are divisible by 3 or 5 sumsp = sum(takeWhile(<1000)[x|x<-[1..],x `mod` 3 == 0 || x `mod` 5 ==0]) From 05f9b25c60bbe8190566cbe284669000248d1b86 Mon Sep 17 00:00:00 2001 From: sudsj Date: Tue, 7 Mar 2017 04:37:42 +0530 Subject: [PATCH 16/29] Added tictactoe file --- tictac.hs | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 tictac.hs diff --git a/tictac.hs b/tictac.hs new file mode 100644 index 0000000..fb7ad02 --- /dev/null +++ b/tictac.hs @@ -0,0 +1,102 @@ +import Data.Char +import Data.List +import System.IO +import Data.Int + +-- Reading a number + +getNum :: String -> IO Int +getNum prompt = do putStr prompt + xs <- getLine + if xs /= [] && all isDigit xs then + return (read xs) + else + do putStrLn "NOT A VALID NUMBER" + getNum prompt + + +size :: Int +size = 3 + +type Playgrid = [[Player]] + +data Player = O | B | X -- X and O, B is for Blank + deriving (Eq, Ord, Show) + +changeturn :: Player -> Player +changeturn O = X +changeturn B = B +changeturn X = O + + +blank :: Playgrid --creates blank Playgrid +blank = replicate size (replicate size B) + +full :: Playgrid -> Bool--will check for full Playgrid +full = all (/= B) . concat + +wins :: Player -> Playgrid -> Bool--checks for win condition +wins p g = any checkr (rows ++ cols ++ dias)--metrue if any return true + where + checkr = all (== p) + rows = g + cols = transpose g + dias = [findDiag g, findDiag (map reverse g)] + +findDiag :: Playgrid -> [Player] +findDiag g = [g !! n !! n | n <- [0..size-1]] + +-- !!Plan to add gridlines to the Playgrid output, thus two seperate row and player str of strings!! + +putPlaygrid :: Playgrid -> IO () +putPlaygrid = + putStrLn . unlines . concat .map rowStr--unline inserts new line character + +rowStr :: [Player] -> [String] +rowStr = beside . map playerStr + where + beside = foldr1 (zipWith (++)) -- joins the strings from last two elements + +playerStr :: Player -> [String] +playerStr O = [" ", " O ", " "] +playerStr B = [" ", " ", " "] +playerStr X = [" ", " X ", " "] + +-- For moves + +isValid :: Playgrid -> Int -> Bool +isValid g i = (i >= 0) && (i < (size^2)) && (concat g !! i == B) + +move:: Playgrid -> Int -> Player -> [Playgrid] +move g i p = + if isValid g i then [cutt size (xs ++ [p] ++ ys)] else [] + where (xs,B:ys) = splitAt i (concat g)--splitAt splits list at i + +cutt :: Int -> [a] -> [[a]]--creates sublists of size n from original lists +cutt n [] = [] +cutt n xs = take n xs : cutt n (drop n xs) + + + +tictactoe :: IO () +tictactoe = do gameloop blank O + +gameloop :: Playgrid -> Player -> IO () +gameloop g p = do putPlaygrid g + gameloop' g p + +gameloop' :: Playgrid -> Player -> IO () +gameloop' g p + | wins O g = putStrLn "Player O is winner!\n" + | wins X g = putStrLn "Player X is winner!\n" + | full g = putStrLn "GAME DRAW!\n" + | otherwise = + do num <- getNum (prompts' p) + case move g num p of + [] -> do putStrLn "Invalid Move" + gameloop' g p + [g'] -> gameloop g' (changeturn p) + +prompts' :: Player -> String +prompts' p = "Player " ++ show p ++ ", enter your move: " + From 262bddc067e1946ceccbbbf7161a4d41a411cb3a Mon Sep 17 00:00:00 2001 From: sudsj Date: Tue, 7 Mar 2017 05:01:24 +0530 Subject: [PATCH 17/29] Added trial Latex report --- Tictac.pdf | Bin 0 -> 68192 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tictac.pdf diff --git a/Tictac.pdf b/Tictac.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1b064fdfd5c10f1be155677592e81daf8a4c57a1 GIT binary patch literal 68192 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 nd#yHVCFnTHiUJ6KU+N{IeR literal 0 HcmV?d00001 From c97ada3a2c1d039dcef0d01da115d204354076d8 Mon Sep 17 00:00:00 2001 From: sudsj Date: Mon, 13 Mar 2017 00:24:23 +0530 Subject: [PATCH 18/29] Added timeIt modules --- tictac.hs | 80 +++++++++++++++++++++++-------------------------------- 1 file changed, 33 insertions(+), 47 deletions(-) diff --git a/tictac.hs b/tictac.hs index fb7ad02..704dd4b 100644 --- a/tictac.hs +++ b/tictac.hs @@ -2,9 +2,9 @@ import Data.Char import Data.List import System.IO import Data.Int +import System.TimeIt -- Reading a number - getNum :: String -> IO Int getNum prompt = do putStr prompt xs <- getLine @@ -14,9 +14,7 @@ getNum prompt = do putStr prompt do putStrLn "NOT A VALID NUMBER" getNum prompt - -size :: Int -size = 3 +--setting up grid and turn changer type Playgrid = [[Player]] @@ -29,74 +27,62 @@ changeturn B = B changeturn X = O -blank :: Playgrid --creates blank Playgrid -blank = replicate size (replicate size B) +blank :: Int -> Playgrid --creates blank Playgrid +blank num = replicate num (replicate num B) full :: Playgrid -> Bool--will check for full Playgrid full = all (/= B) . concat -wins :: Player -> Playgrid -> Bool--checks for win condition -wins p g = any checkr (rows ++ cols ++ dias)--metrue if any return true +wins :: Int -> Player -> Playgrid -> Bool--checks for win condition +wins nums p g = any checkr (rows ++ cols ++ dias)--true if any return true where checkr = all (== p) rows = g cols = transpose g - dias = [findDiag g, findDiag (map reverse g)] + dias = [findDiag nums g, findDiag nums (map reverse g)] -findDiag :: Playgrid -> [Player] -findDiag g = [g !! n !! n | n <- [0..size-1]] +findDiag :: Int -> Playgrid -> [Player] +findDiag nums g = [g !! n !! n | n <- [0..nums-1]] -- !!Plan to add gridlines to the Playgrid output, thus two seperate row and player str of strings!! - +--functions to print the grid putPlaygrid :: Playgrid -> IO () -putPlaygrid = - putStrLn . unlines . concat .map rowStr--unline inserts new line character - -rowStr :: [Player] -> [String] -rowStr = beside . map playerStr - where - beside = foldr1 (zipWith (++)) -- joins the strings from last two elements - -playerStr :: Player -> [String] -playerStr O = [" ", " O ", " "] -playerStr B = [" ", " ", " "] -playerStr X = [" ", " X ", " "] - +putPlaygrid = mapM_ (putStrLn . intercalate " " . map show) -- For moves -isValid :: Playgrid -> Int -> Bool -isValid g i = (i >= 0) && (i < (size^2)) && (concat g !! i == B) +isValid :: Int -> Playgrid -> Int -> Bool +isValid nums g i = (i >= 0) && (i < (nums^2)) && (concat g !! i == B) -move:: Playgrid -> Int -> Player -> [Playgrid] -move g i p = - if isValid g i then [cutt size (xs ++ [p] ++ ys)] else [] +move:: Int -> Playgrid -> Int -> Player -> [Playgrid] +move nums g i p = + if isValid nums g i then [cutt nums (xs ++ [p] ++ ys)] else [] where (xs,B:ys) = splitAt i (concat g)--splitAt splits list at i cutt :: Int -> [a] -> [[a]]--creates sublists of size n from original lists cutt n [] = [] cutt n xs = take n xs : cutt n (drop n xs) - - -tictactoe :: IO () -tictactoe = do gameloop blank O - -gameloop :: Playgrid -> Player -> IO () -gameloop g p = do putPlaygrid g - gameloop' g p - -gameloop' :: Playgrid -> Player -> IO () -gameloop' g p - | wins O g = putStrLn "Player O is winner!\n" - | wins X g = putStrLn "Player X is winner!\n" +--main function to take in grid size and runs gameloop +main :: IO () +main = do sizes <- getNum "Enter the grid size : " + timeIt $ gameloop sizes (blank sizes) O +--prints the playGrid and calls gameloop' +gameloop :: Int -> Playgrid -> Player -> IO () +gameloop sizes g p = do putPlaygrid g + gameloop' sizes g p +--checks game terminate conditions and continues game if not true +gameloop' :: Int -> Playgrid -> Player -> IO () +gameloop' sizes g p + | wins sizes O g = putStrLn "Player O is winner!\n" + | wins sizes X g = putStrLn "Player X is winner!\n" | full g = putStrLn "GAME DRAW!\n" | otherwise = do num <- getNum (prompts' p) - case move g num p of + case move sizes g num p of [] -> do putStrLn "Invalid Move" - gameloop' g p - [g'] -> gameloop g' (changeturn p) - + gameloop' sizes g p + [g'] -> gameloop sizes g' (changeturn p) +--prompts user to enter move prompts' :: Player -> String prompts' p = "Player " ++ show p ++ ", enter your move: " From 2cc4607f8156d47a71d3836622c1f0ea805bce1a Mon Sep 17 00:00:00 2001 From: Sudhanshu Jaiswal Date: Mon, 13 Mar 2017 01:01:21 +0530 Subject: [PATCH 19/29] Updated Latex --- Tictac.pdf | Bin 68192 -> 70464 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Tictac.pdf b/Tictac.pdf index 1b064fdfd5c10f1be155677592e81daf8a4c57a1..275cc53e28ab74db4109ee0dfe98aaa8056032e9 100644 GIT binary patch delta 39310 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 B##{gZ delta 37003 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 From f4817f668780bec77cb4656fac04e18ee0a81ffa Mon Sep 17 00:00:00 2001 From: sudsj Date: Wed, 22 Mar 2017 19:45:44 +0530 Subject: [PATCH 20/29] Updates --- Tictac.pdf | Bin 68192 -> 71338 bytes tictac.hs | 11 ++++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Tictac.pdf b/Tictac.pdf index 1b064fdfd5c10f1be155677592e81daf8a4c57a1..c959520c23cdcf5f1f047fcf52236f98e8bb76df 100644 GIT binary patch delta 29952 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 delta 26791 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 diff --git a/tictac.hs b/tictac.hs index 704dd4b..d3187d6 100644 --- a/tictac.hs +++ b/tictac.hs @@ -42,7 +42,7 @@ wins nums p g = any checkr (rows ++ cols ++ dias)--true if any return true dias = [findDiag nums g, findDiag nums (map reverse g)] findDiag :: Int -> Playgrid -> [Player] -findDiag nums g = [g !! n !! n | n <- [0..nums-1]] +findDiag nums g = [g !! n !! n | n <- [0..nums-1]]--puts diagonal elements into a list -- !!Plan to add gridlines to the Playgrid output, thus two seperate row and player str of strings!! --functions to print the grid @@ -53,14 +53,15 @@ putPlaygrid = mapM_ (putStrLn . intercalate " " . map show) isValid :: Int -> Playgrid -> Int -> Bool isValid nums g i = (i >= 0) && (i < (nums^2)) && (concat g !! i == B) -move:: Int -> Playgrid -> Int -> Player -> [Playgrid] -move nums g i p = +move:: Int -> Playgrid -> Int -> Player -> [Playgrid]--changes the ith element of the playgrid (concatonated). +--Splits concatoated playgrid into parts before and after the ith element then merge those parts adding the player letter in between. +move nums g i p = -- nums is grid size, g is playgrid, i is move number entered and p is player (X or O) if isValid nums g i then [cutt nums (xs ++ [p] ++ ys)] else [] - where (xs,B:ys) = splitAt i (concat g)--splitAt splits list at i + where (xs,B:ys) = splitAt i (concat g)--splitAt splits list at i and makes a list containing those two split parts cutt :: Int -> [a] -> [[a]]--creates sublists of size n from original lists cutt n [] = [] -cutt n xs = take n xs : cutt n (drop n xs) +cutt n xs = take n xs : cutt n (drop n xs)--takes n makes a list then takes n from the remainder and puts all those lists into a list --main function to take in grid size and runs gameloop main :: IO () From a712c7ae7364582eb21520947e1afbebe65ba7d8 Mon Sep 17 00:00:00 2001 From: sudsj Date: Sat, 1 Apr 2017 02:56:13 +0530 Subject: [PATCH 21/29] minor changes --- new.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/new.hs b/new.hs index d3daf7d..21249e7 100644 --- a/new.hs +++ b/new.hs @@ -58,12 +58,12 @@ mergels (x:xs) (y:ys) = (x : (y : (mergels xs ys))) --merge lists and sort -mergelst :: (Ord) => [a] -> [a] -> [a] -mergelst xs [] = xs -mergelst [] ys = ys -mergelst (x:xs) (y:ys) = (a : (b : (mergelst as bs))) - where a:as = sort (xs) - b:bs = sort (ys) +--mergelst :: (Ord) => [a] -> [a] -> [a] +--mergelst xs [] = xs +--mergelst [] ys = ys +--mergelst (x:xs) (y:ys) = (a : (b : (mergelst as bs))) +-- where a:as = sort (xs) +-- b:bs = sort (ys) --sum of all numbers less than 1000 which are divisible by 3 or 5 sumsp = sum(takeWhile(<1000)[x|x<-[1..],x `mod` 3 == 0 || x `mod` 5 ==0]) From 269b5e40511f947380ffa2f4e21c92c07b0e3a58 Mon Sep 17 00:00:00 2001 From: sudsj Date: Tue, 4 Apr 2017 20:14:30 +0530 Subject: [PATCH 22/29] started ai --- tictac.hs | 2 +- tictacai.hs | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 tictacai.hs diff --git a/tictac.hs b/tictac.hs index d3187d6..937f614 100644 --- a/tictac.hs +++ b/tictac.hs @@ -56,7 +56,7 @@ isValid nums g i = (i >= 0) && (i < (nums^2)) && (concat g !! i == B) move:: Int -> Playgrid -> Int -> Player -> [Playgrid]--changes the ith element of the playgrid (concatonated). --Splits concatoated playgrid into parts before and after the ith element then merge those parts adding the player letter in between. move nums g i p = -- nums is grid size, g is playgrid, i is move number entered and p is player (X or O) - if isValid nums g i then [cutt nums (xs ++ [p] ++ ys)] else [] + if isValid nums g i then [cutt nums (xs ++ [p] ++ ys)] else []--cutt nums restores the concatonated list into lists of rows where (xs,B:ys) = splitAt i (concat g)--splitAt splits list at i and makes a list containing those two split parts cutt :: Int -> [a] -> [[a]]--creates sublists of size n from original lists diff --git a/tictacai.hs b/tictacai.hs new file mode 100644 index 0000000..86907b2 --- /dev/null +++ b/tictacai.hs @@ -0,0 +1,102 @@ +import Data.Char +import Data.List +import System.IO +import Data.Int +import System.TimeIt + +-- Reading a number +getNum :: String -> IO Int +getNum prompt = do putStr prompt + xs <- getLine + if xs /= [] && all isDigit xs then + return (read xs) + else + do putStrLn "NOT A VALID NUMBER" + getNum prompt + +--setting up grid and turn changer + +type Playgrid = [[Player]] + +data Player = O | B | X -- X and O, B is for Blank + deriving (Eq, Ord, Show) + +changeturn :: Player -> Player +changeturn O = X +changeturn B = B +changeturn X = O + + +blank :: Int -> Playgrid --creates blank Playgrid +blank num = replicate num (replicate num B) + +full :: Playgrid -> Bool--will check for full Playgrid +full = all (/= B) . concat + +wins :: Int -> Player -> Playgrid -> Bool--checks for win condition +wins nums p g = any checkr (rows ++ cols ++ dias)--true if any return true + where + checkr = all (== p) + rows = g + cols = transpose g + dias = [findDiag nums g, findDiag nums (map reverse g)] + +findDiag :: Int -> Playgrid -> [Player] +findDiag nums g = [g !! n !! n | n <- [0..nums-1]]--puts diagonal elements into a list + +-- !!Plan to add gridlines to the Playgrid output, thus two seperate row and player str of strings!! +--functions to print the grid +putPlaygrid :: Playgrid -> IO () +putPlaygrid = mapM_ (putStrLn . intercalate " " . map show) +-- For moves + +isValid :: Int -> Playgrid -> Int -> Bool +isValid nums g i = (i >= 0) && (i < (nums^2)) && (concat g !! i == B) + +move:: Int -> Playgrid -> Int -> Player -> [Playgrid]--changes the ith element of the playgrid (concatonated). +--Splits concatoated playgrid into parts before and after the ith element then merge those parts adding the player letter in between. +move nums g i p = -- nums is grid size, g is playgrid, i is move number entered and p is player (X or O) + if isValid nums g i then [cutt nums (xs ++ [p] ++ ys)] else []--cutt nums restores the concatonated list into lists of rows + where (xs,B:ys) = splitAt i (concat g)--splitAt splits list at i and makes a list containing those two split parts + +cutt :: Int -> [a] -> [[a]]--creates sublists of size n from original lists +cutt n [] = [] +cutt n xs = take n xs : cutt n (drop n xs)--takes n makes a list then takes n from the remainder and puts all those lists into a list + +--main function to take in grid size and runs gameloop +main :: IO () +main = do sizes <- getNum "Enter the grid size : " + timeIt $ gameloop sizes (blank sizes) O +--prints the playGrid and calls gameloop' +gameloop :: Int -> Playgrid -> Player -> IO () +gameloop sizes g p = do putPlaygrid g + gameloop' sizes g p +--checks game terminate conditions and continues game if not true +gameloop' :: Int -> Playgrid -> Player -> IO () +gameloop' sizes g p + | wins sizes O g = putStrLn "Player O is winner!\n" + | wins sizes X g = putStrLn "Player X is winner!\n" + | full g = putStrLn "GAME DRAW!\n" + | otherwise = + do num <- getNum (prompts' p) + case move sizes g num p of + [] -> do putStrLn "Invalid Move" + gameloop' sizes g p + [g'] -> gameloop sizes g' (changeturn p) +--prompts user to enter move +prompts' :: Player -> String +prompts' p = "Player " ++ show p ++ ", enter your move: " + +data Tree a = Node a [Tree a] + deriving Show + +possiblemoves :: Int -> Playgrid -> Player -> [Playgrid] +possiblemoves nums g p = + | wins nums p g = [] + | full g = [] + | otherwise = concat [move nums g i p | i <- [0 .. ((size^2)-1)]] +-- move gives a single playgrid inside a list so to take that playgrid out of the list we need to concat + +gametree :: Playgrid -> Player -> Tree Playgrid +gametree g p = Node g [ gametree g' (changeturn p) | g' <- possiblemoves nums g p] + From d6357dc446cd27faa649d781ab903d62e2c4d9fa Mon Sep 17 00:00:00 2001 From: sudsj Date: Sat, 8 Apr 2017 19:16:19 +0530 Subject: [PATCH 23/29] Made profit/score row function --- tictacai.hs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/tictacai.hs b/tictacai.hs index 86907b2..1310285 100644 --- a/tictacai.hs +++ b/tictacai.hs @@ -91,12 +91,17 @@ data Tree a = Node a [Tree a] deriving Show possiblemoves :: Int -> Playgrid -> Player -> [Playgrid] -possiblemoves nums g p = - | wins nums p g = [] - | full g = [] - | otherwise = concat [move nums g i p | i <- [0 .. ((size^2)-1)]] +possiblemoves size g p + | wins size p g = [] + | full g = [] + | otherwise = concat [move size g i p | i <- [0 .. ((size^2)-1)]] -- move gives a single playgrid inside a list so to take that playgrid out of the list we need to concat -gametree :: Playgrid -> Player -> Tree Playgrid -gametree g p = Node g [ gametree g' (changeturn p) | g' <- possiblemoves nums g p] +gametree :: Int -> Playgrid -> Player -> Tree Playgrid +gametree size g p = Node g [ gametree size g' (changeturn p) | g' <- possiblemoves size g p] +scorerow :: [Player] -> (Int,Int,Int) +scorerow row = foldl (\(score,countx,counto) player -> if (player == X ) then (score + (10^(countx+1)),countx+1,0) else if (player == O) then (score - 10^(counto+1),0,counto+1) else (score,0,0)) (0,0,0) (row) + +findrow :: Int-> Int -> Int +findrow size x = x `div` size From eec82fdaa545d5c7b07ad524705a5040a869d4b3 Mon Sep 17 00:00:00 2001 From: sudsj Date: Sun, 9 Apr 2017 04:41:23 +0530 Subject: [PATCH 24/29] Tried some funcs --- tictacai.hs | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/tictacai.hs b/tictacai.hs index 1310285..1978e13 100644 --- a/tictacai.hs +++ b/tictacai.hs @@ -79,7 +79,7 @@ gameloop' sizes g p | full g = putStrLn "GAME DRAW!\n" | otherwise = do num <- getNum (prompts' p) - case move sizes g num p of + case move sizes g num p of--generates the new grid after num entered by player p [] -> do putStrLn "Invalid Move" gameloop' sizes g p [g'] -> gameloop sizes g' (changeturn p) @@ -100,8 +100,42 @@ possiblemoves size g p gametree :: Int -> Playgrid -> Player -> Tree Playgrid gametree size g p = Node g [ gametree size g' (changeturn p) | g' <- possiblemoves size g p] -scorerow :: [Player] -> (Int,Int,Int) -scorerow row = foldl (\(score,countx,counto) player -> if (player == X ) then (score + (10^(countx+1)),countx+1,0) else if (player == O) then (score - 10^(counto+1),0,counto+1) else (score,0,0)) (0,0,0) (row) +scorerow :: [Player] -> Int +scorerow row = getscore(foldl (\(score,countx,counto) player -> if (player == X ) then (score + (10^(countx+1)),countx+1,0) else if (player == O) then (score - 10^(counto+1),0,counto+1) else (score,0,0)) (0,0,0) (row)) findrow :: Int-> Int -> Int findrow size x = x `div` size + +getrow :: Int -> Int -> Playgrid -> [Player] +getrow size x g = g!!(findrow size x) + +getscore (x,_,_) = x + +findcol :: Int -> Int -> Int +findcol size x = (x) `mod` size + +getcol :: Int -> Int -> Playgrid -> [Player] +getcol size x g = (transpose g)!!(findcol size x) + +scoreLeaddiag :: Int -> Int -> Playgrid -> Int +scoreLeaddiag size i g = if (i `elem` [0,(size+1)..((size^2) -1)]) then scorerow(findDiag size g) else 0 + +scoreOtherdiag :: Int -> Int -> Playgrid -> Int +scoreOtherdiag size i g = if (i `elem` [(size-1),(2*(size-1))..(size * (size-1))]) then scorerow(findDiag size (map reverse g)) else 0 + +scoregrid :: Int -> Int -> Playgrid -> Int +scoregrid i size g = scorerow (getrow size i g) + scorerow (getcol size i g) + scoreLeaddiag size i g + scoreOtherdiag size i g + +--scoreTree size (g,score,depth) playerturn limit = Node (g,score,depth) [Tree (g',score',depth-1) where g' = (possiblemoves size g playerturn)] + +gameStree :: Int -> (Playgrid,Int) -> Player -> Tree (Playgrid,Int) +gameStree size (g,score) p depth = + | (depth > 0) = Node (g,score') [ gameStree size (g',scoreFGrid g') (changeturn p) | g' <- possiblemoves size g p ] + | (depth = 0) = Node (g,scoreFGrid g) []--[gameStree size (g',scoreFGrid g') (changeturn p) | g' <- possiblemoves size g p ] + +--or try score tree given a gametree +--given infor is size,playgrid,playerturn,score at that pt + +scoreFGrid :: Playgrid -> Int +scoreFGrid g = foldl (\acc row -> acc + scorerow row) 0 g + From 3d29f3265b9b5d61d875b7aac923b9a5266e6162 Mon Sep 17 00:00:00 2001 From: sudsj Date: Sun, 9 Apr 2017 18:03:22 +0530 Subject: [PATCH 25/29] minor functions added --- new.hs | 10 ++++++++++ tictacai.hs | 13 ++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/new.hs b/new.hs index 21249e7..93007a9 100644 --- a/new.hs +++ b/new.hs @@ -87,6 +87,16 @@ hoursYouReadBooks hours books | otherwise = "Get OUT! Like Seriously!" where ratio = (fromIntegral (hours) / fromIntegral(books)) +tupl :: [(Int,Int)] -> [(Int,Int)] +tupl listtup = [(x,ymaxs) | (x,y) <- listtup ] where ymaxs = ymax listtup +ymax :: [(Int,Int)] -> Int +ymax listtup = maxlist [y | y <- map getsecond listtup] + +maxlist p = foldl max 0 p + +getfirst (x,y) = x + +getsecond (x,y) = y diff --git a/tictacai.hs b/tictacai.hs index 1978e13..b47465d 100644 --- a/tictacai.hs +++ b/tictacai.hs @@ -128,14 +128,17 @@ scoregrid i size g = scorerow (getrow size i g) + scorerow (getcol size i g) + s --scoreTree size (g,score,depth) playerturn limit = Node (g,score,depth) [Tree (g',score',depth-1) where g' = (possiblemoves size g playerturn)] -gameStree :: Int -> (Playgrid,Int) -> Player -> Tree (Playgrid,Int) -gameStree size (g,score) p depth = - | (depth > 0) = Node (g,score') [ gameStree size (g',scoreFGrid g') (changeturn p) | g' <- possiblemoves size g p ] - | (depth = 0) = Node (g,scoreFGrid g) []--[gameStree size (g',scoreFGrid g') (changeturn p) | g' <- possiblemoves size g p ] - +gameStree :: Int -> (Playgrid,Int) -> Player -> Int-> Tree (Playgrid,Int) +gameStree size (g,score) p depth + | (depth > 0) = Node (g,score' size p g) [ gameStree size (g',score' size (changeturn p) g') (changeturn p) (depth-1)| g' <- possiblemoves size g p ] + | (depth == 0) = Node (g,scoreFGrid g) []--[gameStree size (g',scoreFGrid g') (changeturn p) | g' <- possiblemoves size g p ] + where score' size p g = if p==X then maxlist (map scoreFGrid [g'| g' <- possiblemoves size g p ]) else minlist (map scoreFGrid [g'| g' <- possiblemoves size g p]) --or try score tree given a gametree --given infor is size,playgrid,playerturn,score at that pt scoreFGrid :: Playgrid -> Int scoreFGrid g = foldl (\acc row -> acc + scorerow row) 0 g +maxlist p = foldl max 0 p + +minlist p = foldl min 0 p \ No newline at end of file From 0192205e3084dc5e6323f05d5ccc70b4bfaf5c6f Mon Sep 17 00:00:00 2001 From: sudsj Date: Fri, 14 Apr 2017 00:22:04 +0530 Subject: [PATCH 26/29] Move prediction done --- tictacai.hs | 22 +++++-- tictacai1.hs | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 196 insertions(+), 6 deletions(-) create mode 100644 tictacai1.hs diff --git a/tictacai.hs b/tictacai.hs index b47465d..fff4b65 100644 --- a/tictacai.hs +++ b/tictacai.hs @@ -129,16 +129,26 @@ scoregrid i size g = scorerow (getrow size i g) + scorerow (getcol size i g) + s --scoreTree size (g,score,depth) playerturn limit = Node (g,score,depth) [Tree (g',score',depth-1) where g' = (possiblemoves size g playerturn)] gameStree :: Int -> (Playgrid,Int) -> Player -> Int-> Tree (Playgrid,Int) -gameStree size (g,score) p depth +gameStree size (g,score) p depth + | wins size X (getfirst (g,score)) = Node (g,scoreFGrid size g) [] + | wins size O (getfirst (g,score)) = Node (g,scoreFGrid size g) [] | (depth > 0) = Node (g,score' size p g) [ gameStree size (g',score' size (changeturn p) g') (changeturn p) (depth-1)| g' <- possiblemoves size g p ] - | (depth == 0) = Node (g,scoreFGrid g) []--[gameStree size (g',scoreFGrid g') (changeturn p) | g' <- possiblemoves size g p ] - where score' size p g = if p==X then maxlist (map scoreFGrid [g'| g' <- possiblemoves size g p ]) else minlist (map scoreFGrid [g'| g' <- possiblemoves size g p]) + | (depth == 0) = Node (g,scoreFGrid size g) []--[gameStree size (g',scoreFGrid size g') (changeturn p) | g' <- possiblemoves size g p ] + where score' size p g = if p==X then maxlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p ]) else minlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p]) --or try score tree given a gametree --given infor is size,playgrid,playerturn,score at that pt -scoreFGrid :: Playgrid -> Int -scoreFGrid g = foldl (\acc row -> acc + scorerow row) 0 g +scoreFGrid :: Int -> Playgrid-> Int +scoreFGrid size g = (scorerowWise g) + (scorerowWise (transpose g)) + (scorerow(findDiag size g)) + (scorerow(findDiag size (map reverse g))) + +scorerowWise g = foldl (\acc row -> acc + scorerow row) 0 g maxlist p = foldl max 0 p -minlist p = foldl min 0 p \ No newline at end of file +minlist p = foldl min 0 p + +getfirst :: (a,b) -> a +getfirst (x,y) = x + +getsecond (x,y) = y + diff --git a/tictacai1.hs b/tictacai1.hs new file mode 100644 index 0000000..6dc2c40 --- /dev/null +++ b/tictacai1.hs @@ -0,0 +1,180 @@ +import Data.Char +import Data.List +import System.IO +import Data.Int +import System.TimeIt + +-- Reading a number +getNum :: String -> IO Int +getNum prompt = do putStr prompt + xs <- getLine + if xs /= [] && all isDigit xs then + return (read xs) + else + do putStrLn "NOT A VALID NUMBER" + getNum prompt + +--setting up grid and turn changer + +type Playgrid = [[Player]] + +data Player = O | B | X -- X and O, B is for Blank + deriving (Eq, Ord, Show) + +changeturn :: Player -> Player +changeturn O = X +changeturn B = B +changeturn X = O + + +blank :: Int -> Playgrid --creates blank Playgrid +blank num = replicate num (replicate num B) + +full :: Playgrid -> Bool--will check for full Playgrid +full = all (/= B) . concat + +wins :: Int -> Player -> Playgrid -> Bool--checks for win condition +wins nums p g = any checkr (rows ++ cols ++ dias)--true if any return true + where + checkr = all (== p) + rows = g + cols = transpose g + dias = [findDiag nums g, findDiag nums (map reverse g)] + +findDiag :: Int -> Playgrid -> [Player] +findDiag nums g = [g !! n !! n | n <- [0..nums-1]]--puts diagonal elements into a list + +-- !!Plan to add gridlines to the Playgrid output, thus two seperate row and player str of strings!! +--functions to print the grid +putPlaygrid :: Playgrid -> IO () +putPlaygrid = mapM_ (putStrLn . intercalate " " . map show) +-- For moves + +isValid :: Int -> Playgrid -> Int -> Bool +isValid nums g i = (i >= 0) && (i < (nums^2)) && (concat g !! i == B) + +move:: Int -> Playgrid -> Int -> Player -> [Playgrid]--changes the ith element of the playgrid (concatonated). +--Splits concatoated playgrid into parts before and after the ith element then merge those parts adding the player letter in between. +move nums g i p = -- nums is grid size, g is playgrid, i is move number entered and p is player (X or O) + if isValid nums g i then [cutt nums (xs ++ [p] ++ ys)] else []--cutt nums restores the concatonated list into lists of rows + where (xs,B:ys) = splitAt i (concat g)--splitAt splits list at i and makes a list containing those two split parts + +cutt :: Int -> [a] -> [[a]]--creates sublists of size n from original lists +cutt n [] = [] +cutt n xs = take n xs : cutt n (drop n xs)--takes n makes a list then takes n from the remainder and puts all those lists into a list + +--main function to take in grid size and runs gameloop +main :: IO () +main = do sizes <- getNum "Enter the grid size : " + timeIt $ gameloop sizes (blank sizes) O +--prints the playGrid and calls gameloop' +gameloop :: Int -> Playgrid -> Player -> IO () +gameloop sizes g p = do putPlaygrid g + gameloop' sizes g p +--checks game terminate conditions and continues game if not true +gameloop' :: Int -> Playgrid -> Player -> IO () +gameloop' sizes g p + | wins sizes O g = putStrLn "Player O is winner!\n" + | wins sizes X g = putStrLn "Player X is winner!\n" + | full g = putStrLn "GAME DRAW!\n" + | otherwise = + do num <- getNum (prompts' p) + case move sizes g num p of--generates the new grid after num entered by player p + [] -> do putStrLn "Invalid Move" + gameloop' sizes g p + [g'] -> gameloop sizes g' (changeturn p) +--prompts user to enter move +prompts' :: Player -> String +prompts' p = "Player " ++ show p ++ ", enter your move: " + +data Tree a = Node a [Tree a] + deriving Show + +possiblemoves :: Int -> Playgrid -> Player -> [Playgrid] +possiblemoves size g p + | wins size p g = [] + | full g = [] + | otherwise = concat [move size g i p | i <- [0 .. ((size^2)-1)]] +-- move gives a single playgrid inside a list so to take that playgrid out of the list we need to concat + +gametree :: Int -> Playgrid -> Player -> Tree Playgrid +gametree size g p = Node g [ gametree size g' (changeturn p) | g' <- possiblemoves size g p] + +scorerow :: [Player] -> Int +scorerow row = getscore(foldl (\(score,countx,counto) player -> if (player == X ) then (score + (10^(countx+1)),countx+1,0) else if (player == O) then (score - 10^(counto+1),0,counto+1) else (score,0,0)) (0,0,0) (row)) + +findrow :: Int-> Int -> Int +findrow size x = x `div` size + +getrow :: Int -> Int -> Playgrid -> [Player] +getrow size x g = g!!(findrow size x) + +getscore (x,_,_) = x + +findcol :: Int -> Int -> Int +findcol size x = (x) `mod` size + +getcol :: Int -> Int -> Playgrid -> [Player] +getcol size x g = (transpose g)!!(findcol size x) + +scoreLeaddiag :: Int -> Int -> Playgrid -> Int +scoreLeaddiag size i g = if (i `elem` [0,(size+1)..((size^2) -1)]) then scorerow(findDiag size g) else 0 + +scoreOtherdiag :: Int -> Int -> Playgrid -> Int +scoreOtherdiag size i g = if (i `elem` [(size-1),(2*(size-1))..(size * (size-1))]) then scorerow(findDiag size (map reverse g)) else 0 + +scoregrid :: Int -> Int -> Playgrid -> Int +scoregrid i size g = scorerow (getrow size i g) + scorerow (getcol size i g) + scoreLeaddiag size i g + scoreOtherdiag size i g + +--scoreTree size (g,score,depth) playerturn limit = Node (g,score,depth) [Tree (g',score',depth-1) where g' = (possiblemoves size g playerturn)] + +gameStree :: Int -> (Playgrid,Int) -> Player -> Int-> Tree (Playgrid,Int) +gameStree size (g,score) p depth + | wins size X (getfirst (g,score)) = Node (g,scoreFGrid size g) [] + | wins size O (getfirst (g,score)) = Node (g,scoreFGrid size g) [] + | (depth > 0) = Node (g,score' size p g) [ gameStree size (g',score' size (changeturn p) g') (changeturn p) (depth-1)| g' <- possiblemoves size g p ] + | (depth == 0) = Node (g,scoreFGrid size g) []--[gameStree size (g',scoreFGrid size g') (changeturn p) | g' <- possiblemoves size g p ] + where score' size p g = if p==X then maxlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p ]) else minlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p]) +--or try score tree given a gametree +--given infor is size,playgrid,playerturn,score at that pt + +scoreFGrid :: Int -> Playgrid-> Int +scoreFGrid size g = (scorerowWise g) + (scorerowWise (transpose g)) + (scorerow(findDiag size g)) + (scorerow(findDiag size (map reverse g))) + +scorerowWise :: Playgrid -> Int +scorerowWise g = foldl (\acc row -> acc + scorerow row) 0 g + +maxlist :: Num a => Ord a => [a] -> a +maxlist p = foldl max 0 p + +minlist :: Num a => Ord a => [a] -> a +minlist p = foldl min 0 p + +getfirst :: (a,b) -> a +getfirst (x,y) = x + +getsecond :: (a,b) -> b +getsecond (x,y) = y + +--without using trees +gameMtree :: Int-> Player -> Int-> Playgrid-> (Playgrid,Int)--can be easily edited to add playerturn ton the tuple if required by future functions +gameMtree size p depth game + | (not (isover size game)) && (depth > 0) = if (p == X) then (game, maxlist $ map getsecond $ map (gameMtree size (changeturn p) (depth-1)) [g'| g' <- possiblemoves size game p ]) else (game, minlist $ map getsecond $ map (gameMtree size (changeturn p) (depth-1)) [g'| g' <- possiblemoves size game p ]) --Node (g,score' size p g) [ gameStree size (g',score' size (changeturn p) g') (changeturn p) (depth-1)| g' <- possiblemoves size g p ] + | (isover size game) || (depth == 0) = (game, scoreFGrid size game) --Node (g,scoreFGrid g) []--[gameStree size (g',scoreFGrid g') (changeturn p) | g' <- possiblemoves size g p ] + + +--move selector +automoveX :: Playgrid -> Int -> Int -> Playgrid +automoveX g size depth = getfirst $ getmaxpair $ map (gameMtree size O (depth)) [g'| g' <- possiblemoves size g X ] + +--have to create isover function +--need to check if we can apply getsecond directly over the result of gameMtree i.e. wether Node a [] is same as a. +--I expect it shouldn't be the same, so make a function that given a Tree data type, gets the node of the tree. +--create getfirst and getmaxpair + +getmaxpair :: Num b => Ord b=> [(a,b)] -> (a,b) +getmaxpair l = head [(a,b) | (a,b) <- l ] + where b = maxlist(map getsecond l) + +isover :: Int -> Playgrid -> Bool +isover size game = (wins size O game) || (wins size X game) From b5618ff7a3429e32606ff50146b134f0c766f758 Mon Sep 17 00:00:00 2001 From: sudsj Date: Fri, 14 Apr 2017 03:11:22 +0530 Subject: [PATCH 27/29] AI moves, but does not always win --- tictacai1.hs | 89 +++++++++++++++++++++++++++++----------------------- 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/tictacai1.hs b/tictacai1.hs index 6dc2c40..bb91ae4 100644 --- a/tictacai1.hs +++ b/tictacai1.hs @@ -6,7 +6,7 @@ import System.TimeIt -- Reading a number getNum :: String -> IO Int -getNum prompt = do putStr prompt +getNum prompt = do putStr prompt xs <- getLine if xs /= [] && all isDigit xs then return (read xs) @@ -77,6 +77,7 @@ gameloop' sizes g p | wins sizes O g = putStrLn "Player O is winner!\n" | wins sizes X g = putStrLn "Player X is winner!\n" | full g = putStrLn "GAME DRAW!\n" + | (p == X) = gameloop sizes (automoveX g sizes 10) O | otherwise = do num <- getNum (prompts' p) case move sizes g num p of--generates the new grid after num entered by player p @@ -97,49 +98,14 @@ possiblemoves size g p | otherwise = concat [move size g i p | i <- [0 .. ((size^2)-1)]] -- move gives a single playgrid inside a list so to take that playgrid out of the list we need to concat -gametree :: Int -> Playgrid -> Player -> Tree Playgrid -gametree size g p = Node g [ gametree size g' (changeturn p) | g' <- possiblemoves size g p] - scorerow :: [Player] -> Int scorerow row = getscore(foldl (\(score,countx,counto) player -> if (player == X ) then (score + (10^(countx+1)),countx+1,0) else if (player == O) then (score - 10^(counto+1),0,counto+1) else (score,0,0)) (0,0,0) (row)) -findrow :: Int-> Int -> Int -findrow size x = x `div` size - -getrow :: Int -> Int -> Playgrid -> [Player] -getrow size x g = g!!(findrow size x) - -getscore (x,_,_) = x - -findcol :: Int -> Int -> Int -findcol size x = (x) `mod` size - -getcol :: Int -> Int -> Playgrid -> [Player] -getcol size x g = (transpose g)!!(findcol size x) - -scoreLeaddiag :: Int -> Int -> Playgrid -> Int -scoreLeaddiag size i g = if (i `elem` [0,(size+1)..((size^2) -1)]) then scorerow(findDiag size g) else 0 - -scoreOtherdiag :: Int -> Int -> Playgrid -> Int -scoreOtherdiag size i g = if (i `elem` [(size-1),(2*(size-1))..(size * (size-1))]) then scorerow(findDiag size (map reverse g)) else 0 - -scoregrid :: Int -> Int -> Playgrid -> Int -scoregrid i size g = scorerow (getrow size i g) + scorerow (getcol size i g) + scoreLeaddiag size i g + scoreOtherdiag size i g - ---scoreTree size (g,score,depth) playerturn limit = Node (g,score,depth) [Tree (g',score',depth-1) where g' = (possiblemoves size g playerturn)] - -gameStree :: Int -> (Playgrid,Int) -> Player -> Int-> Tree (Playgrid,Int) -gameStree size (g,score) p depth - | wins size X (getfirst (g,score)) = Node (g,scoreFGrid size g) [] - | wins size O (getfirst (g,score)) = Node (g,scoreFGrid size g) [] - | (depth > 0) = Node (g,score' size p g) [ gameStree size (g',score' size (changeturn p) g') (changeturn p) (depth-1)| g' <- possiblemoves size g p ] - | (depth == 0) = Node (g,scoreFGrid size g) []--[gameStree size (g',scoreFGrid size g') (changeturn p) | g' <- possiblemoves size g p ] - where score' size p g = if p==X then maxlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p ]) else minlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p]) ---or try score tree given a gametree ---given infor is size,playgrid,playerturn,score at that pt - scoreFGrid :: Int -> Playgrid-> Int -scoreFGrid size g = (scorerowWise g) + (scorerowWise (transpose g)) + (scorerow(findDiag size g)) + (scorerow(findDiag size (map reverse g))) +scoreFGrid size g + | wins size X g = 100000000000000000 + | wins size O g = -100000000000000000 + |otherwise = (scorerowWise g) + (scorerowWise (transpose g)) + (scorerow(findDiag size g)) + (scorerow(findDiag size (map reverse g))) scorerowWise :: Playgrid -> Int scorerowWise g = foldl (\acc row -> acc + scorerow row) 0 g @@ -178,3 +144,46 @@ getmaxpair l = head [(a,b) | (a,b) <- l ] isover :: Int -> Playgrid -> Bool isover size game = (wins size O game) || (wins size X game) +--------------------------------------------------------------------------------------------------------------------- +--unused code + + +gametree :: Int -> Playgrid -> Player -> Tree Playgrid +gametree size g p = Node g [ gametree size g' (changeturn p) | g' <- possiblemoves size g p] + +findrow :: Int-> Int -> Int +findrow size x = x `div` size + +getrow :: Int -> Int -> Playgrid -> [Player] +getrow size x g = g!!(findrow size x) + +getscore (x,_,_) = x + +findcol :: Int -> Int -> Int +findcol size x = (x) `mod` size + +getcol :: Int -> Int -> Playgrid -> [Player] +getcol size x g = (transpose g)!!(findcol size x) + + + +scoreLeaddiag :: Int -> Int -> Playgrid -> Int +scoreLeaddiag size i g = if (i `elem` [0,(size+1)..((size^2) -1)]) then scorerow(findDiag size g) else 0 + +scoreOtherdiag :: Int -> Int -> Playgrid -> Int +scoreOtherdiag size i g = if (i `elem` [(size-1),(2*(size-1))..(size * (size-1))]) then scorerow(findDiag size (map reverse g)) else 0 + +scoregrid :: Int -> Int -> Playgrid -> Int +scoregrid i size g = scorerow (getrow size i g) + scorerow (getcol size i g) + scoreLeaddiag size i g + scoreOtherdiag size i g + +--scoreTree size (g,score,depth) playerturn limit = Node (g,score,depth) [Tree (g',score',depth-1) where g' = (possiblemoves size g playerturn)] + +gameStree :: Int -> (Playgrid,Int) -> Player -> Int-> Tree (Playgrid,Int) +gameStree size (g,score) p depth + | wins size X (getfirst (g,score)) = Node (g,scoreFGrid size g) [] + | wins size O (getfirst (g,score)) = Node (g,scoreFGrid size g) [] + | (depth > 0) = Node (g,score' size p g) [ gameStree size (g',score' size (changeturn p) g') (changeturn p) (depth-1)| g' <- possiblemoves size g p ] + | (depth == 0) = Node (g,scoreFGrid size g) []--[gameStree size (g',scoreFGrid size g') (changeturn p) | g' <- possiblemoves size g p ] + where score' size p g = if p==X then maxlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p ]) else minlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p]) +--or try score tree given a gametree +--given infor is size,playgrid,playerturn,score at that pt From dd832d2bb52082d252b2c241d8fd610554e9779f Mon Sep 17 00:00:00 2001 From: sudsj Date: Tue, 18 Apr 2017 00:49:07 +0530 Subject: [PATCH 28/29] AI FINALLY WORKING --- tictacai1.hs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/tictacai1.hs b/tictacai1.hs index bb91ae4..42d4cd2 100644 --- a/tictacai1.hs +++ b/tictacai1.hs @@ -2,6 +2,8 @@ import Data.Char import Data.List import System.IO import Data.Int +import Data.Ord +import Data.Function import System.TimeIt -- Reading a number @@ -125,25 +127,31 @@ getsecond (x,y) = y --without using trees gameMtree :: Int-> Player -> Int-> Playgrid-> (Playgrid,Int)--can be easily edited to add playerturn ton the tuple if required by future functions gameMtree size p depth game - | (not (isover size game)) && (depth > 0) = if (p == X) then (game, maxlist $ map getsecond $ map (gameMtree size (changeturn p) (depth-1)) [g'| g' <- possiblemoves size game p ]) else (game, minlist $ map getsecond $ map (gameMtree size (changeturn p) (depth-1)) [g'| g' <- possiblemoves size game p ]) --Node (g,score' size p g) [ gameStree size (g',score' size (changeturn p) g') (changeturn p) (depth-1)| g' <- possiblemoves size g p ] - | (isover size game) || (depth == 0) = (game, scoreFGrid size game) --Node (g,scoreFGrid g) []--[gameStree size (g',scoreFGrid g') (changeturn p) | g' <- possiblemoves size g p ] + | (not (isover size game)) && (depth > 0) = if (p == X) then (game, maxlist $ map getsecond $ map (gameMtree size (changeturn p) (depth-1)) [g'| g' <- possiblemoves size game p ]) else (game, minlist $ map getsecond $ map (gameMtree size (changeturn p) (depth-1)) [g'| g' <- possiblemoves size game p ]) + | (isover size game) || (depth == 0) = (game, scoreFGrid size game) --move selector automoveX :: Playgrid -> Int -> Int -> Playgrid -automoveX g size depth = getfirst $ getmaxpair $ map (gameMtree size O (depth)) [g'| g' <- possiblemoves size g X ] +automoveX g size depth = getfirst $ getMaxpair $ map (gameMtree size O (depth)) [g'| g' <- possiblemoves size g X ] + + +showmoves g size depth = (map (gameMtree size O (depth)) [g'| g' <- possiblemoves size g X ]) --have to create isover function --need to check if we can apply getsecond directly over the result of gameMtree i.e. wether Node a [] is same as a. --I expect it shouldn't be the same, so make a function that given a Tree data type, gets the node of the tree. --create getfirst and getmaxpair -getmaxpair :: Num b => Ord b=> [(a,b)] -> (a,b) -getmaxpair l = head [(a,b) | (a,b) <- l ] - where b = maxlist(map getsecond l) +-- +getMaxpair :: [(Playgrid,Int)] -> (Playgrid,Int) +getMaxpair l = maximumBy (comparing snd) l + +--getmaxpair' :: [(Playgrid,Int)] -> (Playgrid,Int) +--getmaxpair' l = fst (maximumBy (compare `on` snd) l) isover :: Int -> Playgrid -> Bool -isover size game = (wins size O game) || (wins size X game) +isover size game = (wins size O game) || (wins size X game) || full game --------------------------------------------------------------------------------------------------------------------- --unused code @@ -187,3 +195,7 @@ gameStree size (g,score) p depth where score' size p g = if p==X then maxlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p ]) else minlist (map (scoreFGrid size) [g'| g' <- possiblemoves size g p]) --or try score tree given a gametree --given infor is size,playgrid,playerturn,score at that pt +--Function didn't give correct value in some cases! +getmaxpair ::[(Playgrid,Int)] -> (Playgrid,Int) +getmaxpair l = head [(a,b) | (a,b) <- l ] + where b = maxlist(map getsecond l) \ No newline at end of file From b72d6df4b7e3372be5f36d76ba22afca35e38169 Mon Sep 17 00:00:00 2001 From: Sudhanshu Jaiswal Date: Sun, 20 Aug 2017 19:19:07 +0530 Subject: [PATCH 29/29] Create README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ebd61f4 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# ACA_Haskell +ACA Project Haskell + +tictacai1.hs contains the final working code