aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-01-10 13:23:01 +0000
committerGitHub <noreply@github.com>2021-01-10 13:23:01 +0000
commit0afbbecdbbebc02b635ad1f2d16782eca7bc5385 (patch)
tree04c014f31231aa295da660b4dd70c7913d79421f
parent845536cc7a8cff2165026fe3b6373a85f4092d91 (diff)
parentce77013a94efeb17789e4163042a1d503d2d2177 (diff)
downloadperlweeklychallenge-club-0afbbecdbbebc02b635ad1f2d16782eca7bc5385.tar.gz
perlweeklychallenge-club-0afbbecdbbebc02b635ad1f2d16782eca7bc5385.tar.bz2
perlweeklychallenge-club-0afbbecdbbebc02b635ad1f2d16782eca7bc5385.zip
Merge pull request #3202 from stuart-little/stuart-little_009_haskell
1st commit on 009_haskell
-rwxr-xr-xchallenge-009/stuart-little/haskell/ch-1.hs9
-rwxr-xr-xchallenge-009/stuart-little/haskell/ch-2.hs32
2 files changed, 41 insertions, 0 deletions
diff --git a/challenge-009/stuart-little/haskell/ch-1.hs b/challenge-009/stuart-little/haskell/ch-1.hs
new file mode 100755
index 0000000000..18bd6437e0
--- /dev/null
+++ b/challenge-009/stuart-little/haskell/ch-1.hs
@@ -0,0 +1,9 @@
+#!/usr/bin/env runghc
+
+-- run <script>
+
+import Data.List (transpose,nub,)
+
+main = do
+ putStrLn ((show root) ++ " squares to " ++ (show sq)) where
+ (root,sq) = head $ dropWhile ((4 >=).length.(\x -> nub $ transpose [x] ).show.snd) $ zip [1..] $ map (\x -> x*x) [1..]
diff --git a/challenge-009/stuart-little/haskell/ch-2.hs b/challenge-009/stuart-little/haskell/ch-2.hs
new file mode 100755
index 0000000000..4042e1346c
--- /dev/null
+++ b/challenge-009/stuart-little/haskell/ch-2.hs
@@ -0,0 +1,32 @@
+#!/usr/bin/env runghc
+
+-- run <script> <space-separated numbers>
+
+import System.Environment (getArgs,)
+import Data.List (sort,nub,group,)
+
+rankWith :: (Eq a, Ord a) => ([Int] -> [Int]) -> [a] -> [(a,Int)]
+rankWith tally xs = zip (nub sorted) (tally $ map length $ group $ sorted) where
+ sorted = sort xs
+
+rankStd :: (Eq a, Ord a) => [a] -> [(a,Int)]
+rankStd = rankWith (scanl (+) 1)
+
+rankMod :: (Eq a, Ord a) => [a] -> [(a,Int)]
+rankMod = rankWith (scanl1 (+))
+
+rankDense :: (Eq a, Ord a) => [a] -> [(a,Int)]
+rankDense = rankWith ((scanl1 (+)).(map (const 1)))
+
+pp :: Show a => [(a,Int)] -> [String]
+pp xs = map (\(n,r) -> ((show n) ++ " -> Rank " ++ (show r))) xs
+
+main = do
+ args <- getArgs
+ let argsnum = map (read::String->Int) args
+ putStrLn "Standard Ranking:"
+ mapM_ putStrLn $ pp $ rankStd argsnum
+ putStrLn "Modified Ranking:"
+ mapM_ putStrLn $ pp $ rankMod argsnum
+ putStrLn "Dense Ranking:"
+ mapM_ putStrLn $ pp $ rankDense argsnum