trackler 2.0.8.16 → 2.0.8.17
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.
- checksums.yaml +4 -4
- data/common/exercises/alphametics/canonical-data.json +100 -44
- data/common/exercises/anagram/canonical-data.json +3 -3
- data/common/exercises/beer-song/canonical-data.json +75 -47
- data/common/exercises/binary-search/canonical-data.json +86 -74
- data/common/exercises/bowling/canonical-data.json +1 -1
- data/common/exercises/bracket-push/canonical-data.json +15 -0
- data/common/exercises/circular-buffer/canonical-data.json +16 -1
- data/common/exercises/connect/canonical-data.json +19 -7
- data/common/exercises/custom-set/canonical-data.json +287 -246
- data/common/exercises/dominoes/canonical-data.json +125 -111
- data/common/exercises/flatten-array/canonical-data.json +35 -28
- data/common/exercises/food-chain/canonical-data.json +196 -182
- data/common/exercises/gigasecond/canonical-data.json +51 -41
- data/common/exercises/isogram/canonical-data.json +59 -38
- data/common/exercises/pangram/canonical-data.json +69 -47
- data/common/exercises/perfect-numbers/canonical-data.json +3 -3
- data/common/exercises/phone-number/canonical-data.json +74 -55
- data/common/exercises/sum-of-multiples/canonical-data.json +88 -62
- data/lib/trackler/version.rb +1 -1
- data/tracks/elixir/docs/INSTALLATION.md +2 -0
- data/tracks/elixir/docs/LEARNING.md +2 -0
- data/tracks/elixir/docs/RESOURCES.md +8 -0
- data/tracks/groovy/docs/ABOUT.md +1 -1
- data/tracks/groovy/docs/LEARNING.md +5 -4
- data/tracks/groovy/docs/RESOURCES.md +8 -1
- data/tracks/rust/exercises/hello-world/GETTING_STARTED.md +29 -97
- metadata +1 -1
@@ -1,64 +1,90 @@
|
|
1
1
|
{
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
2
|
+
"exercise": "sum-of-multiples",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"cases": [
|
5
|
+
{
|
6
|
+
"description": "multiples of 3 or 5 up to 1",
|
7
|
+
"property": "sum",
|
8
|
+
"factors": [3, 5],
|
9
|
+
"limit": 1,
|
10
|
+
"expected": 0
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"description": "multiples of 3 or 5 up to 4",
|
14
|
+
"property": "sum",
|
15
|
+
"factors": [3, 5],
|
16
|
+
"limit": 4,
|
17
|
+
"expected": 3
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"description": "multiples of 3 or 5 up to 10",
|
21
|
+
"property": "sum",
|
22
|
+
"factors": [3, 5],
|
23
|
+
"limit": 10,
|
24
|
+
"expected": 23
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"description": "multiples of 3 or 5 up to 100",
|
28
|
+
"property": "sum",
|
29
|
+
"factors": [3, 5],
|
30
|
+
"limit": 100,
|
31
|
+
"expected": 2318
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"description": "multiples of 3 or 5 up to 1000",
|
35
|
+
"property": "sum",
|
36
|
+
"factors": [3, 5],
|
37
|
+
"limit": 1000,
|
38
|
+
"expected": 233168
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"description": "multiples of 7, 13 or 17 up to 20",
|
42
|
+
"property": "sum",
|
43
|
+
"factors": [7, 13, 17],
|
44
|
+
"limit": 20,
|
45
|
+
"expected": 51
|
46
|
+
},
|
47
|
+
{
|
48
|
+
"description": "multiples of 4 or 6 up to 15",
|
49
|
+
"property": "sum",
|
50
|
+
"factors": [4, 6],
|
51
|
+
"limit": 15,
|
52
|
+
"expected": 30
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"description": "multiples of 5, 6 or 8 up to 150",
|
56
|
+
"property": "sum",
|
57
|
+
"factors": [5, 6, 8],
|
58
|
+
"limit": 150,
|
59
|
+
"expected": 4419
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"description": "multiples of 5 or 25 up to 51",
|
63
|
+
"property": "sum",
|
64
|
+
"factors": [5, 25],
|
65
|
+
"limit": 51,
|
66
|
+
"expected": 275
|
67
|
+
},
|
68
|
+
{
|
69
|
+
"description": "multiples of 43 or 47 up to 10000",
|
70
|
+
"property": "sum",
|
71
|
+
"factors": [43, 47],
|
72
|
+
"limit": 10000,
|
73
|
+
"expected": 2203160
|
74
|
+
},
|
75
|
+
{
|
76
|
+
"description": "multiples of 1 up to 100",
|
77
|
+
"property": "sum",
|
78
|
+
"factors": [1],
|
79
|
+
"limit": 100,
|
80
|
+
"expected": 4950
|
81
|
+
},
|
82
|
+
{
|
83
|
+
"description": "multiples of an empty list up to 10000",
|
84
|
+
"property": "sum",
|
85
|
+
"factors": [],
|
86
|
+
"limit": 10000,
|
87
|
+
"expected": 0
|
88
|
+
}
|
89
|
+
]
|
64
90
|
}
|
data/lib/trackler/version.rb
CHANGED
@@ -8,3 +8,5 @@ Exercism provides exercises and feedback but can be difficult to jump into for t
|
|
8
8
|
* [Etudes for Elixir](http://chimera.labs.oreilly.com/books/1234000001642), by J. David Eisenberg (exercise companion for Intro to Elixir)
|
9
9
|
* [Elixir School](https://elixirschool.com)
|
10
10
|
* [Elixir Examples](https://elixir-examples.github.io/)
|
11
|
+
* [Exercism's BEAM Gitter channel](https://gitter.im/exercism/xerlang)
|
12
|
+
* [Elixir Forum](https://elixirforum.com/)
|
data/tracks/groovy/docs/ABOUT.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Groovy is aimed at improving developer productivity thanks to a concise, easy to learn syntax. It facilitates scripting, Domain-Specific Language authoring, runtime and compile-time meta-programming, and functional programming.
|
4
4
|
|
5
|
-
It allows access to the entire ecosystem of Java libraries, integrates seamlessly with Java applications.
|
5
|
+
It allows access to the entire ecosystem of Java libraries, and integrates seamlessly with Java applications.
|
6
6
|
|
7
7
|
It can be used as a simple scripting language or added to complicated Java frameworks. It powers technologies like Gradle, Spock, Ratpack, Grails, and scripting in Jenkins.
|
8
8
|
|
@@ -1,16 +1,17 @@
|
|
1
1
|
Interested in getting started with Groovy, or learning more while you work on exercises?
|
2
2
|
|
3
|
-
Try out Groovy
|
3
|
+
Try out Groovy with
|
4
4
|
|
5
|
-
* [
|
6
|
-
*
|
7
|
-
*
|
5
|
+
* [a browser using an online interpreter](https://www.jdoodle.com/execute-groovy-online)
|
6
|
+
* [the Groovy Console](http://groovy-lang.org/groovyconsole.html) by typing `groovyConsole` at a command line
|
7
|
+
* [the Groovy Shell](http://groovy-lang.org/groovyconsole.html) by typing `groovysh` at a command line
|
8
8
|
|
9
9
|
Take a quick tour of Groovy with
|
10
10
|
|
11
11
|
* Tim Rows' [Groovy Tutorial for Java Developers](https://www.timroes.de/2015/06/27/groovy-tutorial-for-java-developers/) is equally good for non-Java developers
|
12
12
|
* [Learn X in Y minutes, Where X=Groovy ](https://learnxinyminutes.com/docs/groovy/)
|
13
13
|
* SmartThings' [Groovy Basics](http://docs.smartthings.com/en/latest/getting-started/groovy-basics.html)
|
14
|
+
* a few of JDriven's [online Groovy Koans](http://www.groovy-koans.org/)
|
14
15
|
|
15
16
|
Dive deeper with
|
16
17
|
|
@@ -5,12 +5,19 @@
|
|
5
5
|
* the official [Groovy Language Documentation](http://docs.groovy-lang.org/docs/latest/html/documentation/)
|
6
6
|
* Apache's [Groovy Documentation](http://www.groovy-lang.org/documentation.html), including the great [Learn Groovy](http://www.groovy-lang.org/learn.html) section
|
7
7
|
|
8
|
-
|
8
|
+
## Tools
|
9
9
|
|
10
10
|
* [SDKman](http://sdkman.io/)
|
11
11
|
* [Groovy Eclipse](https://github.com/groovy/groovy-eclipse/wiki)
|
12
12
|
* [IntelliJ Idea](https://www.jetbrains.com/idea/download/)
|
13
13
|
|
14
|
+
## Technologies
|
15
|
+
|
16
|
+
* [Gradle](https://gradle.org/), One Build Tool to Rule Them All
|
17
|
+
* [Spock](http://spockframework.org/), The Next Generation of JVM language testing
|
18
|
+
* [Ratpack](https://ratpack.io/), mini microservices with martinis
|
19
|
+
* [Grails](https://grails.org/), "You must choose, but choose wisely."
|
20
|
+
|
14
21
|
## Collaboration
|
15
22
|
|
16
23
|
* the [Groovy Community](http://www.groovy-lang.org/community.html) entry of the Groovy Language Documentation
|
@@ -18,141 +18,73 @@ Run the test suite. It can be run with `cargo`, which is installed with rust.
|
|
18
18
|
$ cargo test
|
19
19
|
```
|
20
20
|
|
21
|
-
This will
|
21
|
+
This will compile the `hello-world` crate and run the test, which fails.
|
22
22
|
|
23
|
-
To fix this, create a new directory called `src`.
|
24
|
-
Create a new file called, `lib.rs`, inside the `src` directory.
|
25
|
-
|
26
|
-
## Step 2
|
27
|
-
|
28
|
-
Run the test again. It will give you a new error, another compile error.
|
29
|
-
Our `lib.rs` does not contain any code, specifically the `hello()`
|
30
|
-
function that our test is looking for.
|
31
|
-
|
32
|
-
### Fixing the Error
|
33
|
-
|
34
|
-
To fix it, open up the `src/lib.rs` file and add the following code:
|
35
|
-
|
36
|
-
```rust
|
37
|
-
pub fn hello(name: Option<&str>) -> String {
|
38
|
-
"".to_string()
|
39
|
-
}
|
40
23
|
```
|
41
|
-
|
42
|
-
|
43
|
-
crate. `lib.rs`, by default, is our crate root and our test
|
44
|
-
is looking for the `hello()` function there.
|
45
|
-
|
46
|
-
The code we are adding to `lib.rs` defines a public function (`pub fn`) that is called "hello".
|
47
|
-
The function accepts a `name` as an optional argument (`Option`).
|
48
|
-
The function returns a `String`.
|
49
|
-
We start by returning an empty string (`"".to_string()`).
|
50
|
-
|
51
|
-
## Step 3
|
52
|
-
|
53
|
-
Run the test again.
|
54
|
-
|
55
|
-
This time, code compilation will pass and we receive actual test failures.
|
56
|
-
|
57
|
-
```
|
58
|
-
running 3 tests
|
59
|
-
test test_other_same_name ... ignored
|
60
|
-
test test_sample_name ... ignored
|
61
|
-
test test_no_name ... FAILED
|
24
|
+
running 1 test
|
25
|
+
test test_hello_world ... FAILED
|
62
26
|
|
63
27
|
failures:
|
64
28
|
|
65
|
-
----
|
66
|
-
thread '
|
67
|
-
(left: `"Hello, World!"`, right: `""`)', tests/hello-world.rs:5
|
68
|
-
|
29
|
+
---- test_hello_world stdout ----
|
30
|
+
thread 'test_hello_world' panicked at 'assertion failed: `(left == right)`
|
31
|
+
(left: `"Hello, World!"`, right: `"Goodbye, World!"`)', tests/hello-world.rs:5
|
69
32
|
|
70
33
|
failures:
|
71
|
-
|
34
|
+
test_hello_world
|
72
35
|
|
73
|
-
test result: FAILED. 0 passed; 1 failed;
|
36
|
+
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured
|
74
37
|
```
|
75
38
|
|
76
39
|
### Understanding Test Failures
|
77
40
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
The `test_no_name` failure states that it is expecting the value,
|
82
|
-
`"Hello, World!"`, to be returned from `hello("")`.
|
41
|
+
The `test_hello_world` failure states that it is expecting the value,
|
42
|
+
`"Hello, World!"`, to be returned from `hello()`.
|
83
43
|
The left side of the assertion (at line 5) should be equal to the right side.
|
84
44
|
|
85
45
|
```
|
86
|
-
----
|
87
|
-
thread '
|
88
|
-
(left: `"Hello, World!"`, right: `""`)', tests/hello-world.rs:5
|
46
|
+
---- test_hello_world stdout ----
|
47
|
+
thread 'test_hello_world' panicked at 'assertion failed: `(left == right)`
|
48
|
+
(left: `"Hello, World!"`, right: `"Goodbye, World!"`)', tests/hello-world.rs:5
|
89
49
|
```
|
90
50
|
|
91
|
-
|
92
|
-
|
51
|
+
### Fixing the Error
|
52
|
+
|
53
|
+
To fix it, open up `src/lib.rs` and change the `hello` function to return
|
54
|
+
`"Hello, World!"` instead of `"Goodbye, World!"`.
|
93
55
|
|
94
56
|
```rust
|
95
|
-
pub fn hello(
|
96
|
-
"Hello, World!"
|
57
|
+
pub fn hello() -> &'static str {
|
58
|
+
"Hello, World!"
|
97
59
|
}
|
98
60
|
```
|
99
61
|
|
100
|
-
## Step
|
62
|
+
## Step 2
|
101
63
|
|
102
64
|
Run the test again. This time, it will pass.
|
103
65
|
|
104
66
|
```
|
105
|
-
running 3 tests
|
106
|
-
test test_other_same_name ... ignored
|
107
|
-
test test_sample_name ... ignored
|
108
|
-
test test_no_name ... ok
|
109
|
-
|
110
|
-
test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured
|
111
|
-
|
112
|
-
Doc-tests hello-world
|
113
|
-
|
114
67
|
running 0 tests
|
115
68
|
|
116
69
|
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured
|
117
|
-
```
|
118
|
-
|
119
|
-
You may have noticed compiler warnings earlier:
|
120
70
|
|
121
|
-
|
122
|
-
Compiling hello-world v0.0.0
|
123
|
-
(file:////exercism/exercises/rust/hello-world)
|
124
|
-
src/lib.rs:1:14: 1:18 warning: unused variable: `name`, #[warn(unused_variables)] on by default
|
125
|
-
src/lib.rs:1 pub fn hello(name: Option<&str>) -> String {
|
126
|
-
^~~~
|
127
|
-
```
|
128
|
-
|
129
|
-
Our `hello` function does not use the `name` argument so the
|
130
|
-
compiler is letting us know that we could potentially remove the
|
131
|
-
argument from our function (it likes "clean code").
|
132
|
-
|
133
|
-
As we make the rest of the tests pass, we will find that we need the `name`
|
134
|
-
argument, so don't delete it.
|
135
|
-
|
136
|
-
Activate the next test. Open the `tests/hello-world.rs` file.
|
137
|
-
Delete the `#[ignore]` line for the `test_sample_name` test.
|
71
|
+
Running target/debug/deps/hello_world-bd1f06dc726ef14f
|
138
72
|
|
139
|
-
|
73
|
+
running 1 test
|
74
|
+
test test_hello_world ... ok
|
140
75
|
|
141
|
-
|
76
|
+
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured
|
142
77
|
|
143
|
-
|
144
|
-
is a good reference for understanding rust.
|
145
|
-
The cargo output may also have hints to help you, depending on the errors you get.
|
146
|
-
For example, `rustc --explain E0425` will explain unresolved name errors.
|
78
|
+
Doc-tests hello-world
|
147
79
|
|
148
|
-
|
80
|
+
running 0 tests
|
149
81
|
|
150
|
-
|
151
|
-
|
82
|
+
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured
|
83
|
+
```
|
152
84
|
|
153
85
|
## Submit
|
154
86
|
|
155
|
-
|
87
|
+
Once the test is passing, you can submit your code with the following
|
156
88
|
command:
|
157
89
|
|
158
90
|
```
|