diff options
| author | Alexander Pankoff <ccntrq@screenri.de> | 2020-09-29 20:50:18 +0200 |
|---|---|---|
| committer | Alexander Pankoff <ccntrq@screenri.de> | 2020-10-04 15:42:50 +0200 |
| commit | c968277b34cbd8c950128796b46576db53a9c2fc (patch) | |
| tree | 4523e43e85400e8aa8ea96e5513490c7e483844b | |
| parent | 859f378d923eabc6959e510328cf89226648ab3c (diff) | |
| download | perlweeklychallenge-club-c968277b34cbd8c950128796b46576db53a9c2fc.tar.gz perlweeklychallenge-club-c968277b34cbd8c950128796b46576db53a9c2fc.tar.bz2 perlweeklychallenge-club-c968277b34cbd8c950128796b46576db53a9c2fc.zip | |
add haskell solution for wk-080 ch-1
| -rw-r--r-- | challenge-080/alexander-pankoff/README | 10 | ||||
| -rw-r--r-- | challenge-080/alexander-pankoff/haskell/ch-1.hs | 27 |
2 files changed, 34 insertions, 3 deletions
diff --git a/challenge-080/alexander-pankoff/README b/challenge-080/alexander-pankoff/README index f1aacf3dba..a74e2fd1ec 100644 --- a/challenge-080/alexander-pankoff/README +++ b/challenge-080/alexander-pankoff/README @@ -1,6 +1,10 @@ Solution by Alexander Pankoff -# ch-1 +# Run the Haskell solution -Aproach taken from: -https://www.geeksforgeeks.org/count-total-set-bits-in-all-numbers-from-1-to-n/ +With a `ghc` installation you can run the haskell solution with `runghc` + +``` +$ runghc haskell/ch-1.hs 1 2 3 -1 4 +5 +``` diff --git a/challenge-080/alexander-pankoff/haskell/ch-1.hs b/challenge-080/alexander-pankoff/haskell/ch-1.hs new file mode 100644 index 0000000000..d27f32fdd7 --- /dev/null +++ b/challenge-080/alexander-pankoff/haskell/ch-1.hs @@ -0,0 +1,27 @@ +import System.Environment (getArgs) +import Data.List (find) +import qualified Data.Set as Set + +type IntegerSet = Set.Set Integer + +main :: IO () +main = do + inputSet <- Set.fromList <$> (readInteger <<$>> getArgs) + let maybeMissing = smallestMissingPositiveNumber inputSet + maybe + (fail "no smallest missing number found.") + print + maybeMissing + where + readInteger :: String -> Integer + readInteger = read + +smallestMissingPositiveNumber :: IntegerSet -> Maybe Integer +smallestMissingPositiveNumber set = find (not . inSet) [1..] + where + inSet = (`Set.member` set) + +infixl 4 <<$>> + +(<<$>>) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) +(<<$>>) = fmap . fmap |
