aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Pankoff <ccntrq@screenri.de>2020-09-29 20:50:18 +0200
committerAlexander Pankoff <ccntrq@screenri.de>2020-10-04 15:42:50 +0200
commitc968277b34cbd8c950128796b46576db53a9c2fc (patch)
tree4523e43e85400e8aa8ea96e5513490c7e483844b
parent859f378d923eabc6959e510328cf89226648ab3c (diff)
downloadperlweeklychallenge-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/README10
-rw-r--r--challenge-080/alexander-pankoff/haskell/ch-1.hs27
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