trackler 2.0.6.20 → 2.0.6.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/TOPICS.txt +1 -0
- data/lib/trackler/version.rb +1 -1
- data/tracks/csharp/docs/INSTALLATION.md +85 -3
- data/tracks/go/config.json +11 -3
- data/tracks/julia/config.json +20 -1
- data/tracks/julia/exercises/anagram/anagram.jl +4 -0
- data/tracks/julia/exercises/anagram/example.jl +43 -0
- data/tracks/julia/exercises/anagram/runtests.jl +68 -0
- data/tracks/julia/exercises/leap/example.jl +5 -0
- data/tracks/julia/exercises/leap/leap.jl +4 -0
- data/tracks/julia/exercises/leap/runtests.jl +20 -0
- data/tracks/ocaml/exercises/atbash-cipher/example.ml +1 -1
- data/tracks/ocaml/exercises/dominoes/example.ml +1 -1
- data/tracks/ocaml/exercises/etl/example.ml +1 -1
- data/tracks/ocaml/exercises/hangman/example.ml +1 -1
- data/tracks/ocaml/exercises/nucleotide-count/example.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/controller.ml +8 -4
- data/tracks/ocaml/tools/test-generator/src/files.ml +24 -0
- data/tracks/ocaml/tools/test-generator/src/test_gen.ml +4 -1
- data/tracks/scala/config.json +15 -1
- data/tracks/scala/exercises/anagram/build.sbt +3 -2
- data/tracks/scala/exercises/anagram/src/test/scala/AnagramTest.scala +1 -1
- data/tracks/scala/exercises/bob/build.sbt +2 -2
- data/tracks/scala/exercises/bob/src/test/scala/BobTest.scala +1 -1
- data/tracks/scala/exercises/grade-school/build.sbt +3 -2
- data/tracks/scala/exercises/grade-school/src/test/scala/GradeSchoolTest.scala +1 -1
- data/tracks/scala/exercises/hamming/build.sbt +2 -2
- data/tracks/scala/exercises/hamming/src/test/scala/HammingTest.scala +1 -1
- data/tracks/scala/exercises/hello-world/build.sbt +2 -2
- data/tracks/scala/exercises/pangram/build.sbt +4 -2
- data/tracks/scala/exercises/phone-number/build.sbt +3 -2
- data/tracks/scala/exercises/phone-number/src/test/scala/PhoneNumberTest.scala +1 -1
- data/tracks/scala/exercises/word-count/build.sbt +2 -2
- data/tracks/scala/exercises/word-count/src/test/scala/WordCountTest.scala +1 -1
- data/tracks/swift/SETUP.md +6 -6
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6de615318283e74b1a4ba367fe22c32fd9327479
|
4
|
+
data.tar.gz: 51532eb3b0e3814f86ba58b6bd22fedfcaa2b274
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f3edb30c5879a9f5a3c4c5e225911c50cce4c7456448b28d49215439eef1e8d4146cd1da18bfec00a413a6d55bff6d7d9109df70b1d4d7850c837acd015fb97
|
7
|
+
data.tar.gz: 23c1c02ee95b90b4bff31c628bbbd25066e23bcadc339bbaa9d25f4fda817e9e835230f6930a4296621d7ed31a0d9860cc15fc09e3951ca2a5497b16336047b4
|
data/common/TOPICS.txt
CHANGED
data/lib/trackler/version.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
## Installing C#
|
2
2
|
|
3
|
-
|
3
|
+
* [Windows](#windows)
|
4
|
+
* [Mac](#mac)
|
5
|
+
* [Linux](#linux)
|
6
|
+
|
7
|
+
### [Windows](#windows)
|
4
8
|
There are a couple of different ways to get started using C#. The main way is to
|
5
9
|
install Visual Studio, the IDE for C# and related projects.
|
6
10
|
|
@@ -87,7 +91,7 @@ The compiler executable is usually located in the Microsoft.NET\Framework\Versio
|
|
87
91
|
|
88
92
|
Refer to this [MSDN article](http://msdn.microsoft.com/en-us/library/78f4aasd.aspx) for more information on the command line compiler.
|
89
93
|
|
90
|
-
### Mac
|
94
|
+
### [Mac](#mac)
|
91
95
|
|
92
96
|
Install [Xamarin Studio](http://xamarin.com/download).
|
93
97
|
|
@@ -98,6 +102,84 @@ Once installed and running, click on new solution and you'll find the C# library
|
|
98
102
|
|
99
103
|
![Xamarin New Project](http://x.exercism.io/v3/tracks/csharp/docs/img/xamarin-csharp.jpg)
|
100
104
|
|
101
|
-
### Linux
|
105
|
+
### [Linux](#linux)
|
106
|
+
|
107
|
+
.NET Core is available for Linux. Follow the [official installation guide](https://www.microsoft.com/net/core#linuxubuntu) to install the .NET Core development tools.
|
108
|
+
|
109
|
+
After installing .NET Core, fetch the first exercise of the csharp-track:
|
110
|
+
|
111
|
+
```
|
112
|
+
exercism fetch csharp
|
113
|
+
```
|
114
|
+
|
115
|
+
Move into the exercise directory:
|
116
|
+
|
117
|
+
```
|
118
|
+
cd ~/exercism/csharp/hello-world
|
119
|
+
```
|
120
|
+
|
121
|
+
Initialize a new dotnet project
|
122
|
+
|
123
|
+
```
|
124
|
+
dotnet new
|
125
|
+
```
|
126
|
+
|
127
|
+
Several new files are created, among them project.json. We have to add nunit as a dependency in order to run the tests provided in the exercise.
|
128
|
+
|
129
|
+
Add the following lines to the dependency block:
|
130
|
+
|
131
|
+
```
|
132
|
+
"dependencies": {
|
133
|
+
"nunit": "3.6.0",
|
134
|
+
"dotnet-test-nunit": "3.4.0-*"
|
135
|
+
}
|
136
|
+
```
|
137
|
+
|
138
|
+
We also have to specify the testrunner, add this line below the dependency block:
|
139
|
+
|
140
|
+
```
|
141
|
+
"testRunner":"nunit"
|
142
|
+
```
|
143
|
+
|
144
|
+
The complete **project.json** file should look something like this:
|
145
|
+
|
146
|
+
```
|
147
|
+
{
|
148
|
+
"version": "1.0.0-*",
|
149
|
+
"buildOptions": {
|
150
|
+
"debugType": "portable",
|
151
|
+
"emitEntryPoint": true
|
152
|
+
},
|
153
|
+
"dependencies": {
|
154
|
+
"nunit": "3.6.0",
|
155
|
+
"dotnet-test-nunit": "3.4.0-*"
|
156
|
+
},
|
157
|
+
"testRunner":"nunit",
|
158
|
+
"frameworks": {
|
159
|
+
"netcoreapp1.1": {
|
160
|
+
"dependencies": {
|
161
|
+
"Microsoft.NETCore.App": {
|
162
|
+
"type": "platform",
|
163
|
+
"version": "1.1.0"
|
164
|
+
}
|
165
|
+
},
|
166
|
+
"imports": "dnxcore50"
|
167
|
+
}
|
168
|
+
}
|
169
|
+
}
|
170
|
+
```
|
171
|
+
|
172
|
+
Then we can restore the packages using:
|
173
|
+
|
174
|
+
```
|
175
|
+
dotnet restore
|
176
|
+
```
|
177
|
+
|
178
|
+
Compile the project and run the tests with this:
|
179
|
+
|
180
|
+
```
|
181
|
+
dotnet test
|
182
|
+
```
|
183
|
+
|
102
184
|
|
103
185
|
[Mono Develop](http://www.mono-project.com/Mono_For_Linux_Developers) is available for Linux.
|
data/tracks/go/config.json
CHANGED
@@ -74,12 +74,20 @@
|
|
74
74
|
{
|
75
75
|
"difficulty": 1,
|
76
76
|
"slug": "raindrops",
|
77
|
-
"topics": [
|
77
|
+
"topics": [
|
78
|
+
"Control-flow (conditionals)",
|
79
|
+
"Strings",
|
80
|
+
"Filtering"
|
81
|
+
]
|
78
82
|
},
|
79
83
|
{
|
80
|
-
"difficulty":
|
84
|
+
"difficulty": 3,
|
81
85
|
"slug": "acronym",
|
82
|
-
"topics": [
|
86
|
+
"topics": [
|
87
|
+
"Strings",
|
88
|
+
"Transforming",
|
89
|
+
"Regular Expressions"
|
90
|
+
]
|
83
91
|
},
|
84
92
|
{
|
85
93
|
"difficulty": 1,
|
data/tracks/julia/config.json
CHANGED
@@ -5,7 +5,26 @@
|
|
5
5
|
"active": false,
|
6
6
|
"test_pattern": "TODO",
|
7
7
|
"exercises": [
|
8
|
-
|
8
|
+
{
|
9
|
+
"slug": "leap",
|
10
|
+
"difficulty": 1,
|
11
|
+
"topics": [
|
12
|
+
"control-flow (conditionals)",
|
13
|
+
"integers",
|
14
|
+
"mathematics"
|
15
|
+
]
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"slug": "anagram",
|
19
|
+
"difficulty": 2,
|
20
|
+
"topics": [
|
21
|
+
"control-flow (loops)",
|
22
|
+
"arrays",
|
23
|
+
"strings",
|
24
|
+
"sorting",
|
25
|
+
"filtering"
|
26
|
+
]
|
27
|
+
}
|
9
28
|
],
|
10
29
|
"deprecated": [
|
11
30
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# Anagrams are two or more words that composed of the same characters but in a different order
|
2
|
+
|
3
|
+
function is_anagram(s1::AbstractString, s2::AbstractString)
|
4
|
+
# Disable case sensitivity
|
5
|
+
s1 = lowercase(s1)
|
6
|
+
s2 = lowercase(s2)
|
7
|
+
|
8
|
+
# Similar and different-length strings are not anagrams
|
9
|
+
if length(s1) != length(s2) || s1 == s2
|
10
|
+
return false
|
11
|
+
end
|
12
|
+
|
13
|
+
# Calculate count of every character in the first string
|
14
|
+
chr_count = Dict()
|
15
|
+
for c in s1
|
16
|
+
chr_count[c] = get(chr_count, c, 0) + 1
|
17
|
+
end
|
18
|
+
|
19
|
+
# Reduce the count by every character from the second string
|
20
|
+
for c in s2
|
21
|
+
t = get(chr_count, c, 0) - 1
|
22
|
+
if t < 0
|
23
|
+
# Got character that not exist in the first string
|
24
|
+
return false
|
25
|
+
else
|
26
|
+
chr_count[c] = t
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Check all counts to be zeroes
|
31
|
+
return all(i->(i==0), values(chr_count))
|
32
|
+
end
|
33
|
+
|
34
|
+
function detect_anagrams(subject::AbstractString, candidates::AbstractArray)
|
35
|
+
result = []
|
36
|
+
for candidate = candidates
|
37
|
+
if is_anagram(subject, candidate)
|
38
|
+
push!(result, candidate)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
result
|
42
|
+
end
|
43
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
using Base.Test
|
2
|
+
|
3
|
+
include("anagram.jl")
|
4
|
+
|
5
|
+
@testset "no matches" begin
|
6
|
+
@test detect_anagrams("diasper", ["hello", "world", "zombies", "pants"]) == []
|
7
|
+
end
|
8
|
+
|
9
|
+
@testset "detects simple anagram" begin
|
10
|
+
@test detect_anagrams("ant", ["tan", "stand", "at"]) == ["tan"]
|
11
|
+
end
|
12
|
+
|
13
|
+
@testset "does not detect false positives" begin
|
14
|
+
@test detect_anagrams("galea", ["eagle"]) == []
|
15
|
+
end
|
16
|
+
|
17
|
+
@testset "detects multiple anagrams" begin
|
18
|
+
@test detect_anagrams("master", ["stream", "pigeon", "maters"]) == ["stream", "maters"]
|
19
|
+
end
|
20
|
+
|
21
|
+
@testset "does not detect anagram subsets" begin
|
22
|
+
@test detect_anagrams("good", ["dog", "goody"]) == []
|
23
|
+
end
|
24
|
+
|
25
|
+
@testset "detects anagram" begin
|
26
|
+
@test detect_anagrams("listen", ["enlists", "google", "inlets", "banana"]) == ["inlets"]
|
27
|
+
end
|
28
|
+
|
29
|
+
@testset "detects multiple anagrams" begin
|
30
|
+
@test detect_anagrams("allergy", ["gallery", "ballerina", "regally", "clergy", "largely", "leading"]) == ["gallery", "regally", "largely"]
|
31
|
+
end
|
32
|
+
|
33
|
+
@testset "does not detect identical words" begin
|
34
|
+
@test detect_anagrams("corn", ["corn", "dark", "Corn", "rank", "CORN", "cron", "park"]) == ["cron"]
|
35
|
+
end
|
36
|
+
|
37
|
+
@testset "does not detect non-anagrams with identical checksum" begin
|
38
|
+
@test detect_anagrams("mass", ["last"]) == []
|
39
|
+
end
|
40
|
+
|
41
|
+
@testset "detects anagrams case-insensitively" begin
|
42
|
+
@test detect_anagrams("Orchestra", ["cashregister", "Carthorse", "radishes"]) == ["Carthorse"]
|
43
|
+
end
|
44
|
+
|
45
|
+
@testset "detects anagrams using case-insensitive subject" begin
|
46
|
+
@test detect_anagrams("Orchestra", ["cashregister", "carthorse", "radishes"]) == ["carthorse"]
|
47
|
+
end
|
48
|
+
|
49
|
+
@testset "detects anagrams using case-insensitive possible matches" begin
|
50
|
+
@test detect_anagrams("orchestra", ["cashregister", "Carthorse", "radishes"]) == ["Carthorse"]
|
51
|
+
end
|
52
|
+
|
53
|
+
@testset "does not detect a word as its own anagram" begin
|
54
|
+
@test detect_anagrams("banana", ["Banana"]) == []
|
55
|
+
end
|
56
|
+
|
57
|
+
@testset "does not detect a anagram if the original word is repeated" begin
|
58
|
+
@test detect_anagrams("go", ["go Go GO"]) == []
|
59
|
+
end
|
60
|
+
|
61
|
+
@testset "anagrams must use all letters exactly once" begin
|
62
|
+
@test detect_anagrams("tapper", ["patter"]) == []
|
63
|
+
end
|
64
|
+
|
65
|
+
@testset "capital word is not own anagram" begin
|
66
|
+
@test detect_anagrams("BANANA", ["Banana"]) == []
|
67
|
+
end
|
68
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
using Base.Test
|
2
|
+
|
3
|
+
include("leap.jl")
|
4
|
+
|
5
|
+
@testset "Year not divisible by 4: common year" begin
|
6
|
+
@test !is_leap_year(2015)
|
7
|
+
end
|
8
|
+
|
9
|
+
@testset "Year divisible by 4, not divisible by 100: leap year" begin
|
10
|
+
@test is_leap_year(2016)
|
11
|
+
end
|
12
|
+
|
13
|
+
@testset "Year divisible by 100, not divisible by 400: common year" begin
|
14
|
+
@test !is_leap_year(2100)
|
15
|
+
end
|
16
|
+
|
17
|
+
@testset "Year divisible by 400: leap year" begin
|
18
|
+
@test is_leap_year(2000)
|
19
|
+
end
|
20
|
+
|
@@ -16,7 +16,7 @@ let zip_with (xs: 'a list) (ys: 'b list) ~(f: 'a -> 'b -> 'c) =
|
|
16
16
|
let tails (xs: 'a list): ('a list) list =
|
17
17
|
let rec go acc = function
|
18
18
|
| [] -> [] :: acc
|
19
|
-
| (
|
19
|
+
| (_::xs) as l -> go (l :: acc) xs
|
20
20
|
in
|
21
21
|
List.rev @@ go [] xs
|
22
22
|
|
@@ -4,4 +4,4 @@ let transform data =
|
|
4
4
|
let assign_value value character = ((Char.lowercase character), value) in
|
5
5
|
let assign (value, characters) = List.map ~f:(assign_value value) characters in
|
6
6
|
let compare (a, _) (b, _) = Char.compare a b in
|
7
|
-
List.sort compare (List.concat (List.map ~f:assign data))
|
7
|
+
List.sort ~cmp:compare (List.concat (List.map ~f:assign data))
|
@@ -7,5 +7,5 @@ let count s c =
|
|
7
7
|
String.fold ~init:0 ~f s
|
8
8
|
|
9
9
|
let nucleotide_counts s =
|
10
|
-
let f m c = CMap.change m c (function None -> Some 1 | Some n -> Some (n + 1)) in
|
10
|
+
let f m c = CMap.change m c ~f:(function None -> Some 1 | Some n -> Some (n + 1)) in
|
11
11
|
String.fold ~init:CMap.empty ~f s
|
@@ -5,6 +5,7 @@ open Utils
|
|
5
5
|
open Codegen
|
6
6
|
open Special_cases
|
7
7
|
open Template
|
8
|
+
open Files
|
8
9
|
|
9
10
|
type content = string
|
10
11
|
|
@@ -40,19 +41,22 @@ let generate_code ~(slug: string) ~(template_file: content) ~(canonical_data_fil
|
|
40
41
|
|> Result.return
|
41
42
|
)
|
42
43
|
|
43
|
-
let output_tests (files: (string * content * content) list) (output_folder: string): unit =
|
44
|
+
let output_tests (files: (string * content * content) list) (output_folder: string) ~(generated_folder: string): unit =
|
44
45
|
let output_filepath name = output_folder ^ "/" ^ name ^ "/test.ml" in
|
45
46
|
let output1 (slug,t,c) =
|
46
47
|
match generate_code slug t c with
|
47
|
-
| Ok code ->
|
48
|
+
| Ok code ->
|
49
|
+
if backup ~base_folder:generated_folder ~slug ~contents:code
|
50
|
+
then Out_channel.write_all (output_filepath slug) code
|
51
|
+
else print_endline @@ "not generating " ^ slug ^ " as unchanged from previous generated file."
|
48
52
|
| Error e -> print_endline ("Failed when generating " ^ slug ^ ", error: " ^ e) in
|
49
53
|
List.iter files ~f:output1
|
50
54
|
|
51
|
-
let run ~(templates_folder: string) ~(canonical_data_folder: string) ~(output_folder: string) =
|
55
|
+
let run ~(templates_folder: string) ~(canonical_data_folder: string) ~(output_folder: string) ~(generated_folder: string) =
|
52
56
|
let template_files = find_template_files templates_folder in
|
53
57
|
let canonical_data_files = find_canonical_data_files canonical_data_folder in
|
54
58
|
let combined = combine_files template_files canonical_data_files in
|
55
|
-
output_tests combined output_folder
|
59
|
+
output_tests combined output_folder generated_folder
|
56
60
|
|
57
61
|
let check_canonical_data canonical_data_folder =
|
58
62
|
let ok_count = ref 0 in
|
@@ -0,0 +1,24 @@
|
|
1
|
+
open Core.Std
|
2
|
+
|
3
|
+
let mkdir_if_not_present dir =
|
4
|
+
if Sys.file_exists dir = `No
|
5
|
+
then begin
|
6
|
+
Unix.mkdir dir;
|
7
|
+
print_endline @@ "Storing generated files in " ^ dir
|
8
|
+
end
|
9
|
+
else ()
|
10
|
+
|
11
|
+
let backup ~(base_folder: string) ~(slug: string) ~(contents: string): bool =
|
12
|
+
mkdir_if_not_present base_folder;
|
13
|
+
let path = Filename.concat base_folder slug in
|
14
|
+
let matches_contents =
|
15
|
+
Option.try_with (fun () -> In_channel.read_all path)
|
16
|
+
|> Option.map ~f:(String.equal contents)
|
17
|
+
|> Option.value ~default:false
|
18
|
+
in
|
19
|
+
if matches_contents
|
20
|
+
then false
|
21
|
+
else begin
|
22
|
+
Out_channel.write_all path contents;
|
23
|
+
true
|
24
|
+
end
|
@@ -10,6 +10,8 @@ let is_directory =
|
|
10
10
|
exit 1
|
11
11
|
)
|
12
12
|
|
13
|
+
let home_dir = Option.value_exn (Sys.getenv "HOME")
|
14
|
+
|
13
15
|
let command =
|
14
16
|
Command.basic
|
15
17
|
~summary:"Generates test code from canonical data."
|
@@ -18,8 +20,9 @@ let command =
|
|
18
20
|
+> flag "-t" (optional_with_default "./templates" is_directory) ~doc:"string Directory containing templates."
|
19
21
|
+> flag "-c" (optional_with_default "../../../x-common/exercises" is_directory) ~doc:"string Directory containing canonical data."
|
20
22
|
+> flag "-o" (optional_with_default "../../exercises" is_directory) ~doc:"string Directory to output generated tests."
|
23
|
+
+> flag "-g" (optional_with_default (home_dir ^ "/.xocaml-generated") is_directory) ~doc:"string Directory to backup generated tests."
|
21
24
|
)
|
22
|
-
(fun templates_folder canonical_data_folder output_folder () -> Controller.run templates_folder canonical_data_folder output_folder)
|
25
|
+
(fun templates_folder canonical_data_folder output_folder generated_folder () -> Controller.run templates_folder canonical_data_folder output_folder generated_folder)
|
23
26
|
|
24
27
|
let () =
|
25
28
|
Command.run ~version:"0.1" command
|
data/tracks/scala/config.json
CHANGED
@@ -50,18 +50,25 @@
|
|
50
50
|
"slug": "word-count",
|
51
51
|
"difficulty": 1,
|
52
52
|
"topics": [
|
53
|
-
|
53
|
+
"Maps",
|
54
|
+
"Strings",
|
55
|
+
"Transforming"
|
56
|
+
]
|
54
57
|
},
|
55
58
|
{
|
56
59
|
"slug": "pangram",
|
57
60
|
"difficulty": 1,
|
58
61
|
"topics": [
|
62
|
+
"Strings"
|
59
63
|
]
|
60
64
|
},
|
61
65
|
{
|
62
66
|
"slug": "anagram",
|
63
67
|
"difficulty": 1,
|
64
68
|
"topics": [
|
69
|
+
"Sequences",
|
70
|
+
"Strings",
|
71
|
+
"Filtering"
|
65
72
|
]
|
66
73
|
},
|
67
74
|
{
|
@@ -74,12 +81,19 @@
|
|
74
81
|
"slug": "phone-number",
|
75
82
|
"difficulty": 1,
|
76
83
|
"topics": [
|
84
|
+
"Optional values",
|
85
|
+
"Strings",
|
86
|
+
"Parsing",
|
87
|
+
"Transforming"
|
77
88
|
]
|
78
89
|
},
|
79
90
|
{
|
80
91
|
"slug": "grade-school",
|
81
92
|
"difficulty": 1,
|
82
93
|
"topics": [
|
94
|
+
"Maps",
|
95
|
+
"Sequences",
|
96
|
+
"Sorting"
|
83
97
|
]
|
84
98
|
},
|
85
99
|
{
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import org.scalatest._
|
2
2
|
|
3
|
-
class
|
3
|
+
class AnagramTest extends FlatSpec with Matchers {
|
4
4
|
it should "detect no matches" in {
|
5
5
|
val detector = new Anagram("diaper")
|
6
6
|
val anagrams = detector.matches(Seq("hello", "world", "zombies", "pants"))
|
@@ -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"
|
@@ -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/swift/SETUP.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
## Setup
|
2
|
-
|
3
|
-
Go through the project setup instructions for Xcode using Swift:
|
4
|
-
|
5
|
-
http://exercism.io/languages/swift
|
6
|
-
|
1
|
+
## Setup
|
2
|
+
|
3
|
+
Go through the project setup instructions for Xcode using Swift:
|
4
|
+
|
5
|
+
http://exercism.io/languages/swift
|
6
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trackler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.6.
|
4
|
+
version: 2.0.6.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -4024,6 +4024,12 @@ files:
|
|
4024
4024
|
- tracks/julia/docs/RESOURCES.md
|
4025
4025
|
- tracks/julia/docs/TESTS.md
|
4026
4026
|
- tracks/julia/exercises/.keep
|
4027
|
+
- tracks/julia/exercises/anagram/anagram.jl
|
4028
|
+
- tracks/julia/exercises/anagram/example.jl
|
4029
|
+
- tracks/julia/exercises/anagram/runtests.jl
|
4030
|
+
- tracks/julia/exercises/leap/example.jl
|
4031
|
+
- tracks/julia/exercises/leap/leap.jl
|
4032
|
+
- tracks/julia/exercises/leap/runtests.jl
|
4027
4033
|
- tracks/julia/img/.keep
|
4028
4034
|
- tracks/julia/runtests.jl
|
4029
4035
|
- tracks/kotlin/.git
|
@@ -5135,6 +5141,7 @@ files:
|
|
5135
5141
|
- tracks/ocaml/tools/test-generator/src/canonical_data_checker.ml
|
5136
5142
|
- tracks/ocaml/tools/test-generator/src/codegen.ml
|
5137
5143
|
- tracks/ocaml/tools/test-generator/src/controller.ml
|
5144
|
+
- tracks/ocaml/tools/test-generator/src/files.ml
|
5138
5145
|
- tracks/ocaml/tools/test-generator/src/model.ml
|
5139
5146
|
- tracks/ocaml/tools/test-generator/src/parser.ml
|
5140
5147
|
- tracks/ocaml/tools/test-generator/src/special_cases.ml
|