Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
13
Task/Proper-divisors/Haskell/proper-divisors-1.hs
Normal file
13
Task/Proper-divisors/Haskell/proper-divisors-1.hs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import Data.Ord
|
||||
import Data.List
|
||||
|
||||
divisors :: (Integral a) => a -> [a]
|
||||
divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
putStrLn "divisors of 1 to 10:"
|
||||
mapM_ (print . divisors) [1 .. 10]
|
||||
putStrLn "a number with the most divisors within 1 to 20000 (number, count):"
|
||||
print $ maximumBy (comparing snd)
|
||||
[(n, length $ divisors n) | n <- [1 .. 20000]]
|
||||
26
Task/Proper-divisors/Haskell/proper-divisors-2.hs
Normal file
26
Task/Proper-divisors/Haskell/proper-divisors-2.hs
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import Data.List (maximumBy)
|
||||
import Data.Ord (comparing)
|
||||
import Data.Bool (bool)
|
||||
|
||||
properDivisors
|
||||
:: Integral a
|
||||
=> a -> [a]
|
||||
properDivisors n =
|
||||
let root = (floor . sqrt . fromIntegral) n
|
||||
lows = filter ((0 ==) . rem n) [1 .. root]
|
||||
in init (lows ++ bool id tail (n == root * root) (reverse (quot n <$> lows)))
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
putStrLn "Proper divisors of 1 to 10:"
|
||||
mapM_ (print . properDivisors) [1 .. 10]
|
||||
mapM_
|
||||
putStrLn
|
||||
[ ""
|
||||
, "A number in the range 1 to 20,000 with the most proper divisors,"
|
||||
, "as (number, count of proper divisors):"
|
||||
, ""
|
||||
]
|
||||
print $
|
||||
maximumBy (comparing snd) $
|
||||
(,) <*> (length . properDivisors) <$> [1 .. 20000]
|
||||
33
Task/Proper-divisors/Haskell/proper-divisors-3.hs
Normal file
33
Task/Proper-divisors/Haskell/proper-divisors-3.hs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
import Data.Numbers.Primes (primeFactors)
|
||||
import Data.List (group, maximumBy, sort)
|
||||
import Data.Ord (comparing)
|
||||
|
||||
properDivisors :: Int -> [Int]
|
||||
properDivisors =
|
||||
init . sort . foldr (
|
||||
flip ((<*>) . fmap (*)) . scanl (*) 1
|
||||
) [1] . group . primeFactors
|
||||
|
||||
---------------------------TEST----------------------------
|
||||
main :: IO ()
|
||||
main = do
|
||||
putStrLn $
|
||||
fTable "Proper divisors of [1..10]:" show show properDivisors [1 .. 10]
|
||||
mapM_
|
||||
putStrLn
|
||||
[ ""
|
||||
, "A number in the range 1 to 20,000 with the most proper divisors,"
|
||||
, "as (number, count of proper divisors):"
|
||||
, ""
|
||||
]
|
||||
print $
|
||||
maximumBy (comparing snd) $
|
||||
(,) <*> (length . properDivisors) <$> [1 .. 20000]
|
||||
|
||||
--------------------------DISPLAY--------------------------
|
||||
fTable :: String -> (a -> String) -> (b -> String) -> (a -> b) -> [a] -> String
|
||||
fTable s xShow fxShow f xs =
|
||||
let rjust n c = (drop . length) <*> (replicate n c ++)
|
||||
w = maximum (length . xShow <$> xs)
|
||||
in unlines $
|
||||
s : fmap (((++) . rjust w ' ' . xShow) <*> ((" -> " ++) . fxShow . f)) xs
|
||||
Loading…
Add table
Add a link
Reference in a new issue