diff options
| author | Myoungjin JEON <jeongoon@gmail.com> | 2020-09-15 23:47:27 +1000 |
|---|---|---|
| committer | Myoungjin JEON <jeongoon@gmail.com> | 2020-09-15 23:47:27 +1000 |
| commit | fca5d7df3072bc6d574b2dc71c2a80ee5a82359b (patch) | |
| tree | b341d1681d8de3b605d811958d5556cd99855c38 | |
| parent | 4c475b30f0fea1fa091e972b4e9bf7cdf8749641 (diff) | |
| download | perlweeklychallenge-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.hs | 17 | ||||
| -rw-r--r-- | challenge-078/jeongoon/haskell/ch-2.hs | 16 |
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 |
