aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyoungjin JEON <jeongoon@gmail.com>2020-09-15 23:47:27 +1000
committerMyoungjin JEON <jeongoon@gmail.com>2020-09-15 23:47:27 +1000
commitfca5d7df3072bc6d574b2dc71c2a80ee5a82359b (patch)
treeb341d1681d8de3b605d811958d5556cd99855c38
parent4c475b30f0fea1fa091e972b4e9bf7cdf8749641 (diff)
downloadperlweeklychallenge-club-fca5d7df3072bc6d574b2dc71c2a80ee5a82359b.tar.gz
perlweeklychallenge-club-fca5d7df3072bc6d574b2dc71c2a80ee5a82359b.tar.bz2
perlweeklychallenge-club-fca5d7df3072bc6d574b2dc71c2a80ee5a82359b.zip
[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