Skip to content

Commit 9110b10

Browse files
committed
Solve 'Count Repeats' kata
1 parent 10b702f commit 9110b10

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

src/CountRepeats.hs

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module CountRepeats where
2+
3+
-- https://www.codewars.com/kata/598ee7b6ec6cb90dd6000061/train/haskell
4+
5+
import Data.List (group)
6+
7+
countRepeats :: String -> Int
8+
countRepeats = sum . map (pred . length) . group

test/CountRepeatsSpec.hs

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
module CountRepeatsSpec where
2+
3+
import CountRepeats (countRepeats)
4+
import Test.Hspec
5+
6+
spec :: Spec
7+
spec = do
8+
describe "Fixed Tests" $ do
9+
it "Works when there are no repeats" $ do
10+
countRepeats "abcdefg" `shouldBe` 0
11+
it "Works when characters are repeated" $ do
12+
countRepeats "aabbccddeeffgg" `shouldBe` 7
13+
countRepeats "abcdeefee" `shouldBe` 2
14+
countRepeats "122453124" `shouldBe` 1
15+
it "Works with special characters" $ do
16+
countRepeats "@*$##^^^*)*" `shouldBe` 3
17+
it "Works for a long string" $ do
18+
countRepeats
19+
"abmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\
20+
\mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmvxxxxxxxxxxxxxxxxxxxx\
21+
\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
22+
\xxxxxxxxxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
23+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
24+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
25+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
26+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
27+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
28+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
29+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
30+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
31+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
32+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
33+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\
34+
\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
35+
`shouldBe` 1177

0 commit comments

Comments
 (0)