diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-08-09 14:43:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-09 14:43:06 +0100 |
| commit | a19e112dfbb381c0eba195d20c608e3138a6288f (patch) | |
| tree | e3b148bd7ec5c3e8086ba4bbd676f56bad0501f2 /challenge-072 | |
| parent | 7853424cb05f0bb85ecb552661571ef3056d1bfe (diff) | |
| parent | 5d7ff3b80829bb9353d30fceda6cb3a204e527a9 (diff) | |
| download | perlweeklychallenge-club-a19e112dfbb381c0eba195d20c608e3138a6288f.tar.gz perlweeklychallenge-club-a19e112dfbb381c0eba195d20c608e3138a6288f.tar.bz2 perlweeklychallenge-club-a19e112dfbb381c0eba195d20c608e3138a6288f.zip | |
Merge pull request #2053 from jeongoon/ch-072
[ch-072/jeongoon] add brute force method for haskell/ch-1.hs; add Haskell for [ch-069:Task1]
Diffstat (limited to 'challenge-072')
| -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' |
