trackler 2.0.6.27 → 2.0.6.28

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f44a2c9604c64484b58ce22ce105bd7bea52ffe
4
- data.tar.gz: 3177a1c2f82f2e04350ac643483b9b38dd755a4a
3
+ metadata.gz: 736e4db3e2429c9b67fb27e87f41a30a6132a752
4
+ data.tar.gz: 1eb49babc9e28e63b04bfbd2cedeef4912fc776c
5
5
  SHA512:
6
- metadata.gz: 2b4094bb8039ce5119ebe82697293d4cfe6cc64de64f7c966229c761555efb031fd52ed1ef714bde8c341b9202a8a2acd7fef6c31b6259458eeb6ed2c364c25e
7
- data.tar.gz: f432c8db81efd858e159baaab5a33397acab0edf7339c5e17579e4eb2dd3058a21bb6670804e9c0197a6b8e6776953402d8a2b0e3b33792908c9c34258238d51
6
+ metadata.gz: b530e182140aad12d98661877c4adec3caedb925da0c1e57811026cb6addd88d53a61f3685e9881b662434ae0e7466abbc34686c7467cb8c5c82efcdbaec07cb
7
+ data.tar.gz: 3a2a7504e6a45ae664f5d013a57bd44a4e93866f040bbcf2c9bf17993fe60cf02be5b1aad47959f6039e66b0bbca21bd006e92abe81aae2585f4d1aacd7de949
@@ -46,11 +46,6 @@
46
46
  "description": "encode all the letters",
47
47
  "phrase": "The quick brown fox jumps over the lazy dog.",
48
48
  "expected": "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
49
- },
50
- {
51
- "description": "encode ignores non ascii",
52
- "phrase": "non ascii éignored",
53
- "expected": "mlmzh xrrrt mlivw"
54
49
  }
55
50
  ]
56
51
  },
@@ -308,13 +308,6 @@
308
308
  ],
309
309
  "expected": [1, 1]
310
310
  },
311
- {
312
- "description": "can consist of arbitrary characters such as Unicode characters",
313
- "input": [
314
- ": € 220371 ; €"
315
- ],
316
- "expected": [220371]
317
- },
318
311
  {
319
312
  "description": "cannot redefine numbers",
320
313
  "input": [
@@ -14,7 +14,7 @@ To keep things simple the only data type you need to support is signed
14
14
  integers of at least 16 bits size.
15
15
 
16
16
  You should use the following rules for the syntax: a number is a
17
- sequence of one or more (unicode) digits, a word is a sequence of one or
17
+ sequence of one or more (ASCII) digits, a word is a sequence of one or
18
18
  more letters, digits, symbols or punctuation that is not a number.
19
19
  (Forth probably uses slightly different rules, but this is close
20
20
  enough.)
@@ -13,3 +13,6 @@ the compressed data, which makes it a lossless data compression.
13
13
  ```
14
14
  "AABCCCDEEEE" -> "2AB3CD4E" -> "AABCCCDEEEE"
15
15
  ```
16
+
17
+ For simplicity, you can assume that the unencoded string will only contain
18
+ the letters A through Z.
@@ -45,11 +45,6 @@
45
45
  "input": "pinata",
46
46
  "expected": 8
47
47
  },
48
- {
49
- "description": "non-english letter is not scored",
50
- "input": "piñata",
51
- "expected": 7
52
- },
53
48
  {
54
49
  "description": "empty input",
55
50
  "input": "",
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.6.27"
2
+ VERSION = "2.0.6.28"
3
3
  end
@@ -6,6 +6,8 @@ import (
6
6
  "testing"
7
7
  )
8
8
 
9
+ const targetTestVersion = 1
10
+
9
11
  func echo(c string) string {
10
12
  return c
11
13
  }
@@ -26,6 +28,12 @@ var tests = []struct {
26
28
  {[]string{"HELLO", "WORLD"}, []string{"hello", "world"}, strings.ToUpper, "strings.ToUpper"},
27
29
  }
28
30
 
31
+ func TestTestVersion(t *testing.T) {
32
+ if testVersion != targetTestVersion {
33
+ t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
34
+ }
35
+ }
36
+
29
37
  func TestAccumulate(t *testing.T) {
30
38
  for _, test := range tests {
31
39
  actual := Accumulate(test.given, test.converter)
@@ -1,5 +1,7 @@
1
1
  package accumulate
2
2
 
3
+ const testVersion = 1
4
+
3
5
  func Accumulate(s []string, f func(st string) string) (result []string) {
4
6
  for _, v := range s {
5
7
  result = append(result, []string{f(v)}...)
@@ -12,24 +12,23 @@ main = hspecWith defaultConfig {configFastFail = True} specs
12
12
  specs :: Spec
13
13
  specs = describe "etl" $
14
14
 
15
- -- As of 2016-07-27, there was no reference file
16
- -- for the test cases in `exercism/x-common`.
15
+ -- Test cases adapted from `exercism/x-common/etl` on 2017-01-31.
17
16
 
18
17
  describe "transform" $ do
19
18
 
20
- it "transform one value" $
19
+ it "a single letter" $
21
20
  transform (fromList [(1, "A")])
22
21
  `shouldBe` fromList [('a', 1)]
23
22
 
24
- it "transform multiple keys from one value" $
25
- transform (fromList [(1, "AE")])
26
- `shouldBe` fromList [('a', 1), ('e', 1)]
23
+ it "single score with multiple letters" $
24
+ transform (fromList [(1, "AEIOU")])
25
+ `shouldBe` fromList [('a', 1), ('e', 1), ('i', 1), ('o', 1), ('u', 1)]
27
26
 
28
- it "transform multiple keys from multiple values" $
29
- transform (fromList [(1, "A"), (4, "B")])
30
- `shouldBe` fromList [('a', 1), ('b', 4)]
27
+ it "multiple scores with multiple letters" $
28
+ transform (fromList [(1, "AE"), (2, "DG")])
29
+ `shouldBe` fromList [('a', 1), ('e', 1), ('d', 2), ('g', 2)]
31
30
 
32
- it "full dataset" $
31
+ it "multiple scores with differing numbers of letters" $
33
32
  transform (fromList fullInput)
34
33
  `shouldBe` fromList fullOutput
35
34
 
@@ -1,28 +1,11 @@
1
- module Phone (number, areaCode, prettyPrint) where
2
- import Data.Char (isDigit)
1
+ module Phone (number) where
2
+ import Data.Char (isDigit, isLetter)
3
3
 
4
4
  number :: String -> Maybe String
5
5
  number input
6
+ | any isLetter input = Nothing
6
7
  | len == 10 = Just digits
7
8
  | len == 11 && head digits == '1' = Just $ tail digits
8
9
  | otherwise = Nothing
9
10
  where digits = filter isDigit input
10
11
  len = length digits
11
-
12
- parts :: String -> Maybe (String, String, String)
13
- parts input = case number input of
14
- Nothing -> Nothing
15
- Just digits -> Just (ac, exchange, subscriber)
16
- where
17
- (ac, exchangeSubscriber) = splitAt 3 digits
18
- (exchange, subscriber) = splitAt 3 exchangeSubscriber
19
-
20
- areaCode :: String -> Maybe String
21
- areaCode input = case parts input of
22
- Just (ac, _, _) -> Just ac
23
- Nothing -> Nothing
24
-
25
- prettyPrint :: String -> Maybe String
26
- prettyPrint input = case parts input of
27
- Just (ac, exchange, subscriber) -> Just $ "(" ++ ac ++ ") " ++ exchange ++ "-" ++ subscriber
28
- Nothing -> Nothing
@@ -1,10 +1,4 @@
1
- module Phone (areaCode, number, prettyPrint) where
2
-
3
- areaCode :: String -> Maybe String
4
- areaCode = error "You need to implement this function."
1
+ module Phone (number) where
5
2
 
6
3
  number :: String -> Maybe String
7
4
  number = error "You need to implement this function."
8
-
9
- prettyPrint :: String -> Maybe String
10
- prettyPrint = error "You need to implement this function."
@@ -4,115 +4,64 @@ import Data.Foldable (for_)
4
4
  import Test.Hspec (Spec, describe, it, shouldBe)
5
5
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
6
6
 
7
- import Phone (areaCode, number, prettyPrint)
7
+ import Phone (number)
8
8
 
9
9
  main :: IO ()
10
10
  main = hspecWith defaultConfig {configFastFail = True} specs
11
11
 
12
12
  specs :: Spec
13
- specs = describe "phone-number" $ do
14
- describe "number" $ for_ numberCases $ test number
15
- describe "areaCode" $ for_ areaCodeCases $ test areaCode
16
- describe "prettyPrint" $ for_ prettyPrintCases $ test prettyPrint
13
+ specs = describe "phone-number" $
14
+ describe "number" $ for_ cases test
17
15
  where
18
- test f Case{..} = it description $ f input `shouldBe` expected
16
+ test Case{..} = it description $ number input `shouldBe` expected
19
17
 
20
- -- As of 2016-07-27, there was no reference file
21
- -- for the test cases in `exercism/x-common`.
18
+ -- Test cases adapted from `exercism/x-common/phone-number` on 2017-01-31.
22
19
 
23
20
  data Case = Case { description :: String
24
21
  , input :: String
25
22
  , expected :: Maybe String
26
23
  }
27
24
 
28
- numberCases :: [Case]
29
- numberCases =
30
- [ Case { description = "cleans number"
25
+ cases :: [Case]
26
+ cases =
27
+ [ Case { description = "cleans the number"
31
28
  , input = "(123) 456-7890"
32
29
  , expected = Just "1234567890"
33
30
  }
34
- , Case { description = "cleans another number"
35
- , input = "(612) 555-1212"
36
- , expected = Just "6125551212"
37
- }
38
31
  , Case { description = "cleans number with dots"
39
32
  , input = "123.456.7890"
40
33
  , expected = Just "1234567890"
41
34
  }
42
- , Case { description = "cleans another number with dots"
43
- , input = "918.765.4321"
44
- , expected = Just "9187654321"
35
+ , Case { description = "cleans numbers with multiple spaces"
36
+ , input = "123 456 7890 "
37
+ , expected = Just "1234567890"
45
38
  }
46
- , Case { description = "valid when 11 digits and first is 1"
47
- , input = "12468013579"
48
- , expected = Just "2468013579"
39
+ , Case { description = "invalid when 9 digits"
40
+ , input = "123456789"
41
+ , expected = Nothing
49
42
  }
50
43
  , Case { description = "invalid when 11 digits"
51
44
  , input = "21234567890"
52
45
  , expected = Nothing
53
46
  }
54
- , Case { description = "invalid when 9 digits"
55
- , input = "123456789"
56
- , expected = Nothing
47
+ , Case { description = "valid when 11 digits and first is 1"
48
+ , input = "11234567890"
49
+ , expected = Just "1234567890"
57
50
  }
58
51
  , Case { description = "invalid when 12 digits"
59
- , input = "123456789012"
52
+ , input = "321234567890"
60
53
  , expected = Nothing
61
54
  }
62
- , Case { description = "invalid when empty"
63
- , input = ""
55
+ , Case { description = "invalid with letters"
56
+ , input = "123-abc-7890"
64
57
  , expected = Nothing
65
58
  }
66
- , Case { description = "invalid when no digits present"
67
- , input = " (-) "
59
+ , Case { description = "invalid with punctuations"
60
+ , input = "123-@:!-7890"
68
61
  , expected = Nothing
69
62
  }
70
- , Case { description = "valid with leading characters"
71
- , input = "my number is 235 813 2134"
72
- , expected = Just "2358132134"
73
- }
74
- , Case { description = "valid with trailing characters"
75
- , input = "987 654 3210 - bob"
76
- , expected = Just "9876543210"
77
- }
78
- , Case { description = "valid amidst text and punctuation"
79
- , input = "Here it is: 415-888-0000. Thanks!"
80
- , expected = Just "4158880000"
81
- }
82
- ]
83
-
84
- areaCodeCases :: [Case]
85
- areaCodeCases =
86
- [ Case { description = "area code"
87
- , input = "1234567890"
88
- , expected = Just "123"
89
- }
90
- , Case { description = "area code with parentheses"
91
- , input = "(612) 555-1212"
92
- , expected = Just "612"
93
- }
94
- , Case { description = "area code with leading characters"
95
- , input = "my number is 235 813 2134"
96
- , expected = Just "235"
97
- }
98
- , Case { description = "invalid area code"
99
- , input = " (-) "
63
+ , Case { description = "invalid with right number of digits but letters mixed in"
64
+ , input = "1a2b3c4d5e6f7g8h9i0j"
100
65
  , expected = Nothing
101
66
  }
102
67
  ]
103
-
104
- prettyPrintCases :: [Case]
105
- prettyPrintCases =
106
- [ Case { description = "pretty print"
107
- , input = "1234567890"
108
- , expected = Just "(123) 456-7890"
109
- }
110
- , Case { description = "pretty print with full US phone number"
111
- , input = "12345678901"
112
- , expected = Just "(234) 567-8901"
113
- }
114
- , Case { description = "pretty print amidst text and punctuation"
115
- , input = "Here it is: 415-888-0000. Thanks!"
116
- , expected = Just "(415) 888-0000"
117
- }
118
- ]
@@ -53,10 +53,20 @@
53
53
  "difficulty": 1,
54
54
  "topics": [
55
55
  "control-flow (conditionals)",
56
- "integers",
56
+ "integers",
57
57
  "mathematics"
58
58
  ]
59
59
  },
60
+ {
61
+ "slug": "scrabble-score",
62
+ "difficulty": 1,
63
+ "topics": [
64
+ "control-flow (loops)",
65
+ "control-flow (conditionals)",
66
+ "arrays",
67
+ "strings"
68
+ ]
69
+ },
60
70
  {
61
71
  "slug": "anagram",
62
72
  "difficulty": 2,
@@ -76,6 +86,16 @@
76
86
  "unicode",
77
87
  "control-flow (if-else statements)"
78
88
  ]
89
+ },
90
+ {
91
+ "slug": "trinary",
92
+ "difficulty": 2,
93
+ "topics": [
94
+ "arrays",
95
+ "strings",
96
+ "integers",
97
+ "mathematics"
98
+ ]
79
99
  }
80
100
  ],
81
101
  "deprecated": [
@@ -0,0 +1,9 @@
1
+ function score(str::AbstractString)
2
+ rank = Dict('a'=>1, 'e'=>1, 'i'=>1, 'o'=>1, 'u'=>1, 'l'=>1,
3
+ 'n'=>1, 'r'=>1, 's'=>1, 't'=>1, 'd'=>2, 'g'=>2,
4
+ 'b'=>3, 'c'=>3, 'm'=>3, 'p'=>3, 'f'=>4, 'h'=>4,
5
+ 'v'=>4, 'w'=>4, 'y'=>4, 'k'=>5, 'j'=>8, 'x'=>8,
6
+ 'q'=>10, 'z'=>10)
7
+ length(str) == 0 && return 0
8
+ mapreduce(x->get(rank, x, 0), +, lowercase(str))
9
+ end
@@ -0,0 +1,51 @@
1
+ using Base.Test
2
+
3
+ include("scrabble-score.jl")
4
+
5
+ @testset "lowercase letter" begin
6
+ @test score("a") == 1
7
+ end
8
+
9
+ @testset "uppercase letter" begin
10
+ @test score("A") == 1
11
+ end
12
+
13
+ @testset "valuable letter" begin
14
+ @test score("f") == 4
15
+ end
16
+
17
+ @testset "short word" begin
18
+ @test score("at") == 2
19
+ end
20
+
21
+ @testset "short, valuable word" begin
22
+ @test score("zoo") == 12
23
+ end
24
+
25
+ @testset "medium word" begin
26
+ @test score("street") == 6
27
+ end
28
+
29
+ @testset "medium, valuable word" begin
30
+ @test score("quirky") == 22
31
+ end
32
+
33
+ @testset "long, mixed-case word" begin
34
+ @test score("OxyphenButazone") == 41
35
+ end
36
+
37
+ @testset "english-like word" begin
38
+ @test score("pinata") == 8
39
+ end
40
+
41
+ @testset "non-english letter is not scored" begin
42
+ @test score("piñata") == 7
43
+ end
44
+
45
+ @testset "empty input" begin
46
+ @test score("") == 0
47
+ end
48
+
49
+ @testset "entire alphabet available" begin
50
+ @test score("abcdefghijklmnopqrstuvwxyz") == 87
51
+ end
@@ -0,0 +1,3 @@
1
+ function score(str::AbstractString)
2
+
3
+ end
@@ -0,0 +1,4 @@
1
+ function trinary_to_decimal(str::AbstractString)
2
+ typeof(match(r"^[0-2]+$", str)) == Void && return 0
3
+ mapreduce(i->(i[2]-'0')*3^i[1], +, zip(0:length(str), reverse(str)))
4
+ end
@@ -0,0 +1,47 @@
1
+ using Base.Test
2
+
3
+ include("trinary.jl")
4
+
5
+ @testset "trinary 1 is decimal 1" begin
6
+ @test trinary_to_decimal("1") == 1
7
+ end
8
+
9
+ @testset "trinary 2 is decimal 2" begin
10
+ @test trinary_to_decimal("2") == 2
11
+ end
12
+
13
+ @testset "trinary 10 is decimal 3" begin
14
+ @test trinary_to_decimal("10") == 3
15
+ end
16
+
17
+ @testset "trinary 11 is decimal 4" begin
18
+ @test trinary_to_decimal("11") == 4
19
+ end
20
+
21
+ @testset "trinary 100 is decimal 9" begin
22
+ @test trinary_to_decimal("100") == 9
23
+ end
24
+
25
+ @testset "trinary 112 is decimal 14" begin
26
+ @test trinary_to_decimal("112") == 14
27
+ end
28
+
29
+ @testset "trinary 222 is decimal 26" begin
30
+ @test trinary_to_decimal("222") == 26
31
+ end
32
+
33
+ @testset "trinary 1122000120 is decimal 32091" begin
34
+ @test trinary_to_decimal("1122000120") == 32091
35
+ end
36
+
37
+ @testset "invalid trinary digits returns 0" begin
38
+ @test trinary_to_decimal("1234") == 0
39
+ end
40
+
41
+ @testset "invalid word as input returns 0" begin
42
+ @test trinary_to_decimal("carrot") == 0
43
+ end
44
+
45
+ @testset "invalid numbers with letters as input returns 0" begin
46
+ @test trinary_to_decimal("0a1b2c") == 0
47
+ end
@@ -0,0 +1,3 @@
1
+ function trinary_to_decimal(str::AbstractString)
2
+
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trackler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.6.27
4
+ version: 2.0.6.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-31 00:00:00.000000000 Z
11
+ date: 2017-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -4157,6 +4157,12 @@ files:
4157
4157
  - tracks/julia/exercises/rna-transcription/example.jl
4158
4158
  - tracks/julia/exercises/rna-transcription/rna-transcription.jl
4159
4159
  - tracks/julia/exercises/rna-transcription/runtests.jl
4160
+ - tracks/julia/exercises/scrabble-score/example.jl
4161
+ - tracks/julia/exercises/scrabble-score/runtests.jl
4162
+ - tracks/julia/exercises/scrabble-score/scrabble-score.jl
4163
+ - tracks/julia/exercises/trinary/example.jl
4164
+ - tracks/julia/exercises/trinary/runtests.jl
4165
+ - tracks/julia/exercises/trinary/trinary.jl
4160
4166
  - tracks/julia/exercises/word-count/example.jl
4161
4167
  - tracks/julia/exercises/word-count/runtests.jl
4162
4168
  - tracks/julia/exercises/word-count/word-count.jl