aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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