aboutsummaryrefslogtreecommitdiff
path: root/challenge-080/aviral-goel/haskell/ch-1.hs
blob: c763a37560e052bed0b314347d80685be41640cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import Text.Megaparsec
import Data.Void (Void)
import Text.Megaparsec.Char
import Text.Megaparsec.Char.Lexer (signed, lexeme, decimal)
import System.Environment (getArgs)
import Data.Maybe (fromMaybe)
import Data.List ((\\))


smallestPositiveInteger :: [Int] -> Int
smallestPositiveInteger xs = head ([1..] \\ xs)

type Parser = Parsec Void String

parseArray :: Parser [Int]
parseArray = char '(' *> space *> sepBy (signed space (lexeme space decimal)) (char ',' <* space) <* char ')'

main :: IO ()
main = do
  input <- fmap concat getArgs
  let array = parseMaybe parseArray input
  let array' = fromMaybe [1..] array
  putStrLn $ show $ smallestPositiveInteger array'