diff options
| author | Alexander Pankoff <ccntrq@screenri.de> | 2022-05-07 19:22:30 +0200 |
|---|---|---|
| committer | Alexander Pankoff <ccntrq@screenri.de> | 2022-05-07 19:22:30 +0200 |
| commit | 68501c2735f3e992364a465f6427522fcf2a4ddf (patch) | |
| tree | 419e0523250c2c59780af8b8df52e84298df0f60 /challenge-002 | |
| parent | 26122bcb7444cc1ea4a620589cd078689ac05505 (diff) | |
| download | perlweeklychallenge-club-68501c2735f3e992364a465f6427522fcf2a4ddf.tar.gz perlweeklychallenge-club-68501c2735f3e992364a465f6427522fcf2a4ddf.tar.bz2 perlweeklychallenge-club-68501c2735f3e992364a465f6427522fcf2a4ddf.zip | |
Add haskell solutions for challenge 2
Diffstat (limited to 'challenge-002')
| -rw-r--r-- | challenge-002/alexander-pankoff/haskell/ch-1.hs | 7 | ||||
| -rw-r--r-- | challenge-002/alexander-pankoff/haskell/ch-2.hs | 30 |
2 files changed, 37 insertions, 0 deletions
diff --git a/challenge-002/alexander-pankoff/haskell/ch-1.hs b/challenge-002/alexander-pankoff/haskell/ch-1.hs new file mode 100644 index 0000000000..c8f7230d79 --- /dev/null +++ b/challenge-002/alexander-pankoff/haskell/ch-1.hs @@ -0,0 +1,7 @@ +module Main where + +main :: IO () +main = interact removeLeadingZeros + +removeLeadingZeros :: String -> String +removeLeadingZeros = dropWhile (== '0') diff --git a/challenge-002/alexander-pankoff/haskell/ch-2.hs b/challenge-002/alexander-pankoff/haskell/ch-2.hs new file mode 100644 index 0000000000..f3d8b76ca6 --- /dev/null +++ b/challenge-002/alexander-pankoff/haskell/ch-2.hs @@ -0,0 +1,30 @@ +module Main where + +import Control.Monad (zipWithM) +import Data.List (elemIndex) + +main :: IO () +main = do + print $ toBase35 10 + print $ toBase35 36 + print $ fromBase35 "A" + print $ fromBase35 "11" + print $ fromBase35 "10" + +base35Alphabet :: [Char] +base35Alphabet = ['0' .. '9'] ++ ['A' .. 'Y'] + +toBase35 :: Int -> String +toBase35 x = go "" x + where + go acc 0 = acc + go acc x = go (base35Alphabet !! (x `mod` 35) : acc) (x `div` 35) + +fromBase35 :: [Char] -> Maybe Int +fromBase35 = + fmap sum + . zipWithM (\i c -> (*) (35 ^ i) <$> base35DigitToInt c) [0 ..] + . reverse + +base35DigitToInt :: Char -> Maybe Int +base35DigitToInt c = elemIndex c base35Alphabet |
