Skip to content

Instantly share code, notes, and snippets.

@ilya-murzinov
Last active November 8, 2017 09:19
Show Gist options
  • Save ilya-murzinov/6d85d830403e2619d8d491b9cd35e497 to your computer and use it in GitHub Desktop.
Save ilya-murzinov/6d85d830403e2619d8d491b9cd35e497 to your computer and use it in GitHub Desktop.
merge.hs
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