aboutsummaryrefslogtreecommitdiff
path: root/challenge-002
diff options
context:
space:
mode:
authorAlexander Pankoff <ccntrq@screenri.de>2022-05-07 19:22:30 +0200
committerAlexander Pankoff <ccntrq@screenri.de>2022-05-07 19:22:30 +0200
commit68501c2735f3e992364a465f6427522fcf2a4ddf (patch)
tree419e0523250c2c59780af8b8df52e84298df0f60 /challenge-002
parent26122bcb7444cc1ea4a620589cd078689ac05505 (diff)
downloadperlweeklychallenge-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.hs7
-rw-r--r--challenge-002/alexander-pankoff/haskell/ch-2.hs30
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