diff options
| author | Myoungjin JEON <jeongoon@gmail.com> | 2020-08-08 13:53:17 +1000 |
|---|---|---|
| committer | Myoungjin JEON <jeongoon@gmail.com> | 2020-08-08 13:53:17 +1000 |
| commit | 4957f1164ef7ad7670289dc63013ea80adc4f974 (patch) | |
| tree | 7963c47bd9788dc61bb244de808fb4406a6efbda | |
| parent | c0c7f8ec8494b7a64edad9f8b8e959b73c6766fa (diff) | |
| download | perlweeklychallenge-club-4957f1164ef7ad7670289dc63013ea80adc4f974.tar.gz perlweeklychallenge-club-4957f1164ef7ad7670289dc63013ea80adc4f974.tar.bz2 perlweeklychallenge-club-4957f1164ef7ad7670289dc63013ea80adc4f974.zip | |
[ch-071/jeongoon] add brute force method of haskell for task 1
| -rw-r--r-- | challenge-072/jeongoon/haskell/ch-1.hs | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/challenge-072/jeongoon/haskell/ch-1.hs b/challenge-072/jeongoon/haskell/ch-1.hs index 0775791436..7780f3ba55 100644 --- a/challenge-072/jeongoon/haskell/ch-1.hs +++ b/challenge-072/jeongoon/haskell/ch-1.hs @@ -15,30 +15,37 @@ https://stackoverflow.com/questions/940382/what-is-the-difference-between-dot-an ... and many more.. --} -factorial :: Integer -> Integer -factorial x = product [ 1.. x ] +factorial :: Int -> Integer +factorial x = product [ 1.. fromIntegral x ] -nthRootOfFive :: Integer -> Integer +nthRootOfFive :: Integer -> Int nthRootOfFive x | x `mod` 5 /= 0 = 0 | otherwise = 1 + nthRootOfFive ( x `div` 5 ) - -getN :: [String] -> Integer +getN :: [String] -> Int getN [] = 0 -getN (x:xs) = if all isNumber x then read x :: Integer else getN xs +getN (x:xs) = if all isNumber x then read x :: Int else getN xs -printGenTrim :: [String] -> Integer -> Integer -> IO () +printGenTrim :: [String] -> Int -> Int-> IO () printGenTrim x n a | ( "--show-divided" `elem` x ) = do putStrLn $ "N! = " ++ fnstr putStrLn $ "N! = " ++ take h fnstr ++ " | " ++ drop h fnstr | otherwise = return () where - fnstr = show $ factorial $ n + fnstr = show $ factorial n a' = fromIntegral a h = length fnstr - a' +calculateTrailingZero :: Int -> Int +calculateTrailingZero n = sum [ nthRootOfFive $ fromIntegral x | x <- [1 .. n] ] + +bruteforceTrailingZero :: Int -> Int +bruteforceTrailingZero n = + length $ takeWhile (\x -> nFact `mod` x == 0) (map (10^) [(1::Integer)..]) + where nFact = factorial $ fromIntegral n + main :: IO () main = do args <- getArgs -- IO [String] @@ -56,7 +63,9 @@ main = do else die "Could not find N (Not given or Invalid)" - putStrLn $ "Given Number: " ++ show n - let answer = sum [ nthRootOfFive x | x <- [ 1 .. n ] ] + putStrLn $ "Given Number: " ++ show n + let answer = calculateTrailingZero n + let answer' = bruteforceTrailingZero n printGenTrim args n answer - putStrLn $ "Answer: " ++ show answer + putStrLn $ "Calcuated: " ++ show answer + putStrLn $ "BruteForced: " ++ show answer' |
