trackler 2.0.6.6 → 2.0.6.7
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/perfect-numbers/description.md +2 -2
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/exercises/allergies/src/allergies.h +2 -2
- data/tracks/c/exercises/allergies/src/example.h +2 -2
- data/tracks/c/exercises/anagram/src/anagram.h +2 -2
- data/tracks/c/exercises/anagram/test/test_anagram.c +66 -79
- data/tracks/c/exercises/atbash-cipher/src/example.h +2 -2
- data/tracks/c/exercises/beer-song/src/example.h +2 -2
- data/tracks/c/exercises/binary-search/src/example.h +2 -2
- data/tracks/c/exercises/bob/src/example.h +2 -2
- data/tracks/c/exercises/clock/src/clock.h +2 -2
- data/tracks/c/exercises/difference-of-squares/src/example.h +2 -2
- data/tracks/c/exercises/gigasecond/src/example.h +2 -2
- data/tracks/c/exercises/grains/src/example.h +2 -2
- data/tracks/c/exercises/hamming/src/example.h +2 -2
- data/tracks/c/exercises/hello-world/src/hello_world.h +2 -2
- data/tracks/c/exercises/largest-series-product/src/example.h +2 -2
- data/tracks/c/exercises/leap/src/example.h +2 -2
- data/tracks/c/exercises/meetup/src/example.h +2 -2
- data/tracks/c/exercises/nth-prime/src/example.h +2 -2
- data/tracks/c/exercises/pangram/src/example.h +2 -2
- data/tracks/c/exercises/phone-number/src/example.h +2 -2
- data/tracks/c/exercises/raindrops/src/example.h +2 -2
- data/tracks/c/exercises/rna-transcription/src/example.h +2 -2
- data/tracks/c/exercises/robot-simulator/src/robot_simulator.h +2 -2
- data/tracks/c/exercises/roman-numerals/src/example.h +2 -2
- data/tracks/c/exercises/series/src/series.h +2 -2
- data/tracks/c/exercises/sieve/src/sieve.h +2 -2
- data/tracks/c/exercises/sum-of-multiples/src/example.h +2 -2
- data/tracks/c/exercises/word-count/src/word_count.h +2 -2
- data/tracks/erlang/config.json +5 -0
- data/tracks/erlang/exercises/roman-numerals/example.erl +19 -0
- data/tracks/erlang/exercises/roman-numerals/roman_numerals.erl +6 -0
- data/tracks/erlang/exercises/roman-numerals/roman_numerals_tests.erl +46 -0
- data/tracks/haskell/exercises/allergies/src/Allergies.hs +9 -1
- data/tracks/haskell/exercises/grade-school/HINTS.md +3 -3
- data/tracks/haskell/exercises/grade-school/src/School.hs +7 -3
- data/tracks/haskell/exercises/meetup/HINTS.md +3 -5
- data/tracks/haskell/exercises/meetup/src/Meetup.hs +14 -2
- data/tracks/haskell/exercises/space-age/HINTS.md +3 -5
- data/tracks/haskell/exercises/space-age/src/SpaceAge.hs +8 -1
- data/tracks/java/config.json +7 -1
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/java/exercises/sublist/build.gradle +17 -0
- data/tracks/java/exercises/sublist/src/example/java/Relationship.java +1 -0
- data/tracks/java/exercises/sublist/src/example/java/RelationshipComputer.java +29 -0
- data/tracks/java/exercises/sublist/src/main/java/Relationship.java +5 -0
- data/tracks/java/exercises/sublist/src/main/java/RelationshipComputer.java +5 -0
- data/tracks/java/exercises/sublist/src/test/java/RelationshipComputerTest.java +183 -0
- data/tracks/lua/exercises/run-length-encoding/example.lua +1 -1
- data/tracks/lua/exercises/run-length-encoding/run-length-encoding_spec.lua +8 -0
- data/tracks/lua/exercises/sublist/sublist_spec.lua +4 -0
- data/tracks/ruby/{SETUP.md → exercises/TRACK_HINTS.md} +0 -0
- data/tracks/rust/{SETUP.md → exercises/TRACK_HINTS.md} +0 -0
- data/tracks/rust/problem_ordering.md +41 -0
- data/tracks/scala/config.json +14 -0
- data/tracks/scala/exercises/saddle-points/build.sbt +2 -2
- data/tracks/scala/exercises/say/build.sbt +2 -2
- data/tracks/scala/exercises/secret-handshake/build.sbt +2 -2
- data/tracks/scala/exercises/series/build.sbt +3 -2
- data/tracks/scheme/config.json +67 -14
- metadata +14 -10
- data/tracks/haskell/SETUP.md +0 -52
- data/tracks/haskell/exercises/allergies/.meta/DONT-TEST-STUB +0 -1
- data/tracks/haskell/exercises/grade-school/.meta/DONT-TEST-STUB +0 -2
- data/tracks/haskell/exercises/meetup/.meta/DONT-TEST-STUB +0 -2
- data/tracks/haskell/exercises/space-age/.meta/DONT-TEST-STUB +0 -1
- data/tracks/rust/problems.md +0 -88
@@ -8,6 +8,6 @@ and implement the following functions:
|
|
8
8
|
- `grade`
|
9
9
|
- `sorted`
|
10
10
|
|
11
|
-
You will find a dummy data declaration
|
12
|
-
define the functions and create a meaningful
|
13
|
-
synonym.
|
11
|
+
You will find a dummy data declaration and type signatures already in
|
12
|
+
place, but it is up to you to define the functions and create a meaningful
|
13
|
+
data type, newtype or type synonym.
|
@@ -2,10 +2,14 @@ module School (School, add, empty, grade, sorted) where
|
|
2
2
|
|
3
3
|
data School = Dummy
|
4
4
|
|
5
|
-
add
|
5
|
+
add :: Int -> String -> School -> School
|
6
|
+
add gradeNum student school = undefined
|
6
7
|
|
8
|
+
empty :: School
|
7
9
|
empty = undefined
|
8
10
|
|
9
|
-
grade
|
11
|
+
grade :: Int -> School -> [String]
|
12
|
+
grade gradeNum school = undefined
|
10
13
|
|
11
|
-
sorted
|
14
|
+
sorted :: School -> [(Int, [String])]
|
15
|
+
sorted school = undefined
|
@@ -1,8 +1,6 @@
|
|
1
1
|
## Hints
|
2
2
|
|
3
|
-
To complete this exercise, you need to
|
4
|
-
and `Schedule`, and implement the function `meetupDay`.
|
3
|
+
To complete this exercise, you need to implement the `meetupDay` function.
|
5
4
|
|
6
|
-
You will find the type signature for `meetupDay`
|
7
|
-
|
8
|
-
meaningful data types, newtypes or type synonyms.
|
5
|
+
You will find the type signature for `meetupDay` already in place,
|
6
|
+
but it is up to you to define the function.
|
@@ -2,8 +2,20 @@ module Meetup (Weekday(..), Schedule(..), meetupDay) where
|
|
2
2
|
|
3
3
|
import Data.Time.Calendar (Day)
|
4
4
|
|
5
|
-
data
|
6
|
-
|
5
|
+
data Weekday = Monday
|
6
|
+
| Tuesday
|
7
|
+
| Wednesday
|
8
|
+
| Thursday
|
9
|
+
| Friday
|
10
|
+
| Saturday
|
11
|
+
| Sunday
|
12
|
+
|
13
|
+
data Schedule = First
|
14
|
+
| Second
|
15
|
+
| Third
|
16
|
+
| Fourth
|
17
|
+
| Last
|
18
|
+
| Teenth
|
7
19
|
|
8
20
|
meetupDay :: Schedule -> Weekday -> Integer -> Int -> Day
|
9
21
|
meetupDay schedule weekday year month = undefined
|
@@ -1,8 +1,9 @@
|
|
1
1
|
## Hints
|
2
2
|
|
3
|
-
In this exercise,
|
3
|
+
In this exercise, we provided the definition of the
|
4
4
|
[algebric data data](http://learnyouahaskell.com/making-our-own-types-and-typeclasses)
|
5
|
-
named `Planet
|
5
|
+
named `Planet`.
|
6
|
+
You need to implement the `ageOn` function, that calculates how many
|
6
7
|
years old someone would be on a `Planet`, given an age in seconds.
|
7
8
|
|
8
9
|
Your can use the provided signature if you are unsure about the types, but
|
@@ -11,6 +12,3 @@ don't let it restrict your creativity:
|
|
11
12
|
```haskell
|
12
13
|
ageOn :: Planet -> Float -> Float
|
13
14
|
```
|
14
|
-
|
15
|
-
Keep in mind that the test suite will not compile until you correctly
|
16
|
-
implement the data type `Planet`.
|
data/tracks/java/config.json
CHANGED
@@ -53,7 +53,8 @@
|
|
53
53
|
"all-your-base",
|
54
54
|
"custom-set",
|
55
55
|
"wordy",
|
56
|
-
"palindrome-products"
|
56
|
+
"palindrome-products",
|
57
|
+
"sublist"
|
57
58
|
],
|
58
59
|
"exercises": [
|
59
60
|
{
|
@@ -305,6 +306,11 @@
|
|
305
306
|
"slug": "palindrome-products",
|
306
307
|
"difficulty": 1,
|
307
308
|
"topics": []
|
309
|
+
},
|
310
|
+
{
|
311
|
+
"slug": "sublist",
|
312
|
+
"difficulty": 1,
|
313
|
+
"topics": []
|
308
314
|
}
|
309
315
|
],
|
310
316
|
"deprecated": [
|
@@ -0,0 +1,17 @@
|
|
1
|
+
apply plugin: "java"
|
2
|
+
apply plugin: "eclipse"
|
3
|
+
apply plugin: "idea"
|
4
|
+
|
5
|
+
repositories {
|
6
|
+
mavenCentral()
|
7
|
+
}
|
8
|
+
|
9
|
+
dependencies {
|
10
|
+
testCompile "junit:junit:4.12"
|
11
|
+
}
|
12
|
+
test {
|
13
|
+
testLogging {
|
14
|
+
exceptionFormat = 'full'
|
15
|
+
events = ["passed", "failed", "skipped"]
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
tracks/java/exercises/sublist/src/example/java/../../main/java/Relationship.java
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import java.util.List;
|
2
|
+
|
3
|
+
final class RelationshipComputer<T extends Comparable> {
|
4
|
+
|
5
|
+
Relationship computeRelationship(final List<T> firstList, final List<T> secondList) {
|
6
|
+
if (firstList.equals(secondList)) return Relationship.EQUAL;
|
7
|
+
if (checkIfSublist(firstList, secondList)) return Relationship.SUBLIST;
|
8
|
+
if (checkIfSublist(secondList, firstList)) return Relationship.SUPERLIST;
|
9
|
+
return Relationship.UNEQUAL;
|
10
|
+
}
|
11
|
+
|
12
|
+
private boolean checkIfSublist(final List<T> firstList, final List<T> secondList) {
|
13
|
+
final int firstListSize = firstList.size();
|
14
|
+
final int secondListSize = secondList.size();
|
15
|
+
|
16
|
+
if (firstListSize > secondListSize) return false;
|
17
|
+
|
18
|
+
final int numberOfSublistCandidates = secondListSize - firstListSize + 1;
|
19
|
+
|
20
|
+
for (int startIndex = 0; startIndex < numberOfSublistCandidates; startIndex++) {
|
21
|
+
if (secondList.subList(startIndex, startIndex + firstListSize).equals(firstList)) {
|
22
|
+
return true;
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
return false;
|
27
|
+
}
|
28
|
+
|
29
|
+
}
|
@@ -0,0 +1,183 @@
|
|
1
|
+
import org.junit.Ignore;
|
2
|
+
import org.junit.Test;
|
3
|
+
|
4
|
+
import java.util.List;
|
5
|
+
|
6
|
+
import static java.util.Arrays.asList;
|
7
|
+
import static java.util.Collections.emptyList;
|
8
|
+
import static org.junit.Assert.assertEquals;
|
9
|
+
|
10
|
+
public class RelationshipComputerTest {
|
11
|
+
|
12
|
+
@Test
|
13
|
+
public void testThatTwoEmptyListsAreConsideredEqual() {
|
14
|
+
Relationship computedRelationship = new RelationshipComputer<>().computeRelationship(
|
15
|
+
emptyList(),
|
16
|
+
emptyList());
|
17
|
+
|
18
|
+
assertEquals(Relationship.EQUAL, computedRelationship);
|
19
|
+
}
|
20
|
+
|
21
|
+
@Ignore
|
22
|
+
@Test
|
23
|
+
public void testEmptyListIsSublistOfNonEmptyList() {
|
24
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
25
|
+
emptyList(),
|
26
|
+
asList(1, 2, 3));
|
27
|
+
|
28
|
+
assertEquals(Relationship.SUBLIST, relationship);
|
29
|
+
}
|
30
|
+
|
31
|
+
@Ignore
|
32
|
+
@Test
|
33
|
+
public void testNonEmptyListIsSuperlistOfEmptyList() {
|
34
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
35
|
+
asList('1', '2', '3'),
|
36
|
+
emptyList());
|
37
|
+
|
38
|
+
assertEquals(Relationship.SUPERLIST, relationship);
|
39
|
+
}
|
40
|
+
|
41
|
+
@Ignore
|
42
|
+
@Test
|
43
|
+
public void testListIsEqualToItself() {
|
44
|
+
List<String> anyList = asList("1", "2", "3");
|
45
|
+
|
46
|
+
Relationship relationship = new RelationshipComputer<String>().computeRelationship(
|
47
|
+
anyList,
|
48
|
+
anyList);
|
49
|
+
|
50
|
+
assertEquals(Relationship.EQUAL, relationship);
|
51
|
+
}
|
52
|
+
|
53
|
+
@Ignore
|
54
|
+
@Test
|
55
|
+
public void testDifferentListsOfTheSameLengthAreUnequal() {
|
56
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
57
|
+
asList(1, 2, 3),
|
58
|
+
asList(2, 3, 4));
|
59
|
+
|
60
|
+
assertEquals(Relationship.UNEQUAL, relationship);
|
61
|
+
}
|
62
|
+
|
63
|
+
@Ignore
|
64
|
+
@Test
|
65
|
+
public void testSublistCheckDoesNotAbortAfterFalseStart() {
|
66
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
67
|
+
asList('1', '2', '5'),
|
68
|
+
asList('0', '1', '2', '3', '1', '2', '5', '6'));
|
69
|
+
|
70
|
+
assertEquals(Relationship.SUBLIST, relationship);
|
71
|
+
}
|
72
|
+
|
73
|
+
@Ignore
|
74
|
+
@Test
|
75
|
+
public void testSublistCheckHandlesExtraneousRepeatsOfFirstEntry() {
|
76
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
77
|
+
asList("1", "1", "2"),
|
78
|
+
asList("0", "1", "1", "1", "2", "1", "2"));
|
79
|
+
|
80
|
+
assertEquals(Relationship.SUBLIST, relationship);
|
81
|
+
}
|
82
|
+
|
83
|
+
@Ignore
|
84
|
+
@Test
|
85
|
+
public void testSublistAtStart() {
|
86
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
87
|
+
asList(0, 1, 2),
|
88
|
+
asList(0, 1, 2, 3, 4, 5));
|
89
|
+
|
90
|
+
assertEquals(Relationship.SUBLIST, relationship);
|
91
|
+
}
|
92
|
+
|
93
|
+
@Ignore
|
94
|
+
@Test
|
95
|
+
public void testSublistInMiddle() {
|
96
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
97
|
+
asList('2', '3', '4'),
|
98
|
+
asList('0', '1', '2', '3', '4', '5'));
|
99
|
+
|
100
|
+
assertEquals(Relationship.SUBLIST, relationship);
|
101
|
+
}
|
102
|
+
|
103
|
+
@Ignore
|
104
|
+
@Test
|
105
|
+
public void testSublistAtEnd() {
|
106
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
107
|
+
asList("3", "4", "5"),
|
108
|
+
asList("0", "1", "2", "3", "4", "5"));
|
109
|
+
|
110
|
+
assertEquals(Relationship.SUBLIST, relationship);
|
111
|
+
}
|
112
|
+
|
113
|
+
@Ignore
|
114
|
+
@Test
|
115
|
+
public void testAtStartOfSuperlist() {
|
116
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
117
|
+
asList(0, 1, 2, 3, 4, 5),
|
118
|
+
asList(0, 1, 2));
|
119
|
+
|
120
|
+
assertEquals(Relationship.SUPERLIST, relationship);
|
121
|
+
}
|
122
|
+
|
123
|
+
@Ignore
|
124
|
+
@Test
|
125
|
+
public void testInMiddleOfSuperlist() {
|
126
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
127
|
+
asList('0', '1', '2', '3', '4', '5'),
|
128
|
+
asList('2', '3'));
|
129
|
+
|
130
|
+
assertEquals(Relationship.SUPERLIST, relationship);
|
131
|
+
}
|
132
|
+
|
133
|
+
@Ignore
|
134
|
+
@Test
|
135
|
+
public void testAtEndOfSuperlist() {
|
136
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
137
|
+
asList("0", "1", "2", "3", "4", "5"),
|
138
|
+
asList("3", "4", "5"));
|
139
|
+
|
140
|
+
assertEquals(Relationship.SUPERLIST, relationship);
|
141
|
+
}
|
142
|
+
|
143
|
+
@Ignore
|
144
|
+
@Test
|
145
|
+
public void testFirstListMissingElementFromSecondList() {
|
146
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
147
|
+
asList(1, 3),
|
148
|
+
asList(1, 2, 3));
|
149
|
+
|
150
|
+
assertEquals(Relationship.UNEQUAL, relationship);
|
151
|
+
}
|
152
|
+
|
153
|
+
@Ignore
|
154
|
+
@Test
|
155
|
+
public void testSecondListMissingElementFromFirstList() {
|
156
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
157
|
+
asList('1', '2', '3'),
|
158
|
+
asList('1', '3'));
|
159
|
+
|
160
|
+
assertEquals(Relationship.UNEQUAL, relationship);
|
161
|
+
}
|
162
|
+
|
163
|
+
@Ignore
|
164
|
+
@Test
|
165
|
+
public void testThatListOrderingIsAccountedFor() {
|
166
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
167
|
+
asList("1", "2", "3"),
|
168
|
+
asList("3", "2", "1"));
|
169
|
+
|
170
|
+
assertEquals(Relationship.UNEQUAL, relationship);
|
171
|
+
}
|
172
|
+
|
173
|
+
@Ignore
|
174
|
+
@Test
|
175
|
+
public void testThatListsWithSameDigitsButDifferentNumbersAreUnequal() {
|
176
|
+
Relationship relationship = new RelationshipComputer<>().computeRelationship(
|
177
|
+
asList(1, 0, 1),
|
178
|
+
asList(10, 1));
|
179
|
+
|
180
|
+
assertEquals(Relationship.UNEQUAL, relationship);
|
181
|
+
}
|
182
|
+
|
183
|
+
}
|
@@ -5,10 +5,18 @@ describe('run-length-encoding', function()
|
|
5
5
|
assert.equal('2A3B4C', rle.encode('AABBBCCCC'))
|
6
6
|
end)
|
7
7
|
|
8
|
+
it('should encode strings with multi-digit run lengths', function()
|
9
|
+
assert.equal('2A10B4C', rle.encode('AABBBBBBBBBBCCCC'))
|
10
|
+
end)
|
11
|
+
|
8
12
|
it('should decode simple strings', function()
|
9
13
|
assert.equal('AABBBCCCC', rle.decode('2A3B4C'))
|
10
14
|
end)
|
11
15
|
|
16
|
+
it('should decode strings with multi-digit run lengths', function()
|
17
|
+
assert.equal('AABBBBBBBBBBCCCC', rle.decode('2A10B4C'))
|
18
|
+
end)
|
19
|
+
|
12
20
|
it('should not encode characters with a run length of 1', function()
|
13
21
|
assert.equal('2AB4CD', rle.encode('AABCCCCD'))
|
14
22
|
end)
|
@@ -13,6 +13,10 @@ describe('sublist', function()
|
|
13
13
|
assert.equal(true, is_sublist({ 1, 2, 3 }, { 1, 2, 3 }))
|
14
14
|
end)
|
15
15
|
|
16
|
+
it('should not consider a subset to be a sublist', function()
|
17
|
+
assert.equal(false, is_sublist({ 1, 2, 3 }, { 2, 1, 3 }))
|
18
|
+
end)
|
19
|
+
|
16
20
|
it('should find a sublist at the beginning of a list', function()
|
17
21
|
assert.equal(true, is_sublist({ 11, 22, 33 }, { 11, 22, 33, 44, 55 }))
|
18
22
|
end)
|
File without changes
|
File without changes
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# Rust Track Problem Order
|
2
|
+
|
3
|
+
The actual source of truth of problem order and topics is [config.json](config.json), but this file documents our reasoning behind the problem order in that file.
|
4
|
+
|
5
|
+
## Background
|
6
|
+
|
7
|
+
- https://github.com/exercism/xrust/issues/126
|
8
|
+
- https://github.com/exercism/xrust/issues/127
|
9
|
+
- http://designisrefactoring.com/2016/07/09/exercism-shouldnt-make-you-cry/
|
10
|
+
|
11
|
+
## Our Approach
|
12
|
+
|
13
|
+
We order our problems for students who are learning Rust. With that audience in mind, we follow two rules when adding new problems.
|
14
|
+
|
15
|
+
- A exercise should introduce one new concept
|
16
|
+
- Exercises should progress from Rust basics to advanced Rust concepts
|
17
|
+
|
18
|
+
### One New Concept
|
19
|
+
|
20
|
+
If a problem solution requires students to use both `Result` and `HashMap`, then at least one of these concepts should be introduced by an earlier problem.
|
21
|
+
|
22
|
+
If the track has several problems that rely on a concept, group them together to reinforce learning.
|
23
|
+
|
24
|
+
### Progress Through Rust
|
25
|
+
|
26
|
+
#### Early Problems
|
27
|
+
|
28
|
+
Early problems should focus on Rust syntax and concepts that are present in many programming languages: conditionals, looping, higher-order-functions.
|
29
|
+
|
30
|
+
#### Middle Problems
|
31
|
+
|
32
|
+
Problems in the middle of the of the track should introduce concepts that are less common. `Result` and `Option` and Traits, for example. Or syntax such as `while let`.
|
33
|
+
|
34
|
+
Through the middle section of the track students should gain familiarity with a wide range of Rust concepts.
|
35
|
+
|
36
|
+
#### Later Problems
|
37
|
+
|
38
|
+
Problems late in the track should do one of two things:
|
39
|
+
|
40
|
+
1. Introduce advanced concepts -- Lifetimes, Concurrency, Unsafety
|
41
|
+
2. Require a complex solution that synthesizes all the knowledge students have gained to date
|
data/tracks/scala/config.json
CHANGED
@@ -367,12 +367,20 @@
|
|
367
367
|
"slug": "saddle-points",
|
368
368
|
"difficulty": 1,
|
369
369
|
"topics": [
|
370
|
+
"Matrices",
|
371
|
+
"Lists",
|
372
|
+
"Sets",
|
373
|
+
"Tuples"
|
370
374
|
]
|
371
375
|
},
|
372
376
|
{
|
373
377
|
"slug": "say",
|
374
378
|
"difficulty": 1,
|
375
379
|
"topics": [
|
380
|
+
"Strings",
|
381
|
+
"Transforming",
|
382
|
+
"Text formatting",
|
383
|
+
"Optional values"
|
376
384
|
]
|
377
385
|
},
|
378
386
|
{
|
@@ -385,12 +393,18 @@
|
|
385
393
|
"slug": "secret-handshake",
|
386
394
|
"difficulty": 1,
|
387
395
|
"topics": [
|
396
|
+
"Lists",
|
397
|
+
"Strings",
|
398
|
+
"Bitwise operations"
|
388
399
|
]
|
389
400
|
},
|
390
401
|
{
|
391
402
|
"slug": "series",
|
392
403
|
"difficulty": 1,
|
393
404
|
"topics": [
|
405
|
+
"Strings",
|
406
|
+
"Sequences",
|
407
|
+
"Transforming"
|
394
408
|
]
|
395
409
|
},
|
396
410
|
{
|
@@ -1,3 +1,3 @@
|
|
1
|
-
scalaVersion := "2.
|
1
|
+
scalaVersion := "2.12.1"
|
2
2
|
|
3
|
-
libraryDependencies += "org.scalatest"
|
3
|
+
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
|
@@ -1,3 +1,3 @@
|
|
1
|
-
scalaVersion := "2.
|
1
|
+
scalaVersion := "2.12.1"
|
2
2
|
|
3
|
-
libraryDependencies += "org.scalatest"
|
3
|
+
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
|
@@ -1,3 +1,3 @@
|
|
1
|
-
scalaVersion := "2.
|
1
|
+
scalaVersion := "2.12.1"
|
2
2
|
|
3
|
-
libraryDependencies += "org.scalatest"
|
3
|
+
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
|
data/tracks/scheme/config.json
CHANGED
@@ -3,20 +3,73 @@
|
|
3
3
|
"language": "Scheme",
|
4
4
|
"repository": "https://github.com/exercism/xscheme",
|
5
5
|
"active": true,
|
6
|
-
"
|
7
|
-
|
8
|
-
"
|
9
|
-
"
|
10
|
-
"
|
11
|
-
|
12
|
-
|
13
|
-
"
|
14
|
-
"
|
15
|
-
"
|
16
|
-
|
17
|
-
|
18
|
-
"
|
19
|
-
"
|
6
|
+
"exercises" : [
|
7
|
+
{
|
8
|
+
"slug": "hello-world",
|
9
|
+
"difficulty": 1,
|
10
|
+
"topics": []
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"slug": "hamming",
|
14
|
+
"difficulty": 1,
|
15
|
+
"topics": []
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"slug": "leap",
|
19
|
+
"difficulty": 1,
|
20
|
+
"topics": []
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"slug": "grains",
|
24
|
+
"difficulty": 1,
|
25
|
+
"topics": []
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"slug": "bob",
|
29
|
+
"difficulty": 1,
|
30
|
+
"topics": []
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"slug": "raindrops",
|
34
|
+
"difficulty": 1,
|
35
|
+
"topics": []
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"slug": "rna-transcription",
|
39
|
+
"difficulty": 1,
|
40
|
+
"topics": []
|
41
|
+
},
|
42
|
+
{
|
43
|
+
"slug": "robot-name",
|
44
|
+
"difficulty": 1,
|
45
|
+
"topics": []
|
46
|
+
},
|
47
|
+
{
|
48
|
+
"slug": "phone-number",
|
49
|
+
"difficulty": 1,
|
50
|
+
"topics": []
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"slug": "anagram",
|
54
|
+
"difficulty": 1,
|
55
|
+
"topics": []
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"slug": "nucleotide-count",
|
59
|
+
"difficulty": 1,
|
60
|
+
"topics": []
|
61
|
+
},
|
62
|
+
{
|
63
|
+
"slug": "difference-of-squares",
|
64
|
+
"difficulty": 1,
|
65
|
+
"topics": []
|
66
|
+
},
|
67
|
+
{
|
68
|
+
"slug": "list-ops",
|
69
|
+
"difficulty": 1,
|
70
|
+
"topics": []
|
71
|
+
}
|
72
|
+
|
20
73
|
],
|
21
74
|
"deprecated": [
|
22
75
|
|