Last active
November 8, 2017 09:19
-
-
Save ilya-murzinov/6d85d830403e2619d8d491b9cd35e497 to your computer and use it in GitHub Desktop.
merge.hs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
merge :: Integer -> Integer -> Integer | |
merge i1 i2 = merge' i1 i2 (length i1) (length i2) 0 | |
where | |
merge' _ _ 0 0 acc = acc | |
merge' _ i2' 0 l2 acc = acc * 10 ^ l2 + i2' | |
merge' i1' _ l1 0 acc = acc * 10 ^ l1 + i1' | |
merge' i1' i2' l1 l2 acc = merge' rest1 rest2 (l1 - 1) (l2 - 1) acc' | |
where | |
(first1, rest1) = split i1' l1 | |
(first2, rest2) = split i2' l2 | |
acc' = acc * 10 ^ 2 + first1 * 10 + first2 | |
split :: Integer -> Integer -> (Integer, Integer) | |
split i l = (first, rest) | |
where | |
rest = (i `mod` 10 ^ (l - 1)) | |
first = (i - rest) `div` 10 ^ (l - 1) | |
length :: Integer -> Integer | |
length i = length' i 1 | |
length' i acc = case i - 10 ^ acc of | |
d | d < 0 -> acc | |
_ -> length' i (acc + 1) | |
main :: IO () | |
main = print $ merge 111111111111111111111111111111111111111111111111 222222222222222222222222222222222222222222222222222222222222 | |
-- $ stack ghci | |
-- Configuring GHCi with the following packages: | |
-- GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help | |
-- Loaded GHCi configuration from /private/var/folders/v5/16cv223x5lb09z8cw__tk5v80000gn/T/ghci7780/ghci-script | |
-- Prelude> :l merge.hs | |
-- [1 of 1] Compiling Main ( merge.hs, interpreted ) | |
-- Ok, modules loaded: Main. | |
-- *Main> main | |
-- 121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212222222222222 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment