trackler 2.2.1.20 → 2.2.1.21

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/csharp/config.json +11 -0
  4. data/tracks/csharp/exercises/Exercises.All.sln +15 -1
  5. data/tracks/csharp/exercises/Exercises.Default.sln +120 -106
  6. data/tracks/csharp/exercises/complex-numbers/ComplexNumbers.cs +53 -0
  7. data/tracks/csharp/exercises/complex-numbers/ComplexNumbers.csproj +18 -0
  8. data/tracks/csharp/exercises/complex-numbers/ComplexNumbersTest.cs +255 -0
  9. data/tracks/csharp/exercises/complex-numbers/Example.cs +78 -0
  10. data/tracks/csharp/exercises/grains/Example.cs +8 -1
  11. data/tracks/csharp/exercises/grains/GrainsTest.cs +38 -17
  12. data/tracks/csharp/generators/Exercises/ComplexNumbers.cs +119 -0
  13. data/tracks/csharp/generators/Exercises/Grains.cs +29 -0
  14. data/tracks/csharp/generators/Output/ValueFormatter.cs +2 -0
  15. data/tracks/delphi/exercises/two-fer/utwoferExample.pas +2 -5
  16. data/tracks/ecmascript/exercises/queen-attack/example.js +28 -23
  17. data/tracks/ecmascript/exercises/queen-attack/queen-attack.spec.js +10 -15
  18. data/tracks/java/config.json +1 -0
  19. data/tracks/r/exercises/perfect-numbers/example.R +1 -1
  20. data/tracks/r/exercises/perfect-numbers/perfect-numbers.R +1 -1
  21. data/tracks/r/exercises/perfect-numbers/test_perfect-numbers.R +13 -13
  22. data/tracks/ruby/docs/24pullrequests.md +1 -1
  23. data/tracks/ruby/exercises/hello-world/.meta/generator/test_template.erb +1 -1
  24. data/tracks/ruby/exercises/hello-world/hello_world_test.rb +1 -1
  25. data/tracks/ruby/test/generator/command_line/generator_optparser_test.rb +1 -1
  26. data/tracks/ruby/test/generator/command_line_test.rb +1 -1
  27. data/tracks/ruby/test/generator/files/metadata_files_test.rb +1 -1
  28. data/tracks/rust/exercises/accumulate/README.md +0 -3
  29. data/tracks/rust/exercises/beer-song/src/lib.rs +7 -0
  30. data/tracks/rust/exercises/bob/src/lib.rs +3 -0
  31. data/tracks/rust/exercises/bowling/example.rs +1 -1
  32. data/tracks/rust/exercises/difference-of-squares/src/lib.rs +11 -0
  33. data/tracks/rust/exercises/grade-school/example.rs +1 -1
  34. data/tracks/rust/exercises/leap/src/lib.rs +3 -0
  35. data/tracks/rust/exercises/proverb/src/lib.rs +3 -0
  36. data/tracks/rust/exercises/raindrops/src/lib.rs +3 -0
  37. data/tracks/rust/exercises/sum-of-multiples/src/lib.rs +3 -0
  38. data/tracks/scala/exercises/space-age/example.scala +26 -20
  39. data/tracks/scala/exercises/space-age/src/main/scala/.keep +0 -0
  40. data/tracks/scala/exercises/space-age/src/test/scala/SpaceAgeTest.scala +19 -38
  41. data/tracks/scala/exercises/sublist/src/test/scala/SublistTest.scala +36 -44
  42. data/tracks/scala/testgen/src/main/scala/SpaceAgeTestGenerator.scala +39 -0
  43. data/tracks/scala/testgen/src/main/scala/SublistTestGenerator.scala +38 -0
  44. metadata +11 -3
  45. data/tracks/scala/exercises/space-age/src/main/scala/SpaceAge.scala +0 -10
@@ -25,9 +25,6 @@ Keep your hands off that collect/map/fmap/whatchamacallit functionality
25
25
  provided by your standard library!
26
26
  Solve this one yourself using other basic tools instead.
27
27
 
28
- Lisp specific: it's perfectly fine to use `MAPCAR` or the equivalent,
29
- as this is idiomatic Lisp, not a library function.
30
-
31
28
  ## Hints
32
29
 
33
30
  We are dealing with two types of situations. One is a function pointer and
@@ -0,0 +1,7 @@
1
+ pub fn verse(n: i32) -> String {
2
+
3
+ }
4
+
5
+ pub fn sing(start: i32, end: i32) -> String {
6
+
7
+ }
@@ -0,0 +1,3 @@
1
+ pub fn reply(message: &str) -> &str {
2
+
3
+ }
@@ -104,7 +104,7 @@ impl BowlingGame {
104
104
  return Err("Game Finished. No more rolls.");
105
105
  }
106
106
 
107
- for mut frame in self.frames.iter_mut() {
107
+ for frame in self.frames.iter_mut() {
108
108
  frame.add_roll(pins)
109
109
  }
110
110
 
@@ -0,0 +1,11 @@
1
+ pub fn square_of_sum(n: usize) -> usize {
2
+
3
+ }
4
+
5
+ pub fn sum_of_squares(n: usize) -> usize {
6
+
7
+ }
8
+
9
+ pub fn difference(n: usize) -> usize {
10
+
11
+ }
@@ -10,7 +10,7 @@ impl School {
10
10
  }
11
11
 
12
12
  pub fn add(&mut self, grade: u32, student: &str) {
13
- let mut entry = self.grades.entry(grade).or_insert(Vec::new());
13
+ let entry = self.grades.entry(grade).or_insert(Vec::new());
14
14
  entry.push(student.to_string());
15
15
  entry.sort();
16
16
  }
@@ -0,0 +1,3 @@
1
+ pub fn is_leap_year(year: i32) -> bool {
2
+
3
+ }
@@ -0,0 +1,3 @@
1
+ pub fn build_proverb(list: Vec<&str>) -> String {
2
+
3
+ }
@@ -0,0 +1,3 @@
1
+ pub fn raindrops(n: usize) -> String {
2
+
3
+ }
@@ -0,0 +1,3 @@
1
+ pub fn sum_of_multiples(limit: u32, factors: &[u32]) -> u32 {
2
+
3
+ }
@@ -1,24 +1,30 @@
1
- case class SpaceAge(val seconds: Long) {
2
- lazy val onEarth: Double = round(earthYears)
3
- lazy val onMercury: Double = round(mercuryYears)
4
- lazy val onVenus: Double = round(venusYears)
5
- lazy val onMars: Double = round(marsYears)
6
- lazy val onJupiter: Double = round(jupiterYears)
7
- lazy val onSaturn: Double = round(saturnYears)
8
- lazy val onUranus: Double = round(uranusYears)
9
- lazy val onNeptune: Double = round(neptuneYears)
1
+ object SpaceAge {
2
+ private val daysToEarthAge = 365.25
3
+ private val daysToMercuryAge = 87.969
4
+ private val daysToVenusAge = 224.701
5
+ private val daysToMarsAge = 686.971
6
+ private val daysToJupiterAge = 4332.59
7
+ private val daysToSaturnAge = 10759.22
8
+ private val daysToUranusAge = 30799.095
9
+ private val daysToNeptuneAge = 60190.03
10
10
 
11
- private val minutes = seconds.toDouble / 60
12
- private val hours = minutes / 60
13
- private val days = hours / 24
14
- private val earthYears = days / 365.25
15
- private val mercuryYears = days / 87.969
16
- private val venusYears = days / 224.701
17
- private val marsYears = days / 686.971
18
- private val jupiterYears = days / 4332.59
19
- private val saturnYears = days / 10759.22
20
- private val uranusYears = days / 30799.095
21
- private val neptuneYears = days / 60190.03
11
+ private def toEarthDays(seconds: Double): Double = {
12
+ val minutes = seconds.toDouble / 60
13
+ val hours = minutes / 60
14
+ hours / 24
15
+ }
16
+
17
+ private def toPlanetAge(daysToPlanetAge: Double, seconds: Double): Double =
18
+ round(toEarthDays(seconds) / daysToPlanetAge)
22
19
 
23
20
  private def round(value: Double): Double = (value * 100).round / 100.0
21
+
22
+ def onEarth(seconds: Double): Double = toPlanetAge(daysToEarthAge, seconds)
23
+ def onMercury(seconds: Double): Double = toPlanetAge(daysToMercuryAge, seconds)
24
+ def onVenus(seconds: Double): Double = toPlanetAge(daysToVenusAge, seconds)
25
+ def onMars(seconds: Double): Double = toPlanetAge(daysToMarsAge, seconds)
26
+ def onJupiter(seconds: Double): Double = toPlanetAge(daysToJupiterAge, seconds)
27
+ def onSaturn(seconds: Double): Double = toPlanetAge(daysToSaturnAge, seconds)
28
+ def onUranus(seconds: Double): Double = toPlanetAge(daysToUranusAge, seconds)
29
+ def onNeptune(seconds: Double): Double = toPlanetAge(daysToNeptuneAge, seconds)
24
30
  }
@@ -1,63 +1,44 @@
1
- import org.scalatest._
1
+ import org.scalatest.{Matchers, FunSuite}
2
2
 
3
+ /** @version 1.0.0 */
3
4
  class SpaceAgeTest extends FunSuite with Matchers {
4
- test ("age in seconds") {
5
- val age = SpaceAge(1000000)
6
- age.seconds should be (1000000)
7
- }
8
5
 
9
- test ("age in earth years") {
10
- pending
11
- val age = SpaceAge(1000000000)
12
- age.onEarth should be (31.69)
6
+ test("age on Earth") {
7
+ SpaceAge.onEarth(1000000000) should be (31.69)
13
8
  }
14
9
 
15
- test ("age in mercury years") {
10
+ test("age on Mercury") {
16
11
  pending
17
- val age = SpaceAge(2134835688)
18
- age.onEarth should be (67.65)
19
- age.onMercury should be (280.88)
12
+ SpaceAge.onMercury(2134835688) should be (280.88)
20
13
  }
21
14
 
22
- test ("age in venus years") {
15
+ test("age on Venus") {
23
16
  pending
24
- val age = SpaceAge(189839836)
25
- age.onEarth should be (6.02)
26
- age.onVenus should be (9.78)
17
+ SpaceAge.onVenus(189839836) should be (9.78)
27
18
  }
28
19
 
29
- test ("age on mars") {
20
+ test("age on Mars") {
30
21
  pending
31
- val age = SpaceAge(2329871239L)
32
- age.onEarth should be (73.83)
33
- age.onMars should be (39.25)
22
+ SpaceAge.onMars(2.329871239E9) should be (39.25)
34
23
  }
35
24
 
36
- test ("age on jupiter") {
25
+ test("age on Jupiter") {
37
26
  pending
38
- val age = SpaceAge(901876382)
39
- age.onEarth should be (28.58)
40
- age.onJupiter should be (2.41)
27
+ SpaceAge.onJupiter(901876382) should be (2.41)
41
28
  }
42
29
 
43
- test ("age on saturn") {
30
+ test("age on Saturn") {
44
31
  pending
45
- val age = SpaceAge(3000000000L)
46
- age.onEarth should be (95.06)
47
- age.onSaturn should be (3.23)
32
+ SpaceAge.onSaturn(3.0E9) should be (3.23)
48
33
  }
49
34
 
50
- test ("age on uranus") {
35
+ test("age on Uranus") {
51
36
  pending
52
- val age = SpaceAge(3210123456L)
53
- age.onEarth should be (101.72)
54
- age.onUranus should be (1.21)
37
+ SpaceAge.onUranus(3.210123456E9) should be (1.21)
55
38
  }
56
39
 
57
- test ("age on neptune") {
40
+ test("age on Neptune") {
58
41
  pending
59
- val age = SpaceAge(8210123456L)
60
- age.onEarth should be (260.16)
61
- age.onNeptune should be (1.58)
42
+ SpaceAge.onNeptune(8.210123456E9) should be (1.58)
62
43
  }
63
- }
44
+ }
@@ -1,97 +1,89 @@
1
- import org.scalatest.{FunSuite, Matchers}
1
+ import org.scalatest.{Matchers, FunSuite}
2
2
 
3
+ /** @version 1.0.0 */
3
4
  class SublistTest extends FunSuite with Matchers {
5
+
4
6
  test("empty lists") {
5
7
  Sublist.sublist(List(), List()) should be (Sublist.Equal)
6
8
  }
7
9
 
8
- test("empty is a sublist of anything") {
10
+ test("empty list within non empty list") {
9
11
  pending
10
- Sublist.sublist(List(), List('a', 's', 'd', 'f')) should be (Sublist.Sublist)
12
+ Sublist.sublist(List(), List(1, 2, 3)) should be (Sublist.Sublist)
11
13
  }
12
14
 
13
- test("anything is a superlist of empty") {
15
+ test("non empty list contains empty list") {
14
16
  pending
15
- Sublist.sublist(List('a', 's', 'd', 'f'), List()) should be (Sublist.Superlist)
17
+ Sublist.sublist(List(1, 2, 3), List()) should be (Sublist.Superlist)
16
18
  }
17
19
 
18
- test("List(1) is not List(2)") {
20
+ test("list equals itself") {
19
21
  pending
20
- Sublist.sublist(List(1), List(2)) should be (Sublist.Unequal)
22
+ Sublist.sublist(List(1, 2, 3), List(1, 2, 3)) should be (Sublist.Equal)
21
23
  }
22
24
 
23
- test("compare larger equal lists") {
24
- pending
25
- val xs = List.fill(1000)("x")
26
- Sublist.sublist(xs, xs) should be (Sublist.Equal)
27
- }
28
-
29
- test("sublist at start") {
25
+ test("different lists") {
30
26
  pending
31
- Sublist.sublist(List(1, 2, 3), List(1, 2, 3, 4, 5)) should be (Sublist.Sublist)
27
+ Sublist.sublist(List(1, 2, 3), List(2, 3, 4)) should be (Sublist.Unequal)
32
28
  }
33
29
 
34
- test("sublist in middle") {
30
+ test("false start") {
35
31
  pending
36
- Sublist.sublist(List(4, 3, 2), List(5, 4, 3, 2, 1)) should be (Sublist.Sublist)
32
+ Sublist.sublist(List(1, 2, 5), List(0, 1, 2, 3, 1, 2, 5, 6)) should be (Sublist.Sublist)
37
33
  }
38
34
 
39
- test("sublist at end") {
35
+ test("consecutive") {
40
36
  pending
41
- Sublist.sublist(List(3, 4, 5), List(1, 2, 3, 4, 5)) should be (Sublist.Sublist)
37
+ Sublist.sublist(List(1, 1, 2), List(0, 1, 1, 1, 2, 1, 2)) should be (Sublist.Sublist)
42
38
  }
43
39
 
44
- test("partially matching sublist at start") {
40
+ test("sublist at start") {
45
41
  pending
46
- Sublist.sublist(List(1, 1, 2), List(1, 1, 1, 2)) should be (Sublist.Sublist)
42
+ Sublist.sublist(List(0, 1, 2), List(0, 1, 2, 3, 4, 5)) should be (Sublist.Sublist)
47
43
  }
48
44
 
49
- test("sublist early in huge list") {
45
+ test("sublist in middle") {
50
46
  pending
51
- val xs = List.range(1, 1000000)
52
- Sublist.sublist(List(3, 4, 5), xs) should be (Sublist.Sublist)
47
+ Sublist.sublist(List(2, 3, 4), List(0, 1, 2, 3, 4, 5)) should be (Sublist.Sublist)
53
48
  }
54
49
 
55
- test("huge sublist not in huge list") {
50
+ test("sublist at end") {
56
51
  pending
57
- val l1 = List.range(10, 1000001)
58
- val l2 = List.range(1, 1000000)
59
- Sublist.sublist(l1, l2) should be (Sublist.Unequal)
52
+ Sublist.sublist(List(3, 4, 5), List(0, 1, 2, 3, 4, 5)) should be (Sublist.Sublist)
60
53
  }
61
54
 
62
- test("superlist at start") {
55
+ test("at start of superlist") {
63
56
  pending
64
- Sublist.sublist(List(1, 2, 3, 4, 5), List(1, 2, 3)) should be (Sublist.Superlist)
57
+ Sublist.sublist(List(0, 1, 2, 3, 4, 5), List(0, 1, 2)) should be (Sublist.Superlist)
65
58
  }
66
59
 
67
- test("superlist in middle") {
60
+ test("in middle of superlist") {
68
61
  pending
69
- Sublist.sublist(List(5, 4, 3, 2, 1), List(4, 3, 2)) should be (Sublist.Superlist)
62
+ Sublist.sublist(List(0, 1, 2, 3, 4, 5), List(2, 3)) should be (Sublist.Superlist)
70
63
  }
71
64
 
72
- test("superlist at end") {
65
+ test("at end of superlist") {
73
66
  pending
74
- Sublist.sublist(List(1, 2, 3, 4, 5), List(3, 4, 5)) should be (Sublist.Superlist)
67
+ Sublist.sublist(List(0, 1, 2, 3, 4, 5), List(3, 4, 5)) should be (Sublist.Superlist)
75
68
  }
76
69
 
77
- test("partially matching superlist at start") {
70
+ test("first list missing element from second list") {
78
71
  pending
79
- Sublist.sublist(List(1, 1, 1, 2), List(1, 1, 2)) should be (Sublist.Superlist)
72
+ Sublist.sublist(List(1, 3), List(1, 2, 3)) should be (Sublist.Unequal)
80
73
  }
81
74
 
82
- test("superlist early in huge list") {
75
+ test("second list missing element from first list") {
83
76
  pending
84
- val l1 = List.range(1, 1000000)
85
- Sublist.sublist(l1, List(3, 4, 5)) should be (Sublist.Superlist)
77
+ Sublist.sublist(List(1, 2, 3), List(1, 3)) should be (Sublist.Unequal)
86
78
  }
87
79
 
88
- test("recurring values sublist") {
80
+ test("order matters to a list") {
89
81
  pending
90
- Sublist.sublist(List(1, 2, 1, 2, 3), List(1, 2, 3, 1, 2, 1, 2, 3, 2, 1)) should be (Sublist.Sublist)
82
+ Sublist.sublist(List(1, 2, 3), List(3, 2, 1)) should be (Sublist.Unequal)
91
83
  }
92
84
 
93
- test("recurring values unequal") {
85
+ test("same digits but different numbers") {
94
86
  pending
95
- Sublist.sublist(List(1, 2, 1, 2, 3), List(1, 2, 3, 1, 2, 3, 2, 3, 2, 1)) should be (Sublist.Unequal)
87
+ Sublist.sublist(List(1, 0, 1), List(10, 1)) should be (Sublist.Unequal)
96
88
  }
97
- }
89
+ }
@@ -0,0 +1,39 @@
1
+ import java.io.File
2
+
3
+ import testgen.TestSuiteBuilder._
4
+ import testgen._
5
+
6
+ object SpaceAgeTestGenerator {
7
+ def main(args: Array[String]): Unit = {
8
+ val file = new File("src/main/resources/space-age.json")
9
+
10
+ def toString(expected: CanonicalDataParser.Expected): String = {
11
+ expected match {
12
+ case Left(_) => throw new IllegalStateException()
13
+ case Right(n) => s"$n"
14
+ }
15
+ }
16
+
17
+ def sutArgs(parseResult: CanonicalDataParser.ParseResult, argNames: String*): String =
18
+ argNames map (name => TestSuiteBuilder.toString(parseResult(name))) mkString ", "
19
+
20
+ def functionName(parseResult: CanonicalDataParser.ParseResult): String =
21
+ "on" + parseResult("planet").toString
22
+
23
+ def fromLabeledTest(argNames: String*): ToTestCaseData =
24
+ withLabeledTest { sut =>
25
+ labeledTest =>
26
+ val args = sutArgs(labeledTest.result, argNames: _*)
27
+ val property = labeledTest.property
28
+ val sutCall =
29
+ s"""$sut.${functionName(labeledTest.result)}($args)"""
30
+ val expected = toString(labeledTest.expected)
31
+ TestCaseData(labeledTest.description, sutCall, expected)
32
+ }
33
+
34
+ val code = TestSuiteBuilder.build(file, fromLabeledTest("seconds"))
35
+ println(s"-------------")
36
+ println(code)
37
+ println(s"-------------")
38
+ }
39
+ }
@@ -0,0 +1,38 @@
1
+ import java.io.File
2
+
3
+ import testgen.TestSuiteBuilder._
4
+ import testgen._
5
+
6
+ object SublistTestGenerator {
7
+ def main(args: Array[String]): Unit = {
8
+ val file = new File("src/main/resources/sublist.json")
9
+
10
+ def toString(expected: CanonicalDataParser.Expected): String = {
11
+ expected match {
12
+ case Right("equal") => s"Sublist.Equal"
13
+ case Right("sublist") => s"Sublist.Sublist"
14
+ case Right("superlist") => s"Sublist.Superlist"
15
+ case Right("unequal") => s"Sublist.Unequal"
16
+ case _ => throw new IllegalStateException()
17
+ }
18
+ }
19
+
20
+ def fromLabeledTest(argNames: String*): ToTestCaseData =
21
+ withLabeledTest { sut =>
22
+ labeledTest =>
23
+ val args = sutArgs(labeledTest.result, argNames: _*)
24
+ val property = labeledTest.property
25
+ val sutCall =
26
+ s"$sut.$property($args)"
27
+ val expected = toString(labeledTest.expected)
28
+ TestCaseData(labeledTest.description, sutCall, expected)
29
+ }
30
+
31
+ val code =
32
+ TestSuiteBuilder.build(file, fromLabeledTest("listOne", "listTwo"))
33
+
34
+ println(s"-------------")
35
+ println(code)
36
+ println(s"-------------")
37
+ }
38
+ }
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.2.1.20
4
+ version: 2.2.1.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-08-29 00:00:00.000000000 Z
11
+ date: 2017-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -1871,6 +1871,10 @@ files:
1871
1871
  - tracks/csharp/exercises/collatz-conjecture/CollatzConjectureTest.cs
1872
1872
  - tracks/csharp/exercises/collatz-conjecture/Example.cs
1873
1873
  - tracks/csharp/exercises/collatz-conjecture/README.md
1874
+ - tracks/csharp/exercises/complex-numbers/ComplexNumbers.cs
1875
+ - tracks/csharp/exercises/complex-numbers/ComplexNumbers.csproj
1876
+ - tracks/csharp/exercises/complex-numbers/ComplexNumbersTest.cs
1877
+ - tracks/csharp/exercises/complex-numbers/Example.cs
1874
1878
  - tracks/csharp/exercises/connect/Connect.cs
1875
1879
  - tracks/csharp/exercises/connect/Connect.csproj
1876
1880
  - tracks/csharp/exercises/connect/ConnectTest.cs
@@ -2359,10 +2363,12 @@ files:
2359
2363
  - tracks/csharp/generators/Exercises/BookStore.cs
2360
2364
  - tracks/csharp/generators/Exercises/BracketPush.cs
2361
2365
  - tracks/csharp/generators/Exercises/CollatzConjecture.cs
2366
+ - tracks/csharp/generators/Exercises/ComplexNumbers.cs
2362
2367
  - tracks/csharp/generators/Exercises/ConvertExtensions.cs
2363
2368
  - tracks/csharp/generators/Exercises/CryptoSquare.cs
2364
2369
  - tracks/csharp/generators/Exercises/FoodChain.cs
2365
2370
  - tracks/csharp/generators/Exercises/Gigasecond.cs
2371
+ - tracks/csharp/generators/Exercises/Grains.cs
2366
2372
  - tracks/csharp/generators/Exercises/Hamming.cs
2367
2373
  - tracks/csharp/generators/Exercises/HelloWorld.cs
2368
2374
  - tracks/csharp/generators/Exercises/House.cs
@@ -11126,7 +11132,7 @@ files:
11126
11132
  - tracks/scala/exercises/space-age/README.md
11127
11133
  - tracks/scala/exercises/space-age/build.sbt
11128
11134
  - tracks/scala/exercises/space-age/example.scala
11129
- - tracks/scala/exercises/space-age/src/main/scala/SpaceAge.scala
11135
+ - tracks/scala/exercises/space-age/src/main/scala/.keep
11130
11136
  - tracks/scala/exercises/space-age/src/test/scala/SpaceAgeTest.scala
11131
11137
  - tracks/scala/exercises/spiral-matrix/README.md
11132
11138
  - tracks/scala/exercises/spiral-matrix/build.sbt
@@ -11236,7 +11242,9 @@ files:
11236
11242
  - tracks/scala/testgen/src/main/scala/SecretHandshakeTestGenerator.scala
11237
11243
  - tracks/scala/testgen/src/main/scala/SeriesTestGenerator.scala
11238
11244
  - tracks/scala/testgen/src/main/scala/SieveTestGenerator.scala
11245
+ - tracks/scala/testgen/src/main/scala/SpaceAgeTestGenerator.scala
11239
11246
  - tracks/scala/testgen/src/main/scala/SpiralMatrixTestGenerator.scala
11247
+ - tracks/scala/testgen/src/main/scala/SublistTestGenerator.scala
11240
11248
  - tracks/scala/testgen/src/main/scala/SumOfMultiplesTestGenerator.scala
11241
11249
  - tracks/scala/testgen/src/main/scala/TestBuilder.scala
11242
11250
  - tracks/scala/testgen/src/main/scala/TriangleTestGenerator.scala