tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
|
|
@ -0,0 +1,4 @@
|
|||
Prelude> Numeric.showIntAtBase 16 Char.intToDigit 42 ""
|
||||
"2a"
|
||||
Prelude> fst $ head $ Numeric.readInt 16 Char.isHexDigit Char.digitToInt "2a"
|
||||
42
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
import Data.List
|
||||
import Data.Char
|
||||
|
||||
toBase :: Int -> Int -> [Int]
|
||||
toBase b v = toBase' [] v where
|
||||
toBase' a 0 = a
|
||||
toBase' a v = toBase' (r:a) q where (q,r) = v `divMod` b
|
||||
|
||||
fromBase :: Int -> [Int] -> Int
|
||||
fromBase b ds = foldl' (\n k -> n * b + k) 0 ds
|
||||
|
||||
toAlphaDigits :: [Int] -> String
|
||||
toAlphaDigits = map convert where
|
||||
convert n | n < 10 = chr (n + ord '0')
|
||||
| otherwise = chr (n + ord 'a' - 10)
|
||||
|
||||
fromAlphaDigits :: String -> [Int]
|
||||
fromAlphaDigits = map convert where
|
||||
convert c | isDigit c = ord c - ord '0'
|
||||
| isUpper c = ord c - ord 'A' + 10
|
||||
| isLower c = ord c - ord 'a' + 10
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
*Main> toAlphaDigits $ toBase 16 $ 42
|
||||
"2a"
|
||||
*Main> fromBase 16 $ fromAlphaDigits $ "2a"
|
||||
42
|
||||
Loading…
Add table
Add a link
Reference in a new issue