trackler 2.2.1.77 → 2.2.1.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/transpose/canonical-data.json +94 -116
  4. data/tracks/bash/config/maintainers.json +11 -1
  5. data/tracks/clojure/config.json +10 -2
  6. data/tracks/clojure/exercises/reverse-string/README.md +14 -0
  7. data/tracks/clojure/exercises/reverse-string/project.clj +4 -0
  8. data/tracks/clojure/exercises/reverse-string/src/example.clj +5 -0
  9. data/tracks/clojure/exercises/reverse-string/src/reverse_string.clj +5 -0
  10. data/tracks/clojure/exercises/reverse-string/test/reverse_string_test.clj +18 -0
  11. data/tracks/clojure/exercises/say/README.md +70 -0
  12. data/tracks/clojure/exercises/{two-fer → say}/project.clj +3 -3
  13. data/tracks/clojure/exercises/say/src/example.clj +9 -0
  14. data/tracks/clojure/exercises/say/src/say.clj +5 -0
  15. data/tracks/clojure/exercises/say/test/say_test.clj +48 -0
  16. data/tracks/coffeescript/docs/ABOUT.md +4 -9
  17. data/tracks/coffeescript/docs/INSTALLATION.md +2 -2
  18. data/tracks/erlang/exercises/pangram/rebar.config +1 -1
  19. data/tracks/erlang/exercises/pangram/src/example.erl +2 -3
  20. data/tracks/erlang/exercises/pangram/test/pangram_tests.erl +12 -13
  21. data/tracks/fsharp/exercises/grep/Example.fs +16 -20
  22. data/tracks/fsharp/exercises/grep/GrepTest.fs +154 -233
  23. data/tracks/fsharp/generators/Common.fs +7 -2
  24. data/tracks/fsharp/generators/Exercise.fs +51 -16
  25. data/tracks/fsharp/generators/Formatting.fs +13 -6
  26. data/tracks/fsharp/generators/Generators.fs +44 -14
  27. data/tracks/fsharp/generators/Rendering.fs +8 -1
  28. data/tracks/fsharp/generators/Templates/Generators/_GrepSetup.liquid +37 -0
  29. data/tracks/fsharp/generators/Templates/_TestClass.liquid +9 -3
  30. data/tracks/fsharp/generators/Templates/{_TestMethod.liquid → _TestFunction.liquid} +0 -0
  31. data/tracks/fsharp/generators/Templates/{_TestMethodBody.liquid → _TestFunctionBody.liquid} +0 -0
  32. data/tracks/fsharp/generators/Templates/_TestMember.liquid +3 -0
  33. data/tracks/fsharp/generators/Templates/_TestMemberBody.liquid +4 -0
  34. data/tracks/fsharp/generators/Templates/_TestModule.liquid +17 -0
  35. data/tracks/go/config.json +24 -0
  36. data/tracks/go/exercises/acronym/.meta/gen.go +5 -3
  37. data/tracks/go/exercises/acronym/acronym.go +0 -2
  38. data/tracks/go/exercises/acronym/cases_test.go +2 -2
  39. data/tracks/go/exercises/acronym/example.go +2 -3
  40. data/tracks/go/exercises/all-your-base/.meta/gen.go +9 -7
  41. data/tracks/go/exercises/all-your-base/cases_test.go +2 -2
  42. data/tracks/go/exercises/allergies/.meta/gen.go +10 -6
  43. data/tracks/go/exercises/allergies/cases_test.go +2 -2
  44. data/tracks/go/exercises/anagram/.meta/gen.go +7 -5
  45. data/tracks/go/exercises/anagram/cases_test.go +2 -2
  46. data/tracks/go/exercises/armstrong-numbers/.meta/gen.go +54 -0
  47. data/tracks/go/exercises/armstrong-numbers/armstrong_test.go +12 -0
  48. data/tracks/go/exercises/armstrong-numbers/cases_test.go +52 -0
  49. data/tracks/go/exercises/armstrong-numbers/example.go +24 -0
  50. data/tracks/go/exercises/binary-search/.meta/gen.go +7 -5
  51. data/tracks/go/exercises/binary-search/cases_test.go +2 -2
  52. data/tracks/go/exercises/book-store/.meta/gen.go +5 -3
  53. data/tracks/go/exercises/book-store/cases_test.go +2 -2
  54. data/tracks/go/exercises/connect/example.go +4 -5
  55. data/tracks/go/exercises/dominoes/.meta/gen.go +61 -0
  56. data/tracks/go/exercises/dominoes/.meta/hints.md +29 -0
  57. data/tracks/go/exercises/dominoes/README.md +67 -0
  58. data/tracks/go/exercises/dominoes/cases_test.go +72 -0
  59. data/tracks/go/exercises/dominoes/dominoes_test.go +106 -0
  60. data/tracks/go/exercises/dominoes/example.go +146 -0
  61. data/tracks/go/exercises/ledger/example.go +1 -1
  62. data/tracks/groovy/.gitignore +3 -0
  63. data/tracks/groovy/.travis.yml +10 -1
  64. data/tracks/groovy/bin/prepeare_exercise_builds.groovy +77 -0
  65. data/tracks/groovy/build.gradle +25 -0
  66. data/tracks/groovy/exercises/difference-of-squares/Example.groovy +3 -3
  67. data/tracks/groovy/exercises/gigasecond/GigasecondSpec.groovy +3 -3
  68. data/tracks/groovy/exercises/linked-list/{DoubleLinkedList.groovy → LinkedList.groovy} +0 -0
  69. data/tracks/groovy/exercises/linked-list/{DoubleLinkedListSpec.groovy → LinkedListSpec.groovy} +0 -0
  70. data/tracks/groovy/exercises/linked-list/README.md +1 -1
  71. data/tracks/groovy/gradle/wrapper/gradle-wrapper.jar +0 -0
  72. data/tracks/groovy/gradle/wrapper/gradle-wrapper.properties +6 -0
  73. data/tracks/groovy/gradlew +172 -0
  74. data/tracks/groovy/gradlew.bat +84 -0
  75. data/tracks/groovy/settings.gradle +9 -0
  76. data/tracks/ocaml/exercises/acronym/.merlin +1 -1
  77. data/tracks/ocaml/exercises/all-your-base/.merlin +1 -1
  78. data/tracks/ocaml/exercises/anagram/.merlin +1 -1
  79. data/tracks/ocaml/exercises/atbash-cipher/.merlin +1 -1
  80. data/tracks/ocaml/exercises/beer-song/.merlin +1 -1
  81. data/tracks/ocaml/exercises/binary-search/.merlin +1 -1
  82. data/tracks/ocaml/exercises/bob/.merlin +1 -1
  83. data/tracks/ocaml/exercises/bowling/.merlin +1 -1
  84. data/tracks/ocaml/exercises/change/.merlin +1 -1
  85. data/tracks/ocaml/exercises/difference-of-squares/.merlin +1 -1
  86. data/tracks/ocaml/exercises/etl/.merlin +1 -1
  87. data/tracks/ocaml/exercises/forth/.merlin +1 -1
  88. data/tracks/ocaml/exercises/grade-school/.merlin +1 -1
  89. data/tracks/ocaml/exercises/hamming/.merlin +1 -1
  90. data/tracks/ocaml/exercises/hangman/.merlin +1 -1
  91. data/tracks/ocaml/exercises/hello-world/.merlin +1 -1
  92. data/tracks/ocaml/exercises/hexadecimal/.merlin +1 -1
  93. data/tracks/ocaml/exercises/leap/.merlin +1 -1
  94. data/tracks/ocaml/exercises/list-ops/.merlin +1 -1
  95. data/tracks/ocaml/exercises/luhn/.merlin +1 -1
  96. data/tracks/ocaml/exercises/meetup/.merlin +1 -1
  97. data/tracks/ocaml/exercises/minesweeper/.merlin +1 -1
  98. data/tracks/ocaml/exercises/nucleotide-count/.merlin +1 -1
  99. data/tracks/ocaml/exercises/phone-number/.merlin +1 -1
  100. data/tracks/ocaml/exercises/prime-factors/.merlin +1 -1
  101. data/tracks/ocaml/exercises/raindrops/.merlin +1 -1
  102. data/tracks/ocaml/exercises/react/.merlin +1 -1
  103. data/tracks/ocaml/exercises/rectangles/.merlin +1 -1
  104. data/tracks/ocaml/exercises/rna-transcription/.merlin +1 -1
  105. data/tracks/ocaml/exercises/run-length-encoding/.merlin +1 -1
  106. data/tracks/ocaml/exercises/say/.merlin +1 -1
  107. data/tracks/ocaml/exercises/space-age/.merlin +1 -1
  108. data/tracks/ocaml/exercises/triangle/.merlin +1 -1
  109. data/tracks/ocaml/exercises/word-count/.merlin +1 -1
  110. data/tracks/ocaml/exercises/zipper/.merlin +1 -1
  111. data/tracks/typescript/config/maintainers.json +2 -2
  112. metadata +37 -12
  113. data/tracks/clojure/exercises/two-fer/README.md +0 -19
  114. data/tracks/clojure/exercises/two-fer/src/example.clj +0 -5
  115. data/tracks/clojure/exercises/two-fer/src/two_fer.clj +0 -5
  116. data/tracks/clojure/exercises/two-fer/test/two_fer_test.clj +0 -12
  117. data/tracks/erlang/exercises/pangram/include/exercism.hrl +0 -11
@@ -0,0 +1,17 @@
1
+ // This file was auto-generated based on version {{ Version }} of the canonical data.
2
+
3
+ module {{ TestModuleName }}
4
+
5
+ {%- for namespace in Namespaces -%}
6
+ open {{ namespace }}
7
+ {%- endfor -%}
8
+
9
+ open {{ TestedModuleName }}
10
+ {%- if Setup != empty -%}
11
+
12
+ {{ Setup }}
13
+ {%- endif -%}
14
+
15
+ {%- for method in Methods -%}
16
+ {{ method }}
17
+ {%- endfor -%}
@@ -734,6 +734,18 @@
734
734
  "unlocked_by": "clock",
735
735
  "uuid": "dbf4d64e-c02d-4bdf-8be1-43f9acb5f2ad"
736
736
  },
737
+ {
738
+ "core": false,
739
+ "difficulty": 3,
740
+ "slug": "armstrong-numbers",
741
+ "topics": [
742
+ "algorithms",
743
+ "integers",
744
+ "mathematics"
745
+ ],
746
+ "unlocked_by": "prime-factors",
747
+ "uuid": "b3f06c57-c0de-4b8f-bd16-782b2ce3f478"
748
+ },
737
749
  {
738
750
  "core": false,
739
751
  "difficulty": 5,
@@ -1159,6 +1171,18 @@
1159
1171
  "unlocked_by": "bank-account",
1160
1172
  "uuid": "e31199ac-e657-4997-b931-63893a575c08"
1161
1173
  },
1174
+ {
1175
+ "core": false,
1176
+ "difficulty": 4,
1177
+ "slug": "dominoes",
1178
+ "topics": [
1179
+ "algorithms",
1180
+ "arrays",
1181
+ "searching"
1182
+ ],
1183
+ "unlocked_by": "flatten-array",
1184
+ "uuid": "2e5c9e76-decd-49db-be4b-353ebeb46b73"
1185
+ },
1162
1186
  {
1163
1187
  "deprecated": true,
1164
1188
  "slug": "binary",
@@ -25,8 +25,10 @@ type js struct {
25
25
  Cases []struct {
26
26
  Description string
27
27
  Property string
28
- Phrase string
29
- Expected string
28
+ Input struct {
29
+ Phrase string
30
+ }
31
+ Expected string
30
32
  }
31
33
  }
32
34
  }
@@ -43,7 +45,7 @@ type acronymTest struct {
43
45
 
44
46
  var stringTestCases = []acronymTest {
45
47
  {{range .J.Cases}} {{range .Cases}}{
46
- input: {{printf "%q" .Phrase }},
48
+ input: {{printf "%q" .Input.Phrase }},
47
49
  expected: {{printf "%q" .Expected }},
48
50
  },
49
51
  {{end}}{{end}}
@@ -5,8 +5,6 @@
5
5
  // https://golang.org/doc/effective_go.html#commentary
6
6
  package acronym
7
7
 
8
- func Abbreviate(string) string
9
-
10
8
  // Abbreviate should have a comment documenting it.
11
9
  func Abbreviate(s string) string {
12
10
  // Write some code here to pass the test suite.
@@ -1,8 +1,8 @@
1
1
  package acronym
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: cae7ae1 acronym: remove test case with mixed-case phrase (#788)
5
- // Problem Specifications Version: 1.1.0
4
+ // Commit: c5fb622 acronym: Update json for new "input" policy (#1032)
5
+ // Problem Specifications Version: 1.2.0
6
6
 
7
7
  type acronymTest struct {
8
8
  input string
@@ -1,7 +1,6 @@
1
1
  package acronym
2
2
 
3
3
  import (
4
- "fmt"
5
4
  "regexp"
6
5
  "strings"
7
6
  )
@@ -9,11 +8,11 @@ import (
9
8
  func Abbreviate(s string) string {
10
9
  regex := regexp.MustCompile("[A-Z]+[a-z]*|[a-z]+")
11
10
  words := regex.FindAllString(s, -1)
12
- abbr := []string{}
13
11
 
12
+ var abbr []string
14
13
  for _, word := range words {
15
14
  abbr = append(abbr, string(word[0]))
16
15
  }
17
16
 
18
- return fmt.Sprintf("%s", strings.ToUpper(strings.Join(abbr, "")))
17
+ return strings.ToUpper(strings.Join(abbr, ""))
19
18
  }
@@ -29,10 +29,12 @@ type js struct {
29
29
  type oneCase struct {
30
30
  Description string
31
31
  Property string
32
- InputBase int `json:"input_base"`
33
- InputDigits []int `json:"input_digits"`
34
- OutputBase int `json:"output_base"`
35
- Expected interface{}
32
+ Input struct {
33
+ InputBase int `json:"input_base"`
34
+ Digits []int `json:"digits"`
35
+ OutputBase int `json:"output_base"`
36
+ }
37
+ Expected interface{}
36
38
  }
37
39
 
38
40
  func (o oneCase) Result() []int {
@@ -70,9 +72,9 @@ var testCases = []struct {
70
72
  }{ {{range .J.Cases}}
71
73
  {
72
74
  description: {{printf "%q" .Description}},
73
- inputBase: {{printf "%d" .InputBase}},
74
- inputDigits: {{printf "%#v" .InputDigits}},
75
- outputBase: {{printf "%d" .OutputBase}},
75
+ inputBase: {{printf "%d" .Input.InputBase}},
76
+ inputDigits: {{printf "%#v" .Input.Digits}},
77
+ outputBase: {{printf "%d" .Input.OutputBase}},
76
78
  expected: {{printf "%#v" .Result}},
77
79
  err: {{printf "%q" .Err}},
78
80
  },{{end}}
@@ -1,8 +1,8 @@
1
1
  package allyourbase
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: ba6375e all-your-base: replace 'first' and 'second' with 'input' and 'output' in descriptions
5
- // Problem Specifications Version: 2.0.1
4
+ // Commit: bf4052e all-your-base: Update json to reflect changes to schema
5
+ // Problem Specifications Version: 2.1.0
6
6
 
7
7
  var testCases = []struct {
8
8
  description string
@@ -31,16 +31,20 @@ type testGroup struct {
31
31
  Cases []json.RawMessage `property:"RAW"`
32
32
  AllergicToCases []struct {
33
33
  Description string
34
- Score uint
35
- Expected []struct {
34
+ Input struct {
35
+ Score uint
36
+ }
37
+ Expected []struct {
36
38
  Substance string
37
39
  Result bool
38
40
  }
39
41
  } `property:"allergicTo"`
40
42
  ListCases []struct {
41
43
  Description string
42
- Score uint
43
- Expected []string
44
+ Input struct {
45
+ Score uint
46
+ }
47
+ Expected []string
44
48
  } `property:"list"`
45
49
  }
46
50
 
@@ -64,7 +68,7 @@ var tmpl = `package allergies
64
68
  {{- range .AllergicToCases }}
65
69
  {
66
70
  description: {{.Description | printf "%q"}},
67
- score: {{.Score}},
71
+ score: {{.Input.Score}},
68
72
  expected: []allergicResult{ {{range .Expected}}
69
73
  { {{.Substance | printf "%q"}}, {{.Result}} },{{end}}
70
74
  },
@@ -80,7 +84,7 @@ var tmpl = `package allergies
80
84
  expected []string
81
85
  }{
82
86
  {{- range .ListCases }}
83
- { {{.Description | printf "%q"}}, {{.Score}}, {{.Expected | printf "%#v"}}},
87
+ { {{.Description | printf "%q"}}, {{.Input.Score}}, {{.Expected | printf "%#v"}}},
84
88
  {{- end }}
85
89
  }
86
90
  {{- end }}
@@ -1,8 +1,8 @@
1
1
  package allergies
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: 879bc89 allergies: Fix canonical-data.json formatting
5
- // Problem Specifications Version: 1.0.0
4
+ // Commit: 85dcb59 allergies: Update json for new "input" policy (#1033)
5
+ // Problem Specifications Version: 1.1.0
6
6
 
7
7
  // allergicTo
8
8
  type allergicResult struct {
@@ -29,9 +29,11 @@ type js struct {
29
29
  // The JSON structure we expect to be able to unmarshal into
30
30
  type OneCase struct {
31
31
  Description string
32
- Subject string
33
- Candidates []string
34
- Expected []string
32
+ Input struct {
33
+ Subject string
34
+ Candidates []string
35
+ }
36
+ Expected []string
35
37
  }
36
38
 
37
39
  // template applied to above data structure generates the Go test cases
@@ -47,8 +49,8 @@ var testCases = []struct {
47
49
  }{ {{range .J.Cases}}
48
50
  {
49
51
  description: {{printf "%q" .Description}},
50
- subject: {{printf "%q" .Subject}},
51
- candidates: []string { {{range $line := .Candidates}}{{printf "\n%q," $line}}{{end}}},
52
+ subject: {{printf "%q" .Input.Subject}},
53
+ candidates: []string { {{range $line := .Input.Candidates}}{{printf "\n%q," $line}}{{end}}},
52
54
  expected: []string { {{range $line := .Expected}}{{printf "\n%q," $line}}{{end}}},
53
55
  },{{end}}
54
56
  }
@@ -1,8 +1,8 @@
1
1
  package anagram
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: 196fc1a anagram: Rename duplicated test case description (#671)
5
- // Problem Specifications Version: 1.0.1
4
+ // Commit: a0f7663 anagram: Update json for new "input" policy (#1036)
5
+ // Problem Specifications Version: 1.1.0
6
6
 
7
7
  var testCases = []struct {
8
8
  description string
@@ -0,0 +1,54 @@
1
+ package main
2
+
3
+ import (
4
+ "log"
5
+ "text/template"
6
+
7
+ "../../../gen"
8
+ )
9
+
10
+ func main() {
11
+ t, err := template.New("").Parse(tmpl)
12
+ if err != nil {
13
+ log.Fatal(err)
14
+ }
15
+ var j js
16
+ if err := gen.Gen("armstrong-numbers", &j, t); err != nil {
17
+ log.Fatal(err)
18
+ }
19
+ }
20
+
21
+ // The JSON structure we expect to be able to unmarshal into
22
+ type js struct {
23
+ Exercise string
24
+ Version string
25
+ Cases []oneCase
26
+ }
27
+
28
+ // Test cases
29
+ type oneCase struct {
30
+ Description string
31
+ Property string
32
+ Input struct {
33
+ Number int
34
+ }
35
+ Expected bool
36
+ }
37
+
38
+ // Template to generate test cases.
39
+ var tmpl = `package armstrong
40
+
41
+ {{.Header}}
42
+
43
+ var testCases = []struct {
44
+ description string
45
+ input int
46
+ expected bool
47
+ }{ {{range .J.Cases}}
48
+ {
49
+ description: {{printf "%q" .Description}},
50
+ input: {{printf "%#v" .Input.Number}},
51
+ expected: {{printf "%#v" .Expected}},
52
+ },{{end}}
53
+ }
54
+ `
@@ -0,0 +1,12 @@
1
+ package armstrong
2
+
3
+ import "testing"
4
+
5
+ func TestArmstrong(t *testing.T) {
6
+ for _, tc := range testCases {
7
+ if actual := IsNumber(tc.input); actual != tc.expected {
8
+ t.Fatalf("FAIL: %s\nExpected: %v\nActual: %v", tc.description, tc.expected, actual)
9
+ }
10
+ t.Logf("PASS: %s", tc.description)
11
+ }
12
+ }
@@ -0,0 +1,52 @@
1
+ package armstrong
2
+
3
+ // Source: exercism/problem-specifications
4
+ // Commit: 5c3baae armstrong-numbers: new exercise (#1018)
5
+ // Problem Specifications Version: 1.0.0
6
+
7
+ var testCases = []struct {
8
+ description string
9
+ input int
10
+ expected bool
11
+ }{
12
+ {
13
+ description: "Single digit numbers are Armstrong numbers",
14
+ input: 5,
15
+ expected: true,
16
+ },
17
+ {
18
+ description: "There are no 2 digit Armstrong numbers",
19
+ input: 10,
20
+ expected: false,
21
+ },
22
+ {
23
+ description: "Three digit number that is an Armstrong number",
24
+ input: 153,
25
+ expected: true,
26
+ },
27
+ {
28
+ description: "Three digit number that is not an Armstrong number",
29
+ input: 100,
30
+ expected: false,
31
+ },
32
+ {
33
+ description: "Four digit number that is an Armstrong number",
34
+ input: 9474,
35
+ expected: true,
36
+ },
37
+ {
38
+ description: "Four digit number that is not an Armstrong number",
39
+ input: 9475,
40
+ expected: false,
41
+ },
42
+ {
43
+ description: "Seven digit number that is an Armstrong number",
44
+ input: 9926315,
45
+ expected: true,
46
+ },
47
+ {
48
+ description: "Seven digit number that is not an Armstrong number",
49
+ input: 9926314,
50
+ expected: false,
51
+ },
52
+ }
@@ -0,0 +1,24 @@
1
+ package armstrong
2
+
3
+ import "math"
4
+
5
+ func order(n int) (result int) {
6
+ for n != 0 {
7
+ result++
8
+ n = n / 10
9
+ }
10
+ return
11
+ }
12
+
13
+ // IsNumber returns true for an armstrong number
14
+ func IsNumber(n int) bool {
15
+ originalNumber := n
16
+ pow := order(n)
17
+ sum := 0
18
+ for n != 0 {
19
+ remainder := n % 10
20
+ sum += int(math.Pow(float64(remainder), float64(pow)))
21
+ n = n / 10
22
+ }
23
+ return originalNumber == sum
24
+ }
@@ -29,9 +29,11 @@ type js struct {
29
29
  type oneCase struct {
30
30
  Description string
31
31
  Property string
32
- Array []int
33
- Value int
34
- Expected int
32
+ Input struct {
33
+ Array []int
34
+ Value int
35
+ }
36
+ Expected int
35
37
  }
36
38
 
37
39
  // Template to generate test cases.
@@ -47,8 +49,8 @@ var testCases = []struct {
47
49
  }{ {{range .J.Cases}}
48
50
  {
49
51
  description: {{printf "%q" .Description}},
50
- slice: {{printf "%#v" .Array}},
51
- key: {{printf "%d" .Value}},
52
+ slice: {{printf "%#v" .Input.Array}},
53
+ key: {{printf "%d" .Input.Value}},
52
54
  x: {{printf "%d" .Expected}},
53
55
  },{{end}}
54
56
  }
@@ -1,8 +1,8 @@
1
1
  package binarysearch
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: 8acd78c Replace x-common with problem-specifications
5
- // Problem Specifications Version: 1.0.0
4
+ // Commit: 6114d03 binary-search: Update json for new input policy
5
+ // Problem Specifications Version: 1.1.0
6
6
 
7
7
  var testCases = []struct {
8
8
  description string