aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-09-15 16:05:26 +0100
committerGitHub <noreply@github.com>2020-09-15 16:05:26 +0100
commit9fe8e8251e7e6d2725ec5592b4ee3a804ae3390f (patch)
treeef85617a3bb90ec1f389e8b12a5d1cccdb43cad9
parent523483aac2851a2f9af2f416f4dacf7f579115fb (diff)
parentfca5d7df3072bc6d574b2dc71c2a80ee5a82359b (diff)
downloadperlweeklychallenge-club-9fe8e8251e7e6d2725ec5592b4ee3a804ae3390f.tar.gz
perlweeklychallenge-club-9fe8e8251e7e6d2725ec5592b4ee3a804ae3390f.tar.bz2
perlweeklychallenge-club-9fe8e8251e7e6d2725ec5592b4ee3a804ae3390f.zip
Merge pull request #2301 from jeongoon/master
[ch-078/jeongoon] add Haskell Solution
-rw-r--r--challenge-078/jeongoon/haskell/ch-1.hs17
-rw-r--r--challenge-078/jeongoon/haskell/ch-2.hs16
2 files changed, 33 insertions, 0 deletions
diff --git a/challenge-078/jeongoon/haskell/ch-1.hs b/challenge-078/jeongoon/haskell/ch-1.hs
new file mode 100644
index 0000000000..883e5c0eea
--- /dev/null
+++ b/challenge-078/jeongoon/haskell/ch-1.hs
@@ -0,0 +1,17 @@
+import System.Environment
+import Data.List (mapAccumR)
+import Data.Char (isNumber)
+import Data.Maybe (catMaybes)
+
+-- tested with: runhaskell ch-1.hs 9 10 7 5 6 1
+
+leaderElement [] = [0] -- challenge spec.
+leaderElement ls = (catMaybes.snd) $ mapAccumR revLeader (minimum ls) ls where
+ revLeader curLeader newElement
+ | curLeader <= newElement = (newElement, Just newElement)
+ | otherwise = (curLeader, Nothing)
+
+main = do
+ (print.leaderElement.catMaybes)
+ =<< map (\nStr -> if (all isNumber nStr) then Just(read nStr :: Int)
+ else Nothing ) `fmap` getArgs
diff --git a/challenge-078/jeongoon/haskell/ch-2.hs b/challenge-078/jeongoon/haskell/ch-2.hs
new file mode 100644
index 0000000000..04a6c6d5a8
--- /dev/null
+++ b/challenge-078/jeongoon/haskell/ch-2.hs
@@ -0,0 +1,16 @@
+import System.Environment
+import Data.List
+import Data.Char (isNumber)
+import Data.Maybe (catMaybes)
+
+-- tested with: runhaskell 7 4 2 6 3 / 1 3 4
+-- use any non-digit value as a separator between @A and @B
+
+unsafe_mapLeftRotate ls rotates =
+ scanl (\ls' n -> (drop n ls') ++ (take n ls')) ls rotates
+
+parseNumbers = catMaybes.map (\nStr -> if (all isNumber nStr)
+ then Just(read nStr:: Int) else Nothing)
+main = do (mapM_ print.tail.
+ uncurry unsafe_mapLeftRotate.(\(a,b) -> (a, parseNumbers b)))
+ =<< (span (all isNumber)) `fmap` getArgs