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