trackler 2.2.1.43 → 2.2.1.44

Sign up to get free protection for your applications and to get access to all the features.
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.