aboutsummaryrefslogtreecommitdiff
path: root/challenge-072
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-08-09 14:43:06 +0100
committerGitHub <noreply@github.com>2020-08-09 14:43:06 +0100
commita19e112dfbb381c0eba195d20c608e3138a6288f (patch)
treee3b148bd7ec5c3e8086ba4bbd676f56bad0501f2 /challenge-072
parent7853424cb05f0bb85ecb552661571ef3056d1bfe (diff)
parent5d7ff3b80829bb9353d30fceda6cb3a204e527a9 (diff)
downloadperlweeklychallenge-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.hs31
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'