trackler 2.2.1.43 → 2.2.1.44

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 (151) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/lens-person/description.md +1 -1
  4. data/problem-specifications/exercises/palindrome-products/description.md +5 -12
  5. data/problem-specifications/exercises/pascals-triangle/canonical-data.json +1 -7
  6. data/tracks/c/exercises/meetup/src/example.c +64 -60
  7. data/tracks/c/exercises/meetup/src/example.h +2 -2
  8. data/tracks/c/exercises/meetup/test/test_meetup.c +4 -4
  9. data/tracks/cfml/config.json +179 -169
  10. data/tracks/cfml/exercises/markdown/.meta/HINTS.md +0 -0
  11. data/tracks/cfml/exercises/markdown/Markdown.cfc +121 -0
  12. data/tracks/cfml/exercises/markdown/MarkdownTest.cfc +51 -0
  13. data/tracks/cfml/exercises/markdown/Solution.cfc +204 -0
  14. data/tracks/cfml/exercises/markdown/SolutionTest.cfc +7 -0
  15. data/tracks/cfml/exercises/markdown/TestRunner.cfc +103 -0
  16. data/tracks/cfml/exercises/markdown/box.json +8 -0
  17. data/tracks/cfml/exercises/markdown/index.cfm +37 -0
  18. data/tracks/csharp/exercises/dominoes/DominoesTest.cs +40 -45
  19. data/tracks/csharp/exercises/meetup/MeetupTest.cs +761 -83
  20. data/tracks/csharp/generators/Exercises/Dominoes.cs +33 -0
  21. data/tracks/csharp/generators/Exercises/Meetup.cs +46 -0
  22. data/tracks/csharp/generators/Output/FormattingExtensions.cs +11 -1
  23. data/tracks/csharp/generators/Output/TypesExtensions.cs +23 -0
  24. data/tracks/csharp/generators/Output/ValueFormatter.cs +70 -69
  25. data/tracks/dart/config.json +15 -3
  26. data/tracks/dart/exercises/word-count/README.md +18 -0
  27. data/tracks/dart/exercises/word-count/lib/example.dart +26 -0
  28. data/tracks/dart/exercises/word-count/lib/word_count.dart +3 -0
  29. data/tracks/dart/exercises/word-count/pubspec.lock +293 -0
  30. data/tracks/dart/exercises/word-count/pubspec.yaml +3 -0
  31. data/tracks/dart/exercises/word-count/test/word_count_test.dart +64 -0
  32. data/tracks/ecmascript/docs/INSTALLATION.md +4 -7
  33. data/tracks/elixir/exercises/hello-world/README.md +1 -26
  34. data/tracks/elixir/exercises/hello-world/example.exs +3 -7
  35. data/tracks/elixir/exercises/hello-world/hello_world.exs +3 -25
  36. data/tracks/elixir/exercises/hello-world/hello_world_test.exs +2 -13
  37. data/tracks/elixir/mix.lock +1 -1
  38. data/tracks/elm/config.json +11 -0
  39. data/tracks/elm/exercises/pascals-triangle/README.md +51 -0
  40. data/tracks/elm/exercises/pascals-triangle/Triangle.elm +1 -0
  41. data/tracks/elm/exercises/pascals-triangle/Triangle.example.elm +23 -0
  42. data/tracks/elm/exercises/pascals-triangle/elm-package.json +14 -0
  43. data/tracks/elm/exercises/pascals-triangle/package.json +14 -0
  44. data/tracks/elm/exercises/pascals-triangle/tests/Tests.elm +34 -0
  45. data/tracks/elm/exercises/pascals-triangle/tests/elm-package.json +16 -0
  46. data/tracks/fsharp/exercises/grade-school/GradeSchool.fs +2 -2
  47. data/tracks/fsharp/exercises/grade-school/GradeSchoolTest.fs +3 -2
  48. data/tracks/java/CONTRIBUTING.md +34 -0
  49. data/tracks/java/config.json +42 -6
  50. data/tracks/java/exercises/largest-series-product/src/main/java/LargestSeriesProductCalculator.java +7 -3
  51. data/tracks/java/exercises/matrix/src/main/java/Matrix.java +23 -0
  52. data/tracks/julia/config.json +11 -2
  53. data/tracks/julia/exercises/grains/README.md +33 -0
  54. data/tracks/julia/exercises/grains/example.jl +23 -0
  55. data/tracks/julia/exercises/grains/grains.jl +9 -0
  56. data/tracks/julia/exercises/grains/runtests.jl +27 -0
  57. data/tracks/lua/README.md +1 -1
  58. data/tracks/mips/exercises/octal/README.md +3 -8
  59. data/tracks/ocaml/exercises/palindrome-products/README.md +8 -14
  60. data/tracks/perl6/.travis.yml +7 -3
  61. data/tracks/perl6/bin/exercise-gen.pl6 +5 -1
  62. data/tracks/perl6/exercises/accumulate/README.md +0 -3
  63. data/tracks/perl6/exercises/accumulate/accumulate.t +9 -3
  64. data/tracks/perl6/exercises/all-your-base/README.md +1 -1
  65. data/tracks/perl6/exercises/all-your-base/all-your-base.t +23 -11
  66. data/tracks/perl6/exercises/all-your-base/example.yaml +1 -1
  67. data/tracks/perl6/exercises/allergies/README.md +0 -1
  68. data/tracks/perl6/exercises/allergies/allergies.t +22 -10
  69. data/tracks/perl6/exercises/anagram/anagram.t +22 -10
  70. data/tracks/perl6/exercises/atbash-cipher/README.md +2 -1
  71. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +22 -10
  72. data/tracks/perl6/exercises/binary/README.md +2 -0
  73. data/tracks/perl6/exercises/bob/bob.t +24 -11
  74. data/tracks/perl6/exercises/bob/example.yaml +2 -2
  75. data/tracks/perl6/exercises/clock/clock.t +22 -10
  76. data/tracks/perl6/exercises/flatten-array/README.md +1 -2
  77. data/tracks/perl6/exercises/flatten-array/example.yaml +1 -1
  78. data/tracks/perl6/exercises/flatten-array/flatten-array.t +23 -11
  79. data/tracks/perl6/exercises/grade-school/README.md +0 -1
  80. data/tracks/perl6/exercises/grade-school/grade-school.t +9 -3
  81. data/tracks/perl6/exercises/grains/README.md +0 -1
  82. data/tracks/perl6/exercises/grains/grains.t +22 -10
  83. data/tracks/perl6/exercises/hello-world/example.yaml +3 -3
  84. data/tracks/perl6/exercises/hello-world/hello-world.t +25 -12
  85. data/tracks/perl6/exercises/leap/README.md +1 -1
  86. data/tracks/perl6/exercises/leap/example.yaml +1 -1
  87. data/tracks/perl6/exercises/leap/leap.t +23 -11
  88. data/tracks/perl6/exercises/linked-list/README.md +10 -10
  89. data/tracks/perl6/exercises/linked-list/linked-list.t +9 -3
  90. data/tracks/perl6/exercises/luhn/README.md +7 -7
  91. data/tracks/perl6/exercises/luhn/luhn.t +22 -10
  92. data/tracks/perl6/exercises/phone-number/README.md +3 -2
  93. data/tracks/perl6/exercises/phone-number/phone-number.t +22 -10
  94. data/tracks/perl6/exercises/raindrops/raindrops.t +22 -10
  95. data/tracks/perl6/exercises/rna-transcription/rna-transcription.t +22 -10
  96. data/tracks/perl6/exercises/robot-name/robot-name.t +9 -3
  97. data/tracks/perl6/exercises/scrabble-score/README.md +3 -1
  98. data/tracks/perl6/exercises/scrabble-score/scrabble-score.t +22 -10
  99. data/tracks/perl6/exercises/space-age/README.md +2 -1
  100. data/tracks/perl6/exercises/space-age/space-age.t +22 -10
  101. data/tracks/perl6/exercises/trinary/README.md +1 -1
  102. data/tracks/perl6/exercises/word-count/README.md +1 -2
  103. data/tracks/perl6/exercises/word-count/word-count.t +22 -10
  104. data/tracks/perl6/exercises/wordy/README.md +0 -5
  105. data/tracks/perl6/exercises/wordy/wordy.t +22 -10
  106. data/tracks/perl6/templates/test.mustache +26 -15
  107. data/tracks/python/config.json +10 -0
  108. data/tracks/python/exercises/book-store/book_store.py +1 -1
  109. data/tracks/python/exercises/flatten-array/flatten_array.py +1 -1
  110. data/tracks/python/exercises/matrix/matrix.py +1 -1
  111. data/tracks/python/exercises/palindrome-products/palindrome_products.py +2 -2
  112. data/tracks/python/exercises/perfect-numbers/perfect_numbers.py +2 -2
  113. data/tracks/python/exercises/pythagorean-triplet/pythagorean_triplet.py +3 -3
  114. data/tracks/python/exercises/raindrops/raindrops.py +1 -1
  115. data/tracks/python/exercises/scale-generator/scale_generator.py +1 -1
  116. data/tracks/python/exercises/sieve/sieve.py +1 -1
  117. data/tracks/python/exercises/sublist/sublist.py +1 -1
  118. data/tracks/python/exercises/transpose/transpose.py +1 -1
  119. data/tracks/python/exercises/triangle/triangle.py +4 -1
  120. data/tracks/python/exercises/two-bucket/example.py +59 -0
  121. data/tracks/python/exercises/two-bucket/two_bucket.py +2 -0
  122. data/tracks/python/exercises/two-bucket/two_bucket_test.py +32 -0
  123. data/tracks/scheme/config.json +59 -89
  124. data/tracks/scheme/config/maintainers.json +11 -11
  125. data/tracks/sml/exercises/allergies/README.md +20 -5
  126. data/tracks/sml/exercises/allergies/allergies.sml +11 -14
  127. data/tracks/sml/exercises/allergies/example.sml +9 -9
  128. data/tracks/sml/exercises/allergies/test.sml +65 -129
  129. data/tracks/sml/exercises/allergies/testlib.sml +159 -0
  130. data/tracks/sml/exercises/hamming/README.md +21 -5
  131. data/tracks/sml/exercises/hamming/example.sml +14 -10
  132. data/tracks/sml/exercises/hamming/hamming.sml +4 -3
  133. data/tracks/sml/exercises/hamming/test.sml +55 -64
  134. data/tracks/sml/exercises/hamming/testlib.sml +159 -0
  135. data/tracks/typescript/config.json +15 -0
  136. data/tracks/typescript/exercises/linked-list/linked-list.test.ts +11 -11
  137. data/tracks/typescript/exercises/nth-prime/README.md +36 -0
  138. data/tracks/typescript/exercises/nth-prime/nth-prime.example.ts +28 -0
  139. data/tracks/typescript/exercises/nth-prime/nth-prime.test.ts +25 -0
  140. data/tracks/typescript/exercises/nth-prime/nth-prime.ts +0 -0
  141. data/tracks/typescript/exercises/nth-prime/package.json +36 -0
  142. data/tracks/typescript/exercises/nth-prime/tsconfig.json +22 -0
  143. data/tracks/typescript/exercises/nth-prime/tslint.json +127 -0
  144. data/tracks/typescript/exercises/nth-prime/yarn.lock +2305 -0
  145. data/tracks/typescript/exercises/prime-factors/README.md +1 -1
  146. data/tracks/typescript/exercises/prime-factors/prime-factors.test.ts +11 -11
  147. data/tracks/typescript/exercises/series/README.md +1 -1
  148. data/tracks/typescript/exercises/series/series.test.ts +11 -11
  149. data/tracks/typescript/img/icon.png +0 -0
  150. data/tracks/typescript/img/icon.svg +3 -8
  151. metadata +44 -2
@@ -0,0 +1,3 @@
1
+ name: 'word_count'
2
+ dev_dependencies:
3
+ test: '<0.13.0'
@@ -0,0 +1,64 @@
1
+ import 'package:test/test.dart';
2
+ import 'package:word_count/word_count.dart';
3
+
4
+ final WordCount myWordCounter = new WordCount();
5
+
6
+ void main() {
7
+ group("WordCount: Simple Tests - ", simpleTests);
8
+ group("WordCount: Ignore special characters - ", ignoreSpecialCharacters);
9
+ group("WordCount: Works with numbers too - ", notJustWords);
10
+ group("WordCount: Edge case - ", edgeCases);
11
+ }
12
+
13
+ void simpleTests() {
14
+ test("count one word", () {
15
+ Map<String, int> test = myWordCounter.countWords("word");
16
+ expect(test, equals({"word": 1}));
17
+ }, skip: false);
18
+ test("count one of each word", () {
19
+ Map<String, int> test = myWordCounter.countWords("one of each");
20
+ expect(test, equals({"one": 1, "of": 1, "each": 1}));
21
+ }, skip: true);
22
+ test("multiple occurrences of a word", () {
23
+ Map<String, int> test = myWordCounter.countWords("one fish two fish red fish blue fish");
24
+ expect(test, equals({"one": 1, "fish": 4, "two": 1, "red": 1, "blue": 1}));
25
+ }, skip: true);
26
+ }
27
+
28
+ void ignoreSpecialCharacters() {
29
+ test("handles cramped lists", () {
30
+ Map<String, int> test = myWordCounter.countWords("one,two,three");
31
+ expect(test, equals({"one": 1, "two": 1, "three": 1}));
32
+ }, skip: true);
33
+ test("handles expanded lists", () {
34
+ Map<String, int> test = myWordCounter.countWords("one,\ntwo,\nthree");
35
+ expect(test, equals({"one": 1, "two": 1, "three": 1}));
36
+ }, skip: true);
37
+ test("ignore punctuation", () {
38
+ Map<String, int> test = myWordCounter.countWords('car: carpet as java: javascript!!&@\$%^&');
39
+ expect(test, equals({"car": 1, "carpet": 1, "as": 1, "java": 1, "javascript": 1}));
40
+ }, skip: true);
41
+
42
+ test("with quotations", () {
43
+ Map<String, int> test = myWordCounter.countWords("Joe can't tell between 'large' and large.");
44
+ expect(test, equals({"joe": 1, "can't": 1, "tell": 1, "between": 1, "large": 2, "and": 1}));
45
+ }, skip: true);
46
+ }
47
+
48
+ void notJustWords() {
49
+ test("include numbers", () {
50
+ Map<String, int> test = myWordCounter.countWords("testing, 1, 2 testing");
51
+ expect(test, equals({"testing": 2, "1": 1, "2": 1}));
52
+ }, skip: true);
53
+ }
54
+
55
+ void edgeCases() {
56
+ test("normalize case", () {
57
+ Map<String, int> test = myWordCounter.countWords("go Go GO Stop stop");
58
+ expect(test, equals({"go": 3, "stop": 2}));
59
+ }, skip: true);
60
+ test("with apostrophes", () {
61
+ Map<String, int> test = myWordCounter.countWords("First: don't laugh. Then: don't cry.");
62
+ expect(test, equals({"first": 1, "don't": 2, "laugh": 1, "then": 1, "cry": 1}));
63
+ }, skip: true);
64
+ }
@@ -1,12 +1,9 @@
1
- Install [Node.js](http://nodejs.org):
1
+ There are a couple of ways to install [NodeJS](http://nodejs.org):
2
2
 
3
- * **Windows and OS X users**: can
4
- [download an Installer](https://nodejs.org/en/download/)
5
- * **Linux users**: can install it
6
- [via package manager](https://nodejs.org/en/download/package-manager/)
7
-
8
- [linstall]: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
3
+ * via an [Installer or Binaries](https://nodejs.org/en/download/)
4
+ * via [package managers](https://nodejs.org/en/download/package-manager/)
9
5
 
6
+ Both options have selections for Windows, MacOS, and Linux.
10
7
 
11
8
  If you've used the official installer, your `PATH` should have been automatically
12
9
  configured, but if your shell has trouble locating your globally installed
@@ -19,32 +19,7 @@ If everything goes well, you will be ready to fetch your first real exercise.
19
19
  Execute the tests with:
20
20
 
21
21
  ```bash
22
- $ elixir bob_test.exs
23
- ```
24
-
25
- (Replace `bob_test.exs` with the name of the test file.)
26
-
27
- ### Pending tests
28
-
29
- In the test suites, all but the first test have been skipped.
30
-
31
- Once you get a test passing, you can unskip the next one by
32
- commenting out the relevant `@tag :pending` with a `#` symbol.
33
-
34
- For example:
35
-
36
- ```elixir
37
- # @tag :pending
38
- test "shouting" do
39
- assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
40
- end
41
- ```
42
-
43
- Or, you can enable all the tests by commenting out the
44
- `ExUnit.configure` line in the test suite.
45
-
46
- ```elixir
47
- # ExUnit.configure exclude: :pending, trace: true
22
+ $ elixir hello_world_test.exs
48
23
  ```
49
24
 
50
25
  For more detailed information about the Elixir track, please
@@ -1,13 +1,9 @@
1
1
  defmodule HelloWorld do
2
-
3
2
  @doc """
4
3
  Greets the user by name, or by saying "Hello, World!"
5
4
  if no name is given
6
5
  """
7
-
8
- def hello(name \\ "World") do
9
-
10
- "Hello, " <> name <> "!"
11
-
6
+ def hello do
7
+ "Hello, World!"
12
8
  end
13
- end
9
+ end
@@ -1,31 +1,9 @@
1
1
  defmodule HelloWorld do
2
- @moduledoc """
3
- Elixir counts the number of arguments as part of the function name.
4
- For instance;
5
-
6
- def hello() do
7
- end
8
-
9
- would be a completely different function from
10
-
11
- def hello(name) do
12
- end
13
-
14
- Can you find a way to make all the tests pass with just one
15
- function?
16
-
17
- Hint: look into argument defaults here:
18
- http://elixir-lang.org/getting-started/modules-and-functions.html#default-arguments
19
- """
20
-
21
2
  @doc """
22
- Greets the user by name, or by saying "Hello, World!"
23
- if no name is given.
3
+ Simply returns "Hello, world!"
24
4
  """
25
- @spec hello(String.t) :: String.t
26
- def hello(name) do
27
-
5
+ @spec hello :: String.t
6
+ def hello do
28
7
  "Your implementation goes here"
29
-
30
8
  end
31
9
  end
@@ -3,23 +3,12 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
3
3
  end
4
4
 
5
5
  ExUnit.start
6
- ExUnit.configure exclude: :pending, trace: true
6
+ ExUnit.configure trace: true
7
7
 
8
8
  defmodule HelloWorldTest do
9
9
  use ExUnit.Case
10
10
 
11
- test "says hello with no name" do
11
+ test "says 'Hello, World!'" do
12
12
  assert HelloWorld.hello() == "Hello, World!"
13
13
  end
14
-
15
- @tag :pending
16
- test "says hello sample name" do
17
- assert HelloWorld.hello("Alice") == "Hello, Alice!"
18
- end
19
-
20
- @tag :pending
21
- test "says hello other sample name" do
22
- assert HelloWorld.hello("Bob") == "Hello, Bob!"
23
- end
24
-
25
14
  end
@@ -1 +1 @@
1
- %{"poison": {:hex, :poison, "1.4.0"}}
1
+ %{"poison": {:hex, :poison, "1.4.0", "cd5afb9db7f0d19487572fa28185b6d4de647f14235746824e77b3139b79b725", [], [], "hexpm"}}
@@ -321,6 +321,17 @@
321
321
  "topics": [
322
322
 
323
323
  ]
324
+ },
325
+ {
326
+ "uuid": "a730ca85-057d-db80-e44e-25b8028acede6337cca",
327
+ "slug": "pascals-triangle",
328
+ "core": false,
329
+ "unlocked_by": null,
330
+ "difficulty": 4,
331
+ "topics": [
332
+ "Lists",
333
+ "Control-flow"
334
+ ]
324
335
  }
325
336
  ],
326
337
  "foregone": [
@@ -0,0 +1,51 @@
1
+ # Pascals Triangle
2
+
3
+ Compute Pascal's triangle up to a given number of rows.
4
+
5
+ In Pascal's Triangle each number is computed by adding the numbers to
6
+ the right and left of the current position in the previous row.
7
+
8
+ ```text
9
+ 1
10
+ 1 1
11
+ 1 2 1
12
+ 1 3 3 1
13
+ 1 4 6 4 1
14
+ # ... etc
15
+ ```
16
+
17
+ ## Elm Installation
18
+
19
+ Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
20
+ installation and learning resources.
21
+
22
+ ## Writing the Code
23
+
24
+ The first time you start an exercise, you'll need to ensure you have the
25
+ appropriate dependencies installed.
26
+
27
+ ```bash
28
+ $ npm install
29
+ ```
30
+
31
+ Execute the tests with:
32
+
33
+ ```bash
34
+ $ npm test
35
+ ```
36
+
37
+ Automatically run tests again when you save changes:
38
+
39
+ ```bash
40
+ $ npm run watch
41
+ ```
42
+
43
+ As you work your way through the test suite, be sure to remove the `skip <|`
44
+ calls from each test until you get them all passing!
45
+
46
+ ## Source
47
+
48
+ Pascal's Triangle at Wolfram Math World [http://mathworld.wolfram.com/PascalsTriangle.html](http://mathworld.wolfram.com/PascalsTriangle.html)
49
+
50
+ ## Submitting Incomplete Solutions
51
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1 @@
1
+ module Triangle exposing (..)
@@ -0,0 +1,23 @@
1
+ module Triangle exposing (rows)
2
+
3
+ import List
4
+
5
+
6
+ nextRow : List Int -> List Int
7
+ nextRow row =
8
+ List.map2 (+) (0 :: row) (row ++ [ 0 ])
9
+
10
+
11
+ rows : Int -> List (List Int)
12
+ rows n =
13
+ let
14
+ loop i row =
15
+ if i == n then
16
+ []
17
+ else
18
+ row :: loop (i + 1) (nextRow row)
19
+ in
20
+ if n < 0 then
21
+ []
22
+ else
23
+ loop 0 [ 1 ]
@@ -0,0 +1,14 @@
1
+ {
2
+ "version": "3.0.0",
3
+ "summary": "Exercism problems in Elm.",
4
+ "repository": "https://github.com/exercism/elm.git",
5
+ "license": "BSD3",
6
+ "source-directories": [
7
+ "."
8
+ ],
9
+ "exposed-modules": [],
10
+ "dependencies": {
11
+ "elm-lang/core": "5.0.0 <= v < 6.0.0"
12
+ },
13
+ "elm-version": "0.18.0 <= v < 0.19.0"
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "description": "Exercism/Elm",
3
+ "repository": "https://github.com/exercism/elm.git",
4
+ "license": "MIT",
5
+ "scripts": {
6
+ "postinstall": "elm-package install -y",
7
+ "watch": "elm-test --watch",
8
+ "test": "elm-test"
9
+ },
10
+ "dependencies": {
11
+ "elm": "0.18.0",
12
+ "elm-test": "0.18.3"
13
+ }
14
+ }
@@ -0,0 +1,34 @@
1
+ module Tests exposing (..)
2
+
3
+ import Expect
4
+ import Test exposing (..)
5
+ import Triangle exposing (rows)
6
+
7
+
8
+ tests : Test
9
+ tests =
10
+ describe "Triangle"
11
+ [ test "no rows" <|
12
+ \() ->
13
+ Expect.equal [] (rows 0)
14
+ , skip <|
15
+ test "single row" <|
16
+ \() ->
17
+ Expect.equal [ [ 1 ] ] (rows 1)
18
+ , skip <|
19
+ test "two rows" <|
20
+ \() ->
21
+ Expect.equal [ [ 1 ], [ 1, 1 ] ] (rows 2)
22
+ , skip <|
23
+ test "three rows" <|
24
+ \() ->
25
+ Expect.equal [ [ 1 ], [ 1, 1 ], [ 1, 2, 1 ] ] (rows 3)
26
+ , skip <|
27
+ test "four rows" <|
28
+ \() ->
29
+ Expect.equal [ [ 1 ], [ 1, 1 ], [ 1, 2, 1 ], [ 1, 3, 3, 1 ] ] (rows 4)
30
+ , skip <|
31
+ test "negative rows" <|
32
+ \() ->
33
+ Expect.equal [] (rows -1)
34
+ ]
@@ -0,0 +1,16 @@
1
+ {
2
+ "version": "3.0.0",
3
+ "summary": "Exercism problems in Elm.",
4
+ "repository": "https://github.com/exercism/elm.git",
5
+ "license": "BSD3",
6
+ "source-directories": [
7
+ ".",
8
+ ".."
9
+ ],
10
+ "exposed-modules": [],
11
+ "dependencies": {
12
+ "elm-lang/core": "5.0.0 <= v < 6.0.0",
13
+ "elm-community/elm-test": "4.0.0 <= v < 5.0.0"
14
+ },
15
+ "elm-version": "0.18.0 <= v < 0.19.0"
16
+ }
@@ -4,6 +4,6 @@ let empty: Map<int, string list> = failwith "You need to implement this function
4
4
 
5
5
  let add (student: string) (grade: int) (school: Map<int, string list>): Map<int, string list> = failwith "You need to implement this function."
6
6
 
7
- let roster (school: Map<int, string list>): Map<int, string list> = failwith "You need to implement this function."
7
+ let roster (school: Map<int, string list>): (int * string list) list = failwith "You need to implement this function."
8
8
 
9
- let grade (number: int) (school: Map<int, string list>): string list = failwith "You need to implement this function."
9
+ let grade (number: int) (school: Map<int, string list>): string list = failwith "You need to implement this function."
@@ -57,10 +57,11 @@ let ``Student names and grades in roster are sorted`` () =
57
57
  |> add "Kareem" 6
58
58
  |> add "Christopher" 4
59
59
  |> add "Kyle" 3
60
+ |> add "Zoe" 4
60
61
 
61
62
  let expected =
62
63
  [(3, ["Kyle"]);
63
- (4, ["Christopher"; "Jennifer"]);
64
+ (4, ["Christopher"; "Jennifer"; "Zoe"]);
64
65
  (6, ["Kareem"])]
65
66
 
66
- roster school |> should equal expected
67
+ roster school |> should equal expected
@@ -8,6 +8,7 @@
8
8
  * [The Problem Submodules](#the-problem-submodules)
9
9
  * [Advanced: Complete Local Setup](#advanced-complete-local-setup)
10
10
  * [Tip: `gradle clean` before `exercism fetch`](#tip-gradle-clean-before-exercism-fetch)
11
+ * [Adding a New Exercise](#adding-a-new-exercise)
11
12
 
12
13
  ## Overview
13
14
 
@@ -15,6 +16,7 @@ This guide covers contributing to the Java track. If you are new, this guide is
15
16
 
16
17
  If, at any point, you're having any trouble, pop in the [Gitter exercism/java room](https://gitter.im/exercism/java) or the [Gitter exercism/dev room](https://gitter.im/exercism/dev) for help.
17
18
 
19
+ For general guidelines about contributing to Exercism see the [Exercism contributing guide](https://github.com/exercism/docs/tree/master/contributing-to-language-tracks).
18
20
 
19
21
  ## Before Making Your Pull Request
20
22
 
@@ -132,3 +134,35 @@ gradle clean
132
134
  cd ~/workspace/exercism/exercises
133
135
  exercism fetch java bob
134
136
  ```
137
+
138
+ ## Adding a New Exercise
139
+
140
+ The easiest way to add a new exercise to the Java track is to port an exercise from another track.
141
+ That means that you take an exercise that has already been implemented in another language and you implement it in this track.
142
+
143
+ To add a completely new exercise you need to open a pull request to the [problem specifications repository](https://github.com/exercism/problem-specifications/tree/master/exercises).
144
+ Any completely new exercise needs to be added and accepted there before it can be added to the Java track.
145
+
146
+ There is a [general Exercism guide for porting an exercise to a new language](https://github.com/exercism/docs/blob/master/you-can-help/implement-an-exercise-from-specification.md).
147
+ Please review this before porting an exercise to the Java track.
148
+
149
+ See [here](http://exercism.io/languages/java/todo) for a list of exercises that have yet to be implemented on the Java track and can therefore be ported to this track.
150
+ Please make sure no one else has a pull request open to implement your chosen exercise before you start.
151
+ Also please make a [dibs pull request](https://github.com/exercism/docs/blob/master/you-can-help/implement-an-exercise-from-specification.md#avoiding-duplicate-work) to make it clear to others that you are working on this exercise.
152
+
153
+ The Java specific details you need to know about adding an exercise are:
154
+
155
+ 1. Please add an entry to the `exercises` array in `config.json`. You can find details about what should be in that entry [here](https://github.com/exercism/docs/blob/master/language-tracks/configuration/exercises.md).
156
+ You can also look at other entries in `config.json` as examples and try to mimic them.
157
+
158
+ 2. Please add an entry for your exercise to `settings.gradle`.
159
+ This should just be `include 'exercise-name'`.
160
+ This list is in alphabetical order so please add your exercise so that it maintains this order.
161
+
162
+ 3. Please add an exercise submodule for your exercise.
163
+ See [The Problem Submodules](#the-problem-submodules) section for what needs to be in this.
164
+ The `build.gradle` file can just be copied from any other exercise submodule.
165
+ See the [POLICIES doc](https://github.com/exercism/java/blob/master/POLICIES.md#starter-implementations) for an explanation of when you need to add a starter implementation.
166
+
167
+ Hopefully that should be enough information to help you port an exercise to the Java track.
168
+ Feel free to open an issue or post in the [Gitter exercism/java room](https://gitter.im/exercism/java) if you have any questions and we'll try and answer as soon as we can.