trackler 2.0.3.8 → 2.0.3.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/book-store/description.md +67 -0
  3. data/common/exercises/book-store/metadata.yml +4 -0
  4. data/lib/trackler/version.rb +1 -1
  5. data/tracks/crystal/exercises/difference-of-squares/src/difference_of_squares.cr +1 -0
  6. data/tracks/ecmascript/exercises/custom-set/package.json +1 -0
  7. data/tracks/ecmascript/exercises/palindrome-products/palindrome-products.js +18 -18
  8. data/tracks/fsharp/docs/INSTALLATION.md +2 -3
  9. data/tracks/fsharp/docs/TESTS.md +1 -1
  10. data/tracks/fsharp/exercises/accumulate/HINTS.md +3 -0
  11. data/tracks/fsharp/exercises/diamond/HINTS.md +2 -0
  12. data/tracks/fsharp/exercises/grains/HINTS.md +1 -1
  13. data/tracks/fsharp/exercises/hello-world/HINTS.md +1 -1
  14. data/tracks/fsharp/exercises/parallel-letter-frequency/HINTS.md +3 -0
  15. data/tracks/fsharp/exercises/poker/HINTS.md +2 -0
  16. data/tracks/fsharp/exercises/raindrops/HINTS.md +2 -0
  17. data/tracks/fsharp/exercises/space-age/HINTS.md +3 -0
  18. data/tracks/javascript/exercises/bowling/bowling.spec.js +83 -63
  19. data/tracks/ocaml/config.json +5 -0
  20. data/tracks/ocaml/exercises/leap/test.ml +7 -13
  21. data/tracks/ocaml/exercises/robot-name/.merlin +3 -0
  22. data/tracks/ocaml/exercises/robot-name/Makefile +11 -0
  23. data/tracks/ocaml/exercises/robot-name/example.ml +26 -0
  24. data/tracks/ocaml/exercises/robot-name/robot_name.mli +7 -0
  25. data/tracks/ocaml/exercises/robot-name/test.ml +64 -0
  26. data/tracks/ocaml/tools/test-generator/Makefile +3 -0
  27. data/tracks/ocaml/tools/test-generator/README.md +1 -0
  28. data/tracks/ocaml/tools/test-generator/src/canonical_data_checker.ml +23 -0
  29. data/tracks/ocaml/tools/test-generator/src/controller.ml +12 -0
  30. data/tracks/ocaml/tools/test-generator/src/parser.ml +29 -22
  31. data/tracks/ocaml/tools/test-generator/src/utils.ml +8 -0
  32. data/tracks/ocaml/tools/test-generator/test/clock.json +437 -0
  33. data/tracks/ocaml/tools/test-generator/test/parser_test.ml +18 -4
  34. data/tracks/ocaml/tools/test-generator/test/with-methods-key.json +22 -0
  35. data/tracks/perl6/config.json +5 -0
  36. data/tracks/perl6/exercises/wordy/Example.p6 +16 -0
  37. data/tracks/perl6/exercises/wordy/cases.json +89 -0
  38. data/tracks/perl6/exercises/wordy/wordy.t +29 -0
  39. data/tracks/ruby/exercises/acronym/{.version → .meta/.version} +0 -0
  40. data/tracks/ruby/exercises/alphametics/{.version → .meta/.version} +0 -0
  41. data/tracks/ruby/exercises/anagram/{.version → .meta/.version} +0 -0
  42. data/tracks/ruby/exercises/binary/{.version → .meta/.version} +0 -0
  43. data/tracks/ruby/exercises/bowling/{.version → .meta/.version} +0 -0
  44. data/tracks/ruby/exercises/bracket-push/{.version → .meta/.version} +0 -0
  45. data/tracks/ruby/exercises/clock/{.version → .meta/.version} +0 -0
  46. data/tracks/ruby/exercises/connect/{.version → .meta/.version} +0 -0
  47. data/tracks/ruby/exercises/custom-set/{.version → .meta/.version} +0 -0
  48. data/tracks/ruby/exercises/difference-of-squares/{.version → .meta/.version} +0 -0
  49. data/tracks/ruby/exercises/dominoes/{.version → .meta/.version} +0 -0
  50. data/tracks/ruby/exercises/gigasecond/{.version → .meta/.version} +0 -0
  51. data/tracks/ruby/exercises/hamming/{.version → .meta/.version} +0 -0
  52. data/tracks/ruby/exercises/hello-world/{.version → .meta/.version} +0 -0
  53. data/tracks/ruby/exercises/isogram/{.version → .meta/.version} +0 -0
  54. data/tracks/ruby/exercises/largest-series-product/{.version → .meta/.version} +0 -0
  55. data/tracks/ruby/exercises/leap/{.version → .meta/.version} +0 -0
  56. data/tracks/ruby/exercises/nth-prime/{.version → .meta/.version} +0 -0
  57. data/tracks/ruby/exercises/pangram/{.version → .meta/.version} +0 -0
  58. data/tracks/ruby/exercises/queen-attack/{.version → .meta/.version} +0 -0
  59. data/tracks/ruby/exercises/raindrops/{.version → .meta/.version} +0 -0
  60. data/tracks/ruby/exercises/rna-transcription/{.version → .meta/.version} +0 -0
  61. data/tracks/ruby/exercises/roman-numerals/{.version → .meta/.version} +0 -0
  62. data/tracks/ruby/exercises/run-length-encoding/{.version → .meta/.version} +0 -0
  63. data/tracks/ruby/exercises/sieve/{.version → .meta/.version} +0 -0
  64. data/tracks/ruby/exercises/tournament/{.version → .meta/.version} +0 -0
  65. data/tracks/ruby/exercises/transpose/{.version → .meta/.version} +0 -0
  66. data/tracks/ruby/exercises/triangle/{.version → .meta/.version} +0 -0
  67. data/tracks/ruby/exercises/two-bucket/{.version → .meta/.version} +0 -0
  68. data/tracks/ruby/exercises/word-count/{.version → .meta/.version} +0 -0
  69. data/tracks/ruby/lib/generator.rb +15 -4
  70. data/tracks/rust/config.json +1 -0
  71. data/tracks/rust/exercises/largest-series-product/.gitignore +7 -0
  72. data/tracks/rust/exercises/largest-series-product/Cargo.toml +3 -0
  73. data/tracks/rust/exercises/largest-series-product/HINTS.md +6 -0
  74. data/tracks/rust/exercises/largest-series-product/example.rs +22 -0
  75. data/tracks/rust/exercises/largest-series-product/tests/largest-series-product.rs +105 -0
  76. data/tracks/rust/problems.md +1 -0
  77. data/tracks/scala/.gitignore +1 -0
  78. data/tracks/scala/exercises/accumulate/src/test/scala/{accumulate_test.scala → AccumulateTest.scala} +0 -0
  79. data/tracks/scala/exercises/allergies/src/test/scala/{allergies_test.scala → AllergiesTest.scala} +0 -0
  80. data/tracks/scala/exercises/anagram/src/test/scala/{anagram_test.scala → AnagramTest.scala} +0 -0
  81. data/tracks/scala/exercises/binary/src/test/scala/{binary_test.scala → BinaryTest.scala} +0 -0
  82. data/tracks/scala/exercises/bob/src/test/scala/{bob_test.scala → BobTest.scala} +0 -0
  83. data/tracks/scala/exercises/difference-of-squares/src/test/scala/{squares_test.scala → SquaresTest.scala} +0 -0
  84. data/tracks/scala/exercises/etl/src/test/scala/{etl_test.scala → EtlTest.scala} +0 -0
  85. data/tracks/scala/exercises/gigasecond/src/test/scala/{gigasecond_test.scala → GigasecondTest.scala} +0 -0
  86. data/tracks/scala/exercises/grade-school/src/test/scala/{grade_school_test.scala → GradeSchoolTest.scala} +0 -0
  87. data/tracks/scala/exercises/grains/src/test/scala/{grains_test.scala → GrainsTest.scala} +0 -0
  88. data/tracks/scala/exercises/hamming/src/test/scala/{hamming_test.scala → HammingTest.scala} +0 -0
  89. data/tracks/scala/exercises/hello-world/src/test/scala/HelloWorldTest.scala +2 -0
  90. data/tracks/scala/exercises/leap/src/test/scala/{leap_test.scala → LeapTest.scala} +0 -0
  91. data/tracks/scala/exercises/meetup/src/test/scala/{meetup_test.scala → MeetupTest.scala} +0 -0
  92. data/tracks/scala/exercises/nth-prime/example.scala +3 -1
  93. data/tracks/scala/exercises/nth-prime/src/test/scala/PrimeTest.scala +11 -6
  94. data/tracks/scala/exercises/nucleotide-count/src/test/scala/{nucleotide_count_test.scala → NucleotideCountTest.scala} +0 -0
  95. data/tracks/scala/exercises/palindrome-products/src/test/scala/PalindromeProductsTest.scala +7 -0
  96. data/tracks/scala/exercises/pangram/src/test/scala/{PangramsTest.scala → PangramTest.scala} +0 -0
  97. data/tracks/scala/exercises/parallel-letter-frequency/HINTS.md +26 -0
  98. data/tracks/scala/exercises/phone-number/src/test/scala/{phone_number_test.scala → PhoneNumberTest.scala} +0 -0
  99. data/tracks/scala/exercises/prime-factors/src/test/scala/{primefactors_test.scala → PrimefactorsTest.scala} +10 -0
  100. data/tracks/scala/exercises/raindrops/src/test/scala/{raindrops_test.scala → RaindropsTest.scala} +15 -0
  101. data/tracks/scala/exercises/rna-transcription/src/test/scala/{transcription_test.scala → RnaTranscriptionTest.scala} +8 -0
  102. data/tracks/scala/exercises/robot-name/src/test/scala/{robot_name_test.scala → RobotNameTest.scala} +0 -0
  103. data/tracks/scala/exercises/roman-numerals/src/test/scala/{roman_numerals_test.scala → RomanNumeralsTest.scala} +17 -0
  104. data/tracks/scala/exercises/saddle-points/src/test/scala/{SaddlePointsSpecs.scala → SaddlePointsTest.scala} +3 -0
  105. data/tracks/scala/exercises/scrabble-score/src/test/scala/{scrabble_score_test.scala → ScrabbleScoreTest.scala} +0 -0
  106. data/tracks/scala/exercises/sgf-parsing/src/test/scala/SgfTest.scala +1 -0
  107. data/tracks/scala/exercises/space-age/src/test/scala/{space_age_test.scala → SpaceAgeTest.scala} +0 -0
  108. data/tracks/scala/exercises/sublist/src/test/scala/{sublist_test.scala → SublistTest.scala} +0 -0
  109. data/tracks/scala/exercises/triangle/src/test/scala/{triangle_test.scala → TriangleTest.scala} +7 -0
  110. data/tracks/scala/exercises/word-count/src/test/scala/{word_count_test.scala → WordCountTest.scala} +0 -0
  111. data/tracks/scala/exercises/zipper/src/test/scala/ZipperTest.scala +7 -0
  112. data/tracks/swift/config.json +19 -0
  113. data/tracks/swift/docs/TESTS.md +114 -23
  114. data/tracks/swift/exercises/beer-song/BeerSongExample.swift +32 -0
  115. data/tracks/swift/exercises/beer-song/BeerSongTest.swift +44 -0
  116. data/tracks/swift/exercises/hello-world/{helloWorldExample.swift → HelloWorldExample.swift} +4 -0
  117. data/tracks/swift/exercises/hello-world/{helloWorldTest/helloWorldTest.swift → helloWorldTest.swift} +1 -1
  118. data/tracks/swift/exercises/sublist/SubListTest.swift +95 -0
  119. data/tracks/swift/exercises/sublist/SublistExample.swift +72 -0
  120. data/tracks/swift/img/page_assets/001-splash.png +0 -0
  121. data/tracks/swift/img/page_assets/002-templateChooser.png +0 -0
  122. data/tracks/swift/img/page_assets/003-nameProject.jpg +0 -0
  123. data/tracks/swift/img/page_assets/004-saveProject.jpg +0 -0
  124. data/tracks/swift/img/page_assets/005-folderLayout.png +0 -0
  125. data/tracks/swift/img/page_assets/006-newProjectInitial.jpg +0 -0
  126. data/tracks/swift/img/page_assets/007-fileInspectorUpdate.png +0 -0
  127. data/tracks/swift/img/page_assets/008-templateChooserSwift.png +0 -0
  128. data/tracks/swift/img/page_assets/009-importTestSource.png +0 -0
  129. data/tracks/swift/img/page_assets/010-testsImportExample.png +0 -0
  130. data/tracks/swift/img/page_assets/011-finalLayoutExample.png +0 -0
  131. data/tracks/swift/xcodeProject/xSwift.xcodeproj/project.pbxproj +36 -56
  132. metadata +103 -65
  133. data/tracks/swift/exercises/hello-world/helloWorld.swift +0 -1
  134. data/tracks/swift/exercises/hello-world/helloWorld.xcodeproj/project.pbxproj +0 -256
  135. data/tracks/swift/exercises/hello-world/helloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  136. data/tracks/swift/exercises/hello-world/helloWorldTest/Info.plist +0 -24
@@ -0,0 +1,72 @@
1
+ import Foundation
2
+
3
+ enum SublistKind {
4
+
5
+ case sublist
6
+ case superlist
7
+ case equal
8
+ case unequal
9
+
10
+ }
11
+ func classifier(listOne: [Int], listTwo: [Int]) -> SublistKind {
12
+
13
+ if listOne == listTwo {
14
+
15
+ return .equal
16
+ } else if listOne.isEmpty || listTwo.isEmpty {
17
+
18
+ if listOne.isEmpty {
19
+
20
+ return .sublist
21
+ }
22
+ return .superlist
23
+
24
+ } else if listOne.count != listTwo.count {
25
+
26
+ var i = 0
27
+ var count = 0
28
+ var smallerList = [Int]()
29
+
30
+ var iterations = 0
31
+ iterations = max(listOne.count, listTwo.count) - (min(listOne.count, listTwo.count) - 1)
32
+
33
+ while iterations > 0 {
34
+
35
+ var j = i
36
+ while count <= min(listOne.count, listTwo.count) - 1 {
37
+
38
+ if listOne.count > listTwo.count {
39
+
40
+ smallerList.append(listOne[j])
41
+
42
+ } else {
43
+
44
+ smallerList.append(listTwo[j])
45
+ }
46
+
47
+ j+=1
48
+ count+=1
49
+ }
50
+
51
+ if smallerList == listTwo {
52
+
53
+ return .superlist
54
+
55
+ } else if smallerList == listOne {
56
+
57
+ return .sublist
58
+
59
+ } else {
60
+
61
+ smallerList.removeAll()
62
+ i+=1
63
+ count = 0
64
+ }
65
+
66
+ iterations-=1
67
+
68
+ }
69
+
70
+ }
71
+ return .unequal
72
+ }
@@ -42,10 +42,7 @@
42
42
  1E9A63A51C506EFD00E28AE1 /* GrainsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63151C506EFC00E28AE1 /* GrainsTest.swift */; };
43
43
  1E9A63A61C506EFD00E28AE1 /* HammingExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63171C506EFC00E28AE1 /* HammingExample.swift */; };
44
44
  1E9A63A71C506EFD00E28AE1 /* HammingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63181C506EFC00E28AE1 /* HammingTest.swift */; };
45
- 1E9A63A81C506EFD00E28AE1 /* helloWorld.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A631A1C506EFC00E28AE1 /* helloWorld.swift */; };
46
45
  1E9A63A91C506EFD00E28AE1 /* helloWorldExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A631E1C506EFC00E28AE1 /* helloWorldExample.swift */; };
47
- 1E9A63AA1C506EFD00E28AE1 /* helloWorldTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63201C506EFC00E28AE1 /* helloWorldTest.swift */; };
48
- 1E9A63AB1C506EFD00E28AE1 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1E9A63211C506EFC00E28AE1 /* Info.plist */; };
49
46
  1E9A63AC1C506EFD00E28AE1 /* KindergartenGardenExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63231C506EFC00E28AE1 /* KindergartenGardenExample.swift */; };
50
47
  1E9A63AD1C506EFD00E28AE1 /* KindergartenGardenTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63241C506EFC00E28AE1 /* KindergartenGardenTest.swift */; };
51
48
  1E9A63AE1C506EFD00E28AE1 /* LeapExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63261C506EFC00E28AE1 /* LeapExample.swift */; };
@@ -115,6 +112,11 @@
115
112
  1E9A63EE1C506EFD00E28AE1 /* WordyExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63861C506EFC00E28AE1 /* WordyExample.swift */; };
116
113
  1E9A63EF1C506EFD00E28AE1 /* WordyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E9A63871C506EFC00E28AE1 /* WordyTest.swift */; };
117
114
  1EAF95E11C90C587009DDCB6 /* DominoesTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EAF95E01C90C587009DDCB6 /* DominoesTest.swift */; };
115
+ A004DFC31DF8068A00800271 /* BeerSongExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = A004DFC11DF8068A00800271 /* BeerSongExample.swift */; };
116
+ A004DFC41DF8068A00800271 /* BeerSongTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A004DFC21DF8068A00800271 /* BeerSongTest.swift */; };
117
+ A0DBCBF81E0000B800E0DFBF /* helloWorldTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0DBCBF71E0000B800E0DFBF /* helloWorldTest.swift */; };
118
+ A0DBCBFB1E00017E00E0DFBF /* SublistExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0DBCBF91E00017E00E0DFBF /* SublistExample.swift */; };
119
+ A0DBCBFC1E00017E00E0DFBF /* SubListTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0DBCBFA1E00017E00E0DFBF /* SubListTest.swift */; };
118
120
  E908CD461C6AD05F005D081E /* FoodChainExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = E908CD451C6AD05F005D081E /* FoodChainExample.swift */; };
119
121
  E908CD481C6AD076005D081E /* FoodChainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E908CD471C6AD076005D081E /* FoodChainTest.swift */; };
120
122
  E908CD541C6D7AD1005D081E /* PascalsTriangleExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = E908CD531C6D7AD1005D081E /* PascalsTriangleExample.swift */; };
@@ -155,16 +157,6 @@
155
157
  E9AFA1871C624FD5006AD72D /* MinesweeperTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9AFA1861C624FD5006AD72D /* MinesweeperTest.swift */; };
156
158
  /* End PBXBuildFile section */
157
159
 
158
- /* Begin PBXContainerItemProxy section */
159
- 1E9A63F11C506EFD00E28AE1 /* PBXContainerItemProxy */ = {
160
- isa = PBXContainerItemProxy;
161
- containerPortal = 1E9A631B1C506EFC00E28AE1 /* helloWorld.xcodeproj */;
162
- proxyType = 2;
163
- remoteGlobalIDString = 9DCE807D1BA747050024C69D;
164
- remoteInfo = helloWorldTest;
165
- };
166
- /* End PBXContainerItemProxy section */
167
-
168
160
  /* Begin PBXFileReference section */
169
161
  1E167A0F1C8AA5D7001EAD90 /* PokerExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PokerExample.swift; sourceTree = "<group>"; };
170
162
  1E167A101C8AA5D7001EAD90 /* PokerTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = PokerTest.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
@@ -201,11 +193,7 @@
201
193
  1E9A63151C506EFC00E28AE1 /* GrainsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = GrainsTest.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
202
194
  1E9A63171C506EFC00E28AE1 /* HammingExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HammingExample.swift; sourceTree = "<group>"; };
203
195
  1E9A63181C506EFC00E28AE1 /* HammingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = HammingTest.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
204
- 1E9A631A1C506EFC00E28AE1 /* helloWorld.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = helloWorld.swift; sourceTree = "<group>"; };
205
- 1E9A631B1C506EFC00E28AE1 /* helloWorld.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = helloWorld.xcodeproj; sourceTree = "<group>"; };
206
196
  1E9A631E1C506EFC00E28AE1 /* helloWorldExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = helloWorldExample.swift; sourceTree = "<group>"; };
207
- 1E9A63201C506EFC00E28AE1 /* helloWorldTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = helloWorldTest.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
208
- 1E9A63211C506EFC00E28AE1 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
209
197
  1E9A63231C506EFC00E28AE1 /* KindergartenGardenExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = KindergartenGardenExample.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
210
198
  1E9A63241C506EFC00E28AE1 /* KindergartenGardenTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = KindergartenGardenTest.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
211
199
  1E9A63261C506EFC00E28AE1 /* LeapExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LeapExample.swift; sourceTree = "<group>"; };
@@ -277,6 +265,11 @@
277
265
  1EAF95E01C90C587009DDCB6 /* DominoesTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = DominoesTest.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
278
266
  9D3155D21BA12FB1009A3991 /* xSwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = xSwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
279
267
  9D3155D51BA12FB1009A3991 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
268
+ A004DFC11DF8068A00800271 /* BeerSongExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BeerSongExample.swift; path = "beer-song/BeerSongExample.swift"; sourceTree = "<group>"; };
269
+ A004DFC21DF8068A00800271 /* BeerSongTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BeerSongTest.swift; path = "beer-song/BeerSongTest.swift"; sourceTree = "<group>"; };
270
+ A0DBCBF71E0000B800E0DFBF /* helloWorldTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = helloWorldTest.swift; sourceTree = "<group>"; };
271
+ A0DBCBF91E00017E00E0DFBF /* SublistExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SublistExample.swift; path = "sublist/SublistExample.swift"; sourceTree = "<group>"; };
272
+ A0DBCBFA1E00017E00E0DFBF /* SubListTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SubListTest.swift; path = "sublist/SubListTest.swift"; sourceTree = "<group>"; };
280
273
  E908CD451C6AD05F005D081E /* FoodChainExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FoodChainExample.swift; path = "food-chain/FoodChainExample.swift"; sourceTree = "<group>"; };
281
274
  E908CD471C6AD076005D081E /* FoodChainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = FoodChainTest.swift; path = "food-chain/FoodChainTest.swift"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
282
275
  E908CD531C6D7AD1005D081E /* PascalsTriangleExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PascalsTriangleExample.swift; path = "pascals-triangle/PascalsTriangleExample.swift"; sourceTree = "<group>"; };
@@ -347,6 +340,7 @@
347
340
  1E9A62F21C506EFC00E28AE1 /* anagram */,
348
341
  1E9A62F51C506EFC00E28AE1 /* atbash-cipher */,
349
342
  1E9A62F81C506EFC00E28AE1 /* binary */,
343
+ A016F7A31DF0418D005640FF /* beer-song */,
350
344
  E94BDECB1C510DF4009318BB /* binary-search */,
351
345
  E9B4BE511C585B510080E585 /* binary-search-tree */,
352
346
  1E9A62FB1C506EFC00E28AE1 /* bob */,
@@ -404,6 +398,7 @@
404
398
  1E9A636A1C506EFC00E28AE1 /* simple-linked-list */,
405
399
  1E9A636D1C506EFC00E28AE1 /* space-age */,
406
400
  1E9A63701C506EFC00E28AE1 /* strain */,
401
+ A039F3BF1DFECAAC0091A2DF /* sublist */,
407
402
  1E9A63731C506EFC00E28AE1 /* sum-of-multiples */,
408
403
  1E9A63761C506EFC00E28AE1 /* tournament */,
409
404
  E9443F201DF5BFBF00A468B7 /* transpose */,
@@ -564,31 +559,12 @@
564
559
  1E9A63191C506EFC00E28AE1 /* hello-world */ = {
565
560
  isa = PBXGroup;
566
561
  children = (
567
- 1E9A631A1C506EFC00E28AE1 /* helloWorld.swift */,
568
- 1E9A631B1C506EFC00E28AE1 /* helloWorld.xcodeproj */,
569
562
  1E9A631E1C506EFC00E28AE1 /* helloWorldExample.swift */,
570
- 1E9A631F1C506EFC00E28AE1 /* helloWorldTest */,
563
+ A0DBCBF71E0000B800E0DFBF /* helloWorldTest.swift */,
571
564
  );
572
565
  path = "hello-world";
573
566
  sourceTree = "<group>";
574
567
  };
575
- 1E9A631C1C506EFC00E28AE1 /* Products */ = {
576
- isa = PBXGroup;
577
- children = (
578
- 1E9A63F21C506EFD00E28AE1 /* helloWorldTest.xctest */,
579
- );
580
- name = Products;
581
- sourceTree = "<group>";
582
- };
583
- 1E9A631F1C506EFC00E28AE1 /* helloWorldTest */ = {
584
- isa = PBXGroup;
585
- children = (
586
- 1E9A63201C506EFC00E28AE1 /* helloWorldTest.swift */,
587
- 1E9A63211C506EFC00E28AE1 /* Info.plist */,
588
- );
589
- path = helloWorldTest;
590
- sourceTree = "<group>";
591
- };
592
568
  1E9A63221C506EFC00E28AE1 /* kindergarten-garden */ = {
593
569
  isa = PBXGroup;
594
570
  children = (
@@ -938,6 +914,24 @@
938
914
  name = "Supporting Files";
939
915
  sourceTree = "<group>";
940
916
  };
917
+ A016F7A31DF0418D005640FF /* beer-song */ = {
918
+ isa = PBXGroup;
919
+ children = (
920
+ A004DFC11DF8068A00800271 /* BeerSongExample.swift */,
921
+ A004DFC21DF8068A00800271 /* BeerSongTest.swift */,
922
+ );
923
+ name = "beer-song";
924
+ sourceTree = "<group>";
925
+ };
926
+ A039F3BF1DFECAAC0091A2DF /* sublist */ = {
927
+ isa = PBXGroup;
928
+ children = (
929
+ A0DBCBF91E00017E00E0DFBF /* SublistExample.swift */,
930
+ A0DBCBFA1E00017E00E0DFBF /* SubListTest.swift */,
931
+ );
932
+ name = "sublist";
933
+ sourceTree = "<group>";
934
+ };
941
935
  E908CD431C6AD03C005D081E /* food-chain */ = {
942
936
  isa = PBXGroup;
943
937
  children = (
@@ -1162,12 +1156,6 @@
1162
1156
  mainGroup = 9D3155BB1BA12DC1009A3991;
1163
1157
  productRefGroup = 9D3155C51BA12DC2009A3991 /* Products */;
1164
1158
  projectDirPath = "";
1165
- projectReferences = (
1166
- {
1167
- ProductGroup = 1E9A631C1C506EFC00E28AE1 /* Products */;
1168
- ProjectRef = 1E9A631B1C506EFC00E28AE1 /* helloWorld.xcodeproj */;
1169
- },
1170
- );
1171
1159
  projectRoot = "";
1172
1160
  targets = (
1173
1161
  9D3155D11BA12FB1009A3991 /* xSwiftTests */,
@@ -1175,22 +1163,11 @@
1175
1163
  };
1176
1164
  /* End PBXProject section */
1177
1165
 
1178
- /* Begin PBXReferenceProxy section */
1179
- 1E9A63F21C506EFD00E28AE1 /* helloWorldTest.xctest */ = {
1180
- isa = PBXReferenceProxy;
1181
- fileType = wrapper.cfbundle;
1182
- path = helloWorldTest.xctest;
1183
- remoteRef = 1E9A63F11C506EFD00E28AE1 /* PBXContainerItemProxy */;
1184
- sourceTree = BUILT_PRODUCTS_DIR;
1185
- };
1186
- /* End PBXReferenceProxy section */
1187
-
1188
1166
  /* Begin PBXResourcesBuildPhase section */
1189
1167
  9D3155D01BA12FB1009A3991 /* Resources */ = {
1190
1168
  isa = PBXResourcesBuildPhase;
1191
1169
  buildActionMask = 2147483647;
1192
1170
  files = (
1193
- 1E9A63AB1C506EFD00E28AE1 /* Info.plist in Resources */,
1194
1171
  );
1195
1172
  runOnlyForDeploymentPostprocessing = 0;
1196
1173
  };
@@ -1231,6 +1208,7 @@
1231
1208
  E90D62081C653ADC00C266D3 /* PalindromeProductsTest.swift in Sources */,
1232
1209
  E90D62001C642EFB00C266D3 /* OcrNumbersTest.swift in Sources */,
1233
1210
  1E9A63EF1C506EFD00E28AE1 /* WordyTest.swift in Sources */,
1211
+ A0DBCBF81E0000B800E0DFBF /* helloWorldTest.swift in Sources */,
1234
1212
  1E9A63EA1C506EFD00E28AE1 /* TwelveDaysExample.swift in Sources */,
1235
1213
  E951B6BD1D466045009EB5B6 /* BracketPushExample.swift in Sources */,
1236
1214
  1E9A63BC1C506EFD00E28AE1 /* PerfectNumbersExample.swift in Sources */,
@@ -1249,6 +1227,7 @@
1249
1227
  E94BDED01C510E68009318BB /* BinarySearchTest.swift in Sources */,
1250
1228
  1E9A63961C506EFD00E28AE1 /* ClockExample.swift in Sources */,
1251
1229
  1E9A63BD1C506EFD00E28AE1 /* PerfectNumbersTest.swift in Sources */,
1230
+ A004DFC31DF8068A00800271 /* BeerSongExample.swift in Sources */,
1252
1231
  1E9A63E51C506EFD00E28AE1 /* TournamentTest.swift in Sources */,
1253
1232
  1E9A63A41C506EFD00E28AE1 /* GrainsExample.swift in Sources */,
1254
1233
  1E9A63DA1C506EFD00E28AE1 /* SimpleCipherExample.swift in Sources */,
@@ -1272,7 +1251,6 @@
1272
1251
  1E9A63DF1C506EFD00E28AE1 /* SpaceAgeTest.swift in Sources */,
1273
1252
  1E9A63B21C506EFD00E28AE1 /* LuhnExample.swift in Sources */,
1274
1253
  1E9A63991C506EFD00E28AE1 /* CryptoSquareTest.swift in Sources */,
1275
- 1E9A63A81C506EFD00E28AE1 /* helloWorld.swift in Sources */,
1276
1254
  1E9A63E81C506EFD00E28AE1 /* TrinaryExample.swift in Sources */,
1277
1255
  1E9A63C01C506EFD00E28AE1 /* PigLatinExample.swift in Sources */,
1278
1256
  1E9A63A21C506EFD00E28AE1 /* GradeSchoolExample.swift in Sources */,
@@ -1292,15 +1270,16 @@
1292
1270
  E9AFA1531C5945C9006AD72D /* HexadecimalTest.swift in Sources */,
1293
1271
  1E9A63AF1C506EFD00E28AE1 /* LeapTest.swift in Sources */,
1294
1272
  1E9A63901C506EFD00E28AE1 /* AtbashExample.swift in Sources */,
1273
+ A0DBCBFB1E00017E00E0DFBF /* SublistExample.swift in Sources */,
1295
1274
  1E9A63C61C506EFD00E28AE1 /* QueenAttackExample.swift in Sources */,
1296
1275
  E90DE39E1D3E818000F3B881 /* AllYourBaseTest.swift in Sources */,
1297
1276
  E908CD481C6AD076005D081E /* FoodChainTest.swift in Sources */,
1298
1277
  1E9A63D91C506EFD00E28AE1 /* SieveTest.swift in Sources */,
1299
- 1E9A63AA1C506EFD00E28AE1 /* helloWorldTest.swift in Sources */,
1300
1278
  1E9A63A71C506EFD00E28AE1 /* HammingTest.swift in Sources */,
1301
1279
  1E9A63D01C506EFD00E28AE1 /* RomanNumeralsExample.swift in Sources */,
1302
1280
  1E9A63971C506EFD00E28AE1 /* ClockTest.swift in Sources */,
1303
1281
  1E9A63C21C506EFD00E28AE1 /* PrimeFactorsExample.swift in Sources */,
1282
+ A004DFC41DF8068A00800271 /* BeerSongTest.swift in Sources */,
1304
1283
  1E9A63AD1C506EFD00E28AE1 /* KindergartenGardenTest.swift in Sources */,
1305
1284
  1E9A638D1C506EFD00E28AE1 /* AllergiesTest.swift in Sources */,
1306
1285
  E90D62061C653AC000C266D3 /* PalindromeProductsExample.swift in Sources */,
@@ -1313,6 +1292,7 @@
1313
1292
  1E9A63B51C506EFD00E28AE1 /* MeetupTest.swift in Sources */,
1314
1293
  1E9A639C1C506EFD00E28AE1 /* DifferenceOfSquaresExample.swift in Sources */,
1315
1294
  E94BDECF1C510E68009318BB /* BinarySearchExample.swift in Sources */,
1295
+ A0DBCBFC1E00017E00E0DFBF /* SubListTest.swift in Sources */,
1316
1296
  1E9A639F1C506EFD00E28AE1 /* EtlTest.swift in Sources */,
1317
1297
  E9AFA17E1C61B162006AD72D /* LargestSeriesProductTest.swift in Sources */,
1318
1298
  E9AFA1851C624FB7006AD72D /* MinesweeperExample.swift in Sources */,
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.3.8
4
+ version: 2.0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-12 00:00:00.000000000 Z
11
+ date: 2016-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -147,6 +147,8 @@ files:
147
147
  - common/exercises/bob/canonical-data.json
148
148
  - common/exercises/bob/description.md
149
149
  - common/exercises/bob/metadata.yml
150
+ - common/exercises/book-store/description.md
151
+ - common/exercises/book-store/metadata.yml
150
152
  - common/exercises/bowling/canonical-data.json
151
153
  - common/exercises/bowling/description.md
152
154
  - common/exercises/bowling/metadata.yml
@@ -1178,6 +1180,7 @@ files:
1178
1180
  - tracks/crystal/exercises/bracket-push/src/bracket_push.cr
1179
1181
  - tracks/crystal/exercises/bracket-push/src/example.cr
1180
1182
  - tracks/crystal/exercises/difference-of-squares/spec/difference_of_squares_spec.cr
1183
+ - tracks/crystal/exercises/difference-of-squares/src/difference_of_squares.cr
1181
1184
  - tracks/crystal/exercises/difference-of-squares/src/example.cr
1182
1185
  - tracks/crystal/exercises/forth/spec/forth_spec.cr
1183
1186
  - tracks/crystal/exercises/forth/src/example.cr
@@ -2400,6 +2403,7 @@ files:
2400
2403
  - tracks/fsharp/docs/img/xamarin-fsharp.jpg
2401
2404
  - tracks/fsharp/exercises/accumulate/AccumulateTest.fs
2402
2405
  - tracks/fsharp/exercises/accumulate/Example.fs
2406
+ - tracks/fsharp/exercises/accumulate/HINTS.md
2403
2407
  - tracks/fsharp/exercises/acronym/AcronymTest.fs
2404
2408
  - tracks/fsharp/exercises/acronym/Example.fs
2405
2409
  - tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs
@@ -2441,6 +2445,7 @@ files:
2441
2445
  - tracks/fsharp/exercises/custom-set/Example.fs
2442
2446
  - tracks/fsharp/exercises/diamond/DiamondTest.fs
2443
2447
  - tracks/fsharp/exercises/diamond/Example.fs
2448
+ - tracks/fsharp/exercises/diamond/HINTS.md
2444
2449
  - tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs
2445
2450
  - tracks/fsharp/exercises/difference-of-squares/Example.fs
2446
2451
  - tracks/fsharp/exercises/difference-of-squares/HINTS.md
@@ -2517,6 +2522,7 @@ files:
2517
2522
  - tracks/fsharp/exercises/pangram/Example.fs
2518
2523
  - tracks/fsharp/exercises/pangram/PangramTest.fs
2519
2524
  - tracks/fsharp/exercises/parallel-letter-frequency/Example.fs
2525
+ - tracks/fsharp/exercises/parallel-letter-frequency/HINTS.md
2520
2526
  - tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequencyTest.fs
2521
2527
  - tracks/fsharp/exercises/pascals-triangle/Example.fs
2522
2528
  - tracks/fsharp/exercises/pascals-triangle/PascalsTriangleTest.fs
@@ -2527,6 +2533,7 @@ files:
2527
2533
  - tracks/fsharp/exercises/pig-latin/Example.fs
2528
2534
  - tracks/fsharp/exercises/pig-latin/PigLatinTest.fs
2529
2535
  - tracks/fsharp/exercises/poker/Example.fs
2536
+ - tracks/fsharp/exercises/poker/HINTS.md
2530
2537
  - tracks/fsharp/exercises/poker/PokerTest.fs
2531
2538
  - tracks/fsharp/exercises/pov/Example.fs
2532
2539
  - tracks/fsharp/exercises/pov/PovTest.fs
@@ -2543,6 +2550,7 @@ files:
2543
2550
  - tracks/fsharp/exercises/rail-fence-cipher/Example.fs
2544
2551
  - tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipherTest.fs
2545
2552
  - tracks/fsharp/exercises/raindrops/Example.fs
2553
+ - tracks/fsharp/exercises/raindrops/HINTS.md
2546
2554
  - tracks/fsharp/exercises/raindrops/RaindropsTest.fs
2547
2555
  - tracks/fsharp/exercises/react/Example.fs
2548
2556
  - tracks/fsharp/exercises/react/ReactTest.fs
@@ -2580,6 +2588,7 @@ files:
2580
2588
  - tracks/fsharp/exercises/simple-linked-list/Example.fs
2581
2589
  - tracks/fsharp/exercises/simple-linked-list/SimpleLinkedListTest.fs
2582
2590
  - tracks/fsharp/exercises/space-age/Example.fs
2591
+ - tracks/fsharp/exercises/space-age/HINTS.md
2583
2592
  - tracks/fsharp/exercises/space-age/SpaceAgeTest.fs
2584
2593
  - tracks/fsharp/exercises/strain/Example.fs
2585
2594
  - tracks/fsharp/exercises/strain/StrainTest.fs
@@ -4924,6 +4933,11 @@ files:
4924
4933
  - tracks/ocaml/exercises/rna-transcription/example.ml
4925
4934
  - tracks/ocaml/exercises/rna-transcription/rna_transcription.mli
4926
4935
  - tracks/ocaml/exercises/rna-transcription/test.ml
4936
+ - tracks/ocaml/exercises/robot-name/.merlin
4937
+ - tracks/ocaml/exercises/robot-name/Makefile
4938
+ - tracks/ocaml/exercises/robot-name/example.ml
4939
+ - tracks/ocaml/exercises/robot-name/robot_name.mli
4940
+ - tracks/ocaml/exercises/robot-name/test.ml
4927
4941
  - tracks/ocaml/exercises/roman-numerals/.merlin
4928
4942
  - tracks/ocaml/exercises/roman-numerals/Makefile
4929
4943
  - tracks/ocaml/exercises/roman-numerals/_tags
@@ -4957,6 +4971,7 @@ files:
4957
4971
  - tracks/ocaml/img/icon.png
4958
4972
  - tracks/ocaml/tools/test-generator/.merlin
4959
4973
  - tracks/ocaml/tools/test-generator/Makefile
4974
+ - tracks/ocaml/tools/test-generator/README.md
4960
4975
  - tracks/ocaml/tools/test-generator/_tags
4961
4976
  - tracks/ocaml/tools/test-generator/interfaces/codegen.mli
4962
4977
  - tracks/ocaml/tools/test-generator/interfaces/controller.mli
@@ -4964,6 +4979,7 @@ files:
4964
4979
  - tracks/ocaml/tools/test-generator/interfaces/special_cases.mli
4965
4980
  - tracks/ocaml/tools/test-generator/interfaces/template.mli
4966
4981
  - tracks/ocaml/tools/test-generator/interfaces/utils.mli
4982
+ - tracks/ocaml/tools/test-generator/src/canonical_data_checker.ml
4967
4983
  - tracks/ocaml/tools/test-generator/src/codegen.ml
4968
4984
  - tracks/ocaml/tools/test-generator/src/controller.ml
4969
4985
  - tracks/ocaml/tools/test-generator/src/model.ml
@@ -4985,6 +5001,7 @@ files:
4985
5001
  - tracks/ocaml/tools/test-generator/templates/say/template.ml
4986
5002
  - tracks/ocaml/tools/test-generator/templates/word-count/template.ml
4987
5003
  - tracks/ocaml/tools/test-generator/test/all_tests.ml
5004
+ - tracks/ocaml/tools/test-generator/test/clock.json
4988
5005
  - tracks/ocaml/tools/test-generator/test/codegen_test.ml
4989
5006
  - tracks/ocaml/tools/test-generator/test/difference_of_squares.json
4990
5007
  - tracks/ocaml/tools/test-generator/test/hello_world.json
@@ -4996,6 +5013,7 @@ files:
4996
5013
  - tracks/ocaml/tools/test-generator/test/special_cases_test.ml
4997
5014
  - tracks/ocaml/tools/test-generator/test/template_test.ml
4998
5015
  - tracks/ocaml/tools/test-generator/test/utils_test.ml
5016
+ - tracks/ocaml/tools/test-generator/test/with-methods-key.json
4999
5017
  - tracks/pascal/.git
5000
5018
  - tracks/pascal/.gitignore
5001
5019
  - tracks/pascal/.travis.yml
@@ -5213,6 +5231,9 @@ files:
5213
5231
  - tracks/perl6/exercises/trinary/trinary.t
5214
5232
  - tracks/perl6/exercises/word-count/Example.pm
5215
5233
  - tracks/perl6/exercises/word-count/word_count.t
5234
+ - tracks/perl6/exercises/wordy/Example.p6
5235
+ - tracks/perl6/exercises/wordy/cases.json
5236
+ - tracks/perl6/exercises/wordy/wordy.t
5216
5237
  - tracks/perl6/img/icon.png
5217
5238
  - tracks/php/.editorconfig
5218
5239
  - tracks/php/.git
@@ -5780,7 +5801,7 @@ files:
5780
5801
  - tracks/ruby/docs/TESTS.md
5781
5802
  - tracks/ruby/exercises/accumulate/accumulate_test.rb
5782
5803
  - tracks/ruby/exercises/accumulate/example.rb
5783
- - tracks/ruby/exercises/acronym/.version
5804
+ - tracks/ruby/exercises/acronym/.meta/.version
5784
5805
  - tracks/ruby/exercises/acronym/acronym_test.rb
5785
5806
  - tracks/ruby/exercises/acronym/example.rb
5786
5807
  - tracks/ruby/exercises/acronym/example.tt
@@ -5788,11 +5809,11 @@ files:
5788
5809
  - tracks/ruby/exercises/all-your-base/example.rb
5789
5810
  - tracks/ruby/exercises/allergies/allergies_test.rb
5790
5811
  - tracks/ruby/exercises/allergies/example.rb
5791
- - tracks/ruby/exercises/alphametics/.version
5812
+ - tracks/ruby/exercises/alphametics/.meta/.version
5792
5813
  - tracks/ruby/exercises/alphametics/alphametics_test.rb
5793
5814
  - tracks/ruby/exercises/alphametics/example.rb
5794
5815
  - tracks/ruby/exercises/alphametics/example.tt
5795
- - tracks/ruby/exercises/anagram/.version
5816
+ - tracks/ruby/exercises/anagram/.meta/.version
5796
5817
  - tracks/ruby/exercises/anagram/anagram_test.rb
5797
5818
  - tracks/ruby/exercises/anagram/example.rb
5798
5819
  - tracks/ruby/exercises/anagram/example.tt
@@ -5804,43 +5825,43 @@ files:
5804
5825
  - tracks/ruby/exercises/binary-search-tree/example.rb
5805
5826
  - tracks/ruby/exercises/binary-search/binary_search_test.rb
5806
5827
  - tracks/ruby/exercises/binary-search/example.rb
5807
- - tracks/ruby/exercises/binary/.version
5828
+ - tracks/ruby/exercises/binary/.meta/.version
5808
5829
  - tracks/ruby/exercises/binary/binary_test.rb
5809
5830
  - tracks/ruby/exercises/binary/example.rb
5810
5831
  - tracks/ruby/exercises/binary/example.tt
5811
5832
  - tracks/ruby/exercises/bob/bob_test.rb
5812
5833
  - tracks/ruby/exercises/bob/example.rb
5813
- - tracks/ruby/exercises/bowling/.version
5834
+ - tracks/ruby/exercises/bowling/.meta/.version
5814
5835
  - tracks/ruby/exercises/bowling/bowling_test.rb
5815
5836
  - tracks/ruby/exercises/bowling/example.rb
5816
5837
  - tracks/ruby/exercises/bowling/example.tt
5817
- - tracks/ruby/exercises/bracket-push/.version
5838
+ - tracks/ruby/exercises/bracket-push/.meta/.version
5818
5839
  - tracks/ruby/exercises/bracket-push/bracket_push_test.rb
5819
5840
  - tracks/ruby/exercises/bracket-push/example.rb
5820
5841
  - tracks/ruby/exercises/bracket-push/example.tt
5821
5842
  - tracks/ruby/exercises/circular-buffer/circular_buffer_test.rb
5822
5843
  - tracks/ruby/exercises/circular-buffer/example.rb
5823
- - tracks/ruby/exercises/clock/.version
5844
+ - tracks/ruby/exercises/clock/.meta/.version
5824
5845
  - tracks/ruby/exercises/clock/clock_test.rb
5825
5846
  - tracks/ruby/exercises/clock/example.rb
5826
5847
  - tracks/ruby/exercises/clock/example.tt
5827
- - tracks/ruby/exercises/connect/.version
5848
+ - tracks/ruby/exercises/connect/.meta/.version
5828
5849
  - tracks/ruby/exercises/connect/connect_test.rb
5829
5850
  - tracks/ruby/exercises/connect/example.rb
5830
5851
  - tracks/ruby/exercises/connect/example.tt
5831
5852
  - tracks/ruby/exercises/crypto-square/crypto_square_test.rb
5832
5853
  - tracks/ruby/exercises/crypto-square/example.rb
5833
- - tracks/ruby/exercises/custom-set/.version
5854
+ - tracks/ruby/exercises/custom-set/.meta/.version
5834
5855
  - tracks/ruby/exercises/custom-set/custom_set_test.rb
5835
5856
  - tracks/ruby/exercises/custom-set/example.rb
5836
5857
  - tracks/ruby/exercises/custom-set/example.tt
5837
5858
  - tracks/ruby/exercises/diamond/diamond_test.rb
5838
5859
  - tracks/ruby/exercises/diamond/example.rb
5839
- - tracks/ruby/exercises/difference-of-squares/.version
5860
+ - tracks/ruby/exercises/difference-of-squares/.meta/.version
5840
5861
  - tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb
5841
5862
  - tracks/ruby/exercises/difference-of-squares/example.rb
5842
5863
  - tracks/ruby/exercises/difference-of-squares/example.tt
5843
- - tracks/ruby/exercises/dominoes/.version
5864
+ - tracks/ruby/exercises/dominoes/.meta/.version
5844
5865
  - tracks/ruby/exercises/dominoes/dominoes_test.rb
5845
5866
  - tracks/ruby/exercises/dominoes/example.rb
5846
5867
  - tracks/ruby/exercises/dominoes/example.tt
@@ -5851,7 +5872,7 @@ files:
5851
5872
  - tracks/ruby/exercises/food-chain/example.rb
5852
5873
  - tracks/ruby/exercises/food-chain/food_chain_test.rb
5853
5874
  - tracks/ruby/exercises/food-chain/song.txt
5854
- - tracks/ruby/exercises/gigasecond/.version
5875
+ - tracks/ruby/exercises/gigasecond/.meta/.version
5855
5876
  - tracks/ruby/exercises/gigasecond/example.rb
5856
5877
  - tracks/ruby/exercises/gigasecond/example.tt
5857
5878
  - tracks/ruby/exercises/gigasecond/gigasecond_test.rb
@@ -5859,11 +5880,11 @@ files:
5859
5880
  - tracks/ruby/exercises/grade-school/grade_school_test.rb
5860
5881
  - tracks/ruby/exercises/grains/example.rb
5861
5882
  - tracks/ruby/exercises/grains/grains_test.rb
5862
- - tracks/ruby/exercises/hamming/.version
5883
+ - tracks/ruby/exercises/hamming/.meta/.version
5863
5884
  - tracks/ruby/exercises/hamming/example.rb
5864
5885
  - tracks/ruby/exercises/hamming/example.tt
5865
5886
  - tracks/ruby/exercises/hamming/hamming_test.rb
5866
- - tracks/ruby/exercises/hello-world/.version
5887
+ - tracks/ruby/exercises/hello-world/.meta/.version
5867
5888
  - tracks/ruby/exercises/hello-world/GETTING_STARTED.md
5868
5889
  - tracks/ruby/exercises/hello-world/example.rb
5869
5890
  - tracks/ruby/exercises/hello-world/example.tt
@@ -5872,17 +5893,17 @@ files:
5872
5893
  - tracks/ruby/exercises/hexadecimal/hexadecimal_test.rb
5873
5894
  - tracks/ruby/exercises/house/example.rb
5874
5895
  - tracks/ruby/exercises/house/house_test.rb
5875
- - tracks/ruby/exercises/isogram/.version
5896
+ - tracks/ruby/exercises/isogram/.meta/.version
5876
5897
  - tracks/ruby/exercises/isogram/example.rb
5877
5898
  - tracks/ruby/exercises/isogram/example.tt
5878
5899
  - tracks/ruby/exercises/isogram/isogram_test.rb
5879
5900
  - tracks/ruby/exercises/kindergarten-garden/example.rb
5880
5901
  - tracks/ruby/exercises/kindergarten-garden/kindergarten_garden_test.rb
5881
- - tracks/ruby/exercises/largest-series-product/.version
5902
+ - tracks/ruby/exercises/largest-series-product/.meta/.version
5882
5903
  - tracks/ruby/exercises/largest-series-product/example.rb
5883
5904
  - tracks/ruby/exercises/largest-series-product/example.tt
5884
5905
  - tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb
5885
- - tracks/ruby/exercises/leap/.version
5906
+ - tracks/ruby/exercises/leap/.meta/.version
5886
5907
  - tracks/ruby/exercises/leap/example.rb
5887
5908
  - tracks/ruby/exercises/leap/example.tt
5888
5909
  - tracks/ruby/exercises/leap/leap_test.rb
@@ -5898,7 +5919,7 @@ files:
5898
5919
  - tracks/ruby/exercises/meetup/meetup_test.rb
5899
5920
  - tracks/ruby/exercises/minesweeper/example.rb
5900
5921
  - tracks/ruby/exercises/minesweeper/minesweeper_test.rb
5901
- - tracks/ruby/exercises/nth-prime/.version
5922
+ - tracks/ruby/exercises/nth-prime/.meta/.version
5902
5923
  - tracks/ruby/exercises/nth-prime/example.rb
5903
5924
  - tracks/ruby/exercises/nth-prime/example.tt
5904
5925
  - tracks/ruby/exercises/nth-prime/nth_prime_test.rb
@@ -5910,7 +5931,7 @@ files:
5910
5931
  - tracks/ruby/exercises/octal/octal_test.rb
5911
5932
  - tracks/ruby/exercises/palindrome-products/example.rb
5912
5933
  - tracks/ruby/exercises/palindrome-products/palindrome_products_test.rb
5913
- - tracks/ruby/exercises/pangram/.version
5934
+ - tracks/ruby/exercises/pangram/.meta/.version
5914
5935
  - tracks/ruby/exercises/pangram/example.rb
5915
5936
  - tracks/ruby/exercises/pangram/example.tt
5916
5937
  - tracks/ruby/exercises/pangram/pangram_test.rb
@@ -5934,17 +5955,17 @@ files:
5934
5955
  - tracks/ruby/exercises/proverb/proverb_test.rb
5935
5956
  - tracks/ruby/exercises/pythagorean-triplet/example.rb
5936
5957
  - tracks/ruby/exercises/pythagorean-triplet/pythagorean_triplet_test.rb
5937
- - tracks/ruby/exercises/queen-attack/.version
5958
+ - tracks/ruby/exercises/queen-attack/.meta/.version
5938
5959
  - tracks/ruby/exercises/queen-attack/example.rb
5939
5960
  - tracks/ruby/exercises/queen-attack/example.tt
5940
5961
  - tracks/ruby/exercises/queen-attack/queen_attack_test.rb
5941
5962
  - tracks/ruby/exercises/rail-fence-cipher/example.rb
5942
5963
  - tracks/ruby/exercises/rail-fence-cipher/rail_fence_cipher_test.rb
5943
- - tracks/ruby/exercises/raindrops/.version
5964
+ - tracks/ruby/exercises/raindrops/.meta/.version
5944
5965
  - tracks/ruby/exercises/raindrops/example.rb
5945
5966
  - tracks/ruby/exercises/raindrops/example.tt
5946
5967
  - tracks/ruby/exercises/raindrops/raindrops_test.rb
5947
- - tracks/ruby/exercises/rna-transcription/.version
5968
+ - tracks/ruby/exercises/rna-transcription/.meta/.version
5948
5969
  - tracks/ruby/exercises/rna-transcription/example.rb
5949
5970
  - tracks/ruby/exercises/rna-transcription/example.tt
5950
5971
  - tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb
@@ -5952,11 +5973,11 @@ files:
5952
5973
  - tracks/ruby/exercises/robot-name/robot_name_test.rb
5953
5974
  - tracks/ruby/exercises/robot-simulator/example.rb
5954
5975
  - tracks/ruby/exercises/robot-simulator/robot_simulator_test.rb
5955
- - tracks/ruby/exercises/roman-numerals/.version
5976
+ - tracks/ruby/exercises/roman-numerals/.meta/.version
5956
5977
  - tracks/ruby/exercises/roman-numerals/example.rb
5957
5978
  - tracks/ruby/exercises/roman-numerals/example.tt
5958
5979
  - tracks/ruby/exercises/roman-numerals/roman_numerals_test.rb
5959
- - tracks/ruby/exercises/run-length-encoding/.version
5980
+ - tracks/ruby/exercises/run-length-encoding/.meta/.version
5960
5981
  - tracks/ruby/exercises/run-length-encoding/example.rb
5961
5982
  - tracks/ruby/exercises/run-length-encoding/example.tt
5962
5983
  - tracks/ruby/exercises/run-length-encoding/run_length_encoding_test.rb
@@ -5972,7 +5993,7 @@ files:
5972
5993
  - tracks/ruby/exercises/secret-handshake/secret_handshake_test.rb
5973
5994
  - tracks/ruby/exercises/series/example.rb
5974
5995
  - tracks/ruby/exercises/series/series_test.rb
5975
- - tracks/ruby/exercises/sieve/.version
5996
+ - tracks/ruby/exercises/sieve/.meta/.version
5976
5997
  - tracks/ruby/exercises/sieve/example.rb
5977
5998
  - tracks/ruby/exercises/sieve/example.tt
5978
5999
  - tracks/ruby/exercises/sieve/sieve_test.rb
@@ -5986,15 +6007,15 @@ files:
5986
6007
  - tracks/ruby/exercises/strain/strain_test.rb
5987
6008
  - tracks/ruby/exercises/sum-of-multiples/example.rb
5988
6009
  - tracks/ruby/exercises/sum-of-multiples/sum_of_multiples_test.rb
5989
- - tracks/ruby/exercises/tournament/.version
6010
+ - tracks/ruby/exercises/tournament/.meta/.version
5990
6011
  - tracks/ruby/exercises/tournament/example.rb
5991
6012
  - tracks/ruby/exercises/tournament/example.tt
5992
6013
  - tracks/ruby/exercises/tournament/tournament_test.rb
5993
- - tracks/ruby/exercises/transpose/.version
6014
+ - tracks/ruby/exercises/transpose/.meta/.version
5994
6015
  - tracks/ruby/exercises/transpose/example.rb
5995
6016
  - tracks/ruby/exercises/transpose/example.tt
5996
6017
  - tracks/ruby/exercises/transpose/transpose_test.rb
5997
- - tracks/ruby/exercises/triangle/.version
6018
+ - tracks/ruby/exercises/triangle/.meta/.version
5998
6019
  - tracks/ruby/exercises/triangle/example.rb
5999
6020
  - tracks/ruby/exercises/triangle/example.tt
6000
6021
  - tracks/ruby/exercises/triangle/triangle_test.rb
@@ -6003,11 +6024,11 @@ files:
6003
6024
  - tracks/ruby/exercises/twelve-days/example.rb
6004
6025
  - tracks/ruby/exercises/twelve-days/song.txt
6005
6026
  - tracks/ruby/exercises/twelve-days/twelve_days_test.rb
6006
- - tracks/ruby/exercises/two-bucket/.version
6027
+ - tracks/ruby/exercises/two-bucket/.meta/.version
6007
6028
  - tracks/ruby/exercises/two-bucket/example.rb
6008
6029
  - tracks/ruby/exercises/two-bucket/example.tt
6009
6030
  - tracks/ruby/exercises/two-bucket/two_bucket_test.rb
6010
- - tracks/ruby/exercises/word-count/.version
6031
+ - tracks/ruby/exercises/word-count/.meta/.version
6011
6032
  - tracks/ruby/exercises/word-count/example.rb
6012
6033
  - tracks/ruby/exercises/word-count/example.tt
6013
6034
  - tracks/ruby/exercises/word-count/word_count_test.rb
@@ -6173,6 +6194,11 @@ files:
6173
6194
  - tracks/rust/exercises/hexadecimal/Cargo.toml
6174
6195
  - tracks/rust/exercises/hexadecimal/example.rs
6175
6196
  - tracks/rust/exercises/hexadecimal/tests/hexadecimal.rs
6197
+ - tracks/rust/exercises/largest-series-product/.gitignore
6198
+ - tracks/rust/exercises/largest-series-product/Cargo.toml
6199
+ - tracks/rust/exercises/largest-series-product/HINTS.md
6200
+ - tracks/rust/exercises/largest-series-product/example.rs
6201
+ - tracks/rust/exercises/largest-series-product/tests/largest-series-product.rs
6176
6202
  - tracks/rust/exercises/leap/.gitignore
6177
6203
  - tracks/rust/exercises/leap/Cargo.lock
6178
6204
  - tracks/rust/exercises/leap/Cargo.toml
@@ -6327,7 +6353,7 @@ files:
6327
6353
  - tracks/scala/exercises/accumulate/build.sbt
6328
6354
  - tracks/scala/exercises/accumulate/example.scala
6329
6355
  - tracks/scala/exercises/accumulate/src/main/scala/.keep
6330
- - tracks/scala/exercises/accumulate/src/test/scala/accumulate_test.scala
6356
+ - tracks/scala/exercises/accumulate/src/test/scala/AccumulateTest.scala
6331
6357
  - tracks/scala/exercises/acronym/build.sbt
6332
6358
  - tracks/scala/exercises/acronym/example.scala
6333
6359
  - tracks/scala/exercises/acronym/src/main/scala/.keep
@@ -6339,7 +6365,7 @@ files:
6339
6365
  - tracks/scala/exercises/allergies/build.sbt
6340
6366
  - tracks/scala/exercises/allergies/example.scala
6341
6367
  - tracks/scala/exercises/allergies/src/main/scala/.keep
6342
- - tracks/scala/exercises/allergies/src/test/scala/allergies_test.scala
6368
+ - tracks/scala/exercises/allergies/src/test/scala/AllergiesTest.scala
6343
6369
  - tracks/scala/exercises/alphametics/build.sbt
6344
6370
  - tracks/scala/exercises/alphametics/example.scala
6345
6371
  - tracks/scala/exercises/alphametics/src/main/scala/.keep
@@ -6347,7 +6373,7 @@ files:
6347
6373
  - tracks/scala/exercises/anagram/build.sbt
6348
6374
  - tracks/scala/exercises/anagram/example.scala
6349
6375
  - tracks/scala/exercises/anagram/src/main/scala/.keep
6350
- - tracks/scala/exercises/anagram/src/test/scala/anagram_test.scala
6376
+ - tracks/scala/exercises/anagram/src/test/scala/AnagramTest.scala
6351
6377
  - tracks/scala/exercises/atbash-cipher/build.sbt
6352
6378
  - tracks/scala/exercises/atbash-cipher/example.scala
6353
6379
  - tracks/scala/exercises/atbash-cipher/src/main/scala/.keep
@@ -6365,11 +6391,11 @@ files:
6365
6391
  - tracks/scala/exercises/binary/build.sbt
6366
6392
  - tracks/scala/exercises/binary/example.scala
6367
6393
  - tracks/scala/exercises/binary/src/main/scala/.keep
6368
- - tracks/scala/exercises/binary/src/test/scala/binary_test.scala
6394
+ - tracks/scala/exercises/binary/src/test/scala/BinaryTest.scala
6369
6395
  - tracks/scala/exercises/bob/build.sbt
6370
6396
  - tracks/scala/exercises/bob/example.scala
6371
6397
  - tracks/scala/exercises/bob/src/main/scala/.keep
6372
- - tracks/scala/exercises/bob/src/test/scala/bob_test.scala
6398
+ - tracks/scala/exercises/bob/src/test/scala/BobTest.scala
6373
6399
  - tracks/scala/exercises/bowling/Example.scala
6374
6400
  - tracks/scala/exercises/bowling/build.sbt
6375
6401
  - tracks/scala/exercises/bowling/src/main/scala/Bowling.scala
@@ -6402,7 +6428,7 @@ files:
6402
6428
  - tracks/scala/exercises/difference-of-squares/build.sbt
6403
6429
  - tracks/scala/exercises/difference-of-squares/example.scala
6404
6430
  - tracks/scala/exercises/difference-of-squares/src/main/scala/.keep
6405
- - tracks/scala/exercises/difference-of-squares/src/test/scala/squares_test.scala
6431
+ - tracks/scala/exercises/difference-of-squares/src/test/scala/SquaresTest.scala
6406
6432
  - tracks/scala/exercises/dominoes/Example.scala
6407
6433
  - tracks/scala/exercises/dominoes/build.sbt
6408
6434
  - tracks/scala/exercises/dominoes/src/main/scala/Dominoes.scala
@@ -6410,7 +6436,7 @@ files:
6410
6436
  - tracks/scala/exercises/etl/build.sbt
6411
6437
  - tracks/scala/exercises/etl/example.scala
6412
6438
  - tracks/scala/exercises/etl/src/main/scala/.keep
6413
- - tracks/scala/exercises/etl/src/test/scala/etl_test.scala
6439
+ - tracks/scala/exercises/etl/src/test/scala/EtlTest.scala
6414
6440
  - tracks/scala/exercises/food-chain/build.sbt
6415
6441
  - tracks/scala/exercises/food-chain/example.scala
6416
6442
  - tracks/scala/exercises/food-chain/src/main/scala/.keep
@@ -6424,20 +6450,20 @@ files:
6424
6450
  - tracks/scala/exercises/gigasecond/build.sbt
6425
6451
  - tracks/scala/exercises/gigasecond/example.scala
6426
6452
  - tracks/scala/exercises/gigasecond/src/main/scala/.keep
6427
- - tracks/scala/exercises/gigasecond/src/test/scala/gigasecond_test.scala
6453
+ - tracks/scala/exercises/gigasecond/src/test/scala/GigasecondTest.scala
6428
6454
  - tracks/scala/exercises/grade-school/build.sbt
6429
6455
  - tracks/scala/exercises/grade-school/example.scala
6430
6456
  - tracks/scala/exercises/grade-school/src/main/scala/.keep
6431
- - tracks/scala/exercises/grade-school/src/test/scala/grade_school_test.scala
6457
+ - tracks/scala/exercises/grade-school/src/test/scala/GradeSchoolTest.scala
6432
6458
  - tracks/scala/exercises/grains/build.sbt
6433
6459
  - tracks/scala/exercises/grains/example.scala
6434
6460
  - tracks/scala/exercises/grains/src/main/scala/.keep
6435
- - tracks/scala/exercises/grains/src/test/scala/grains_test.scala
6461
+ - tracks/scala/exercises/grains/src/test/scala/GrainsTest.scala
6436
6462
  - tracks/scala/exercises/hamming/HINTS.md
6437
6463
  - tracks/scala/exercises/hamming/build.sbt
6438
6464
  - tracks/scala/exercises/hamming/example.scala
6439
6465
  - tracks/scala/exercises/hamming/src/main/scala/.keep
6440
- - tracks/scala/exercises/hamming/src/test/scala/hamming_test.scala
6466
+ - tracks/scala/exercises/hamming/src/test/scala/HammingTest.scala
6441
6467
  - tracks/scala/exercises/hello-world/HINTS.md
6442
6468
  - tracks/scala/exercises/hello-world/build.sbt
6443
6469
  - tracks/scala/exercises/hello-world/example.scala
@@ -6463,7 +6489,7 @@ files:
6463
6489
  - tracks/scala/exercises/leap/build.sbt
6464
6490
  - tracks/scala/exercises/leap/example.scala
6465
6491
  - tracks/scala/exercises/leap/src/main/scala/.keep
6466
- - tracks/scala/exercises/leap/src/test/scala/leap_test.scala
6492
+ - tracks/scala/exercises/leap/src/test/scala/LeapTest.scala
6467
6493
  - tracks/scala/exercises/lens-person/README.md
6468
6494
  - tracks/scala/exercises/lens-person/build.sbt
6469
6495
  - tracks/scala/exercises/lens-person/example.scala
@@ -6484,7 +6510,7 @@ files:
6484
6510
  - tracks/scala/exercises/meetup/build.sbt
6485
6511
  - tracks/scala/exercises/meetup/example.scala
6486
6512
  - tracks/scala/exercises/meetup/src/main/scala/.keep
6487
- - tracks/scala/exercises/meetup/src/test/scala/meetup_test.scala
6513
+ - tracks/scala/exercises/meetup/src/test/scala/MeetupTest.scala
6488
6514
  - tracks/scala/exercises/minesweeper/build.sbt
6489
6515
  - tracks/scala/exercises/minesweeper/example.scala
6490
6516
  - tracks/scala/exercises/minesweeper/src/main/scala/.keep
@@ -6497,7 +6523,7 @@ files:
6497
6523
  - tracks/scala/exercises/nucleotide-count/build.sbt
6498
6524
  - tracks/scala/exercises/nucleotide-count/example.scala
6499
6525
  - tracks/scala/exercises/nucleotide-count/src/main/scala/.keep
6500
- - tracks/scala/exercises/nucleotide-count/src/test/scala/nucleotide_count_test.scala
6526
+ - tracks/scala/exercises/nucleotide-count/src/test/scala/NucleotideCountTest.scala
6501
6527
  - tracks/scala/exercises/ocr-numbers/build.sbt
6502
6528
  - tracks/scala/exercises/ocr-numbers/example.scala
6503
6529
  - tracks/scala/exercises/ocr-numbers/src/main/scala/.keep
@@ -6513,7 +6539,8 @@ files:
6513
6539
  - tracks/scala/exercises/pangram/build.sbt
6514
6540
  - tracks/scala/exercises/pangram/example.scala
6515
6541
  - tracks/scala/exercises/pangram/src/main/scala/.keep
6516
- - tracks/scala/exercises/pangram/src/test/scala/PangramsTest.scala
6542
+ - tracks/scala/exercises/pangram/src/test/scala/PangramTest.scala
6543
+ - tracks/scala/exercises/parallel-letter-frequency/HINTS.md
6517
6544
  - tracks/scala/exercises/parallel-letter-frequency/build.sbt
6518
6545
  - tracks/scala/exercises/parallel-letter-frequency/example.scala
6519
6546
  - tracks/scala/exercises/parallel-letter-frequency/src/main/scala/.keep
@@ -6526,7 +6553,7 @@ files:
6526
6553
  - tracks/scala/exercises/phone-number/build.sbt
6527
6554
  - tracks/scala/exercises/phone-number/example.scala
6528
6555
  - tracks/scala/exercises/phone-number/src/main/scala/.keep
6529
- - tracks/scala/exercises/phone-number/src/test/scala/phone_number_test.scala
6556
+ - tracks/scala/exercises/phone-number/src/test/scala/PhoneNumberTest.scala
6530
6557
  - tracks/scala/exercises/pig-latin/build.sbt
6531
6558
  - tracks/scala/exercises/pig-latin/example.scala
6532
6559
  - tracks/scala/exercises/pig-latin/src/main/scala/.keep
@@ -6534,7 +6561,7 @@ files:
6534
6561
  - tracks/scala/exercises/prime-factors/build.sbt
6535
6562
  - tracks/scala/exercises/prime-factors/example.scala
6536
6563
  - tracks/scala/exercises/prime-factors/src/main/scala/.keep
6537
- - tracks/scala/exercises/prime-factors/src/test/scala/primefactors_test.scala
6564
+ - tracks/scala/exercises/prime-factors/src/test/scala/PrimefactorsTest.scala
6538
6565
  - tracks/scala/exercises/pythagorean-triplet/build.sbt
6539
6566
  - tracks/scala/exercises/pythagorean-triplet/example.scala
6540
6567
  - tracks/scala/exercises/pythagorean-triplet/src/main/scala/.keep
@@ -6546,16 +6573,16 @@ files:
6546
6573
  - tracks/scala/exercises/raindrops/build.sbt
6547
6574
  - tracks/scala/exercises/raindrops/example.scala
6548
6575
  - tracks/scala/exercises/raindrops/src/main/scala/.keep
6549
- - tracks/scala/exercises/raindrops/src/test/scala/raindrops_test.scala
6576
+ - tracks/scala/exercises/raindrops/src/test/scala/RaindropsTest.scala
6550
6577
  - tracks/scala/exercises/rna-transcription/build.sbt
6551
6578
  - tracks/scala/exercises/rna-transcription/example.scala
6552
6579
  - tracks/scala/exercises/rna-transcription/src/main/scala/.keep
6553
- - tracks/scala/exercises/rna-transcription/src/test/scala/transcription_test.scala
6580
+ - tracks/scala/exercises/rna-transcription/src/test/scala/RnaTranscriptionTest.scala
6554
6581
  - tracks/scala/exercises/robot-name/HINTS.md
6555
6582
  - tracks/scala/exercises/robot-name/build.sbt
6556
6583
  - tracks/scala/exercises/robot-name/example.scala
6557
6584
  - tracks/scala/exercises/robot-name/src/main/scala/.keep
6558
- - tracks/scala/exercises/robot-name/src/test/scala/robot_name_test.scala
6585
+ - tracks/scala/exercises/robot-name/src/test/scala/RobotNameTest.scala
6559
6586
  - tracks/scala/exercises/robot-simulator/build.sbt
6560
6587
  - tracks/scala/exercises/robot-simulator/example.scala
6561
6588
  - tracks/scala/exercises/robot-simulator/src/main/scala/.keep
@@ -6564,11 +6591,11 @@ files:
6564
6591
  - tracks/scala/exercises/roman-numerals/build.sbt
6565
6592
  - tracks/scala/exercises/roman-numerals/example.scala
6566
6593
  - tracks/scala/exercises/roman-numerals/src/main/scala/.keep
6567
- - tracks/scala/exercises/roman-numerals/src/test/scala/roman_numerals_test.scala
6594
+ - tracks/scala/exercises/roman-numerals/src/test/scala/RomanNumeralsTest.scala
6568
6595
  - tracks/scala/exercises/saddle-points/build.sbt
6569
6596
  - tracks/scala/exercises/saddle-points/example.scala
6570
6597
  - tracks/scala/exercises/saddle-points/src/main/scala/.keep
6571
- - tracks/scala/exercises/saddle-points/src/test/scala/SaddlePointsSpecs.scala
6598
+ - tracks/scala/exercises/saddle-points/src/test/scala/SaddlePointsTest.scala
6572
6599
  - tracks/scala/exercises/say/build.sbt
6573
6600
  - tracks/scala/exercises/say/example.scala
6574
6601
  - tracks/scala/exercises/say/src/main/scala/.keep
@@ -6576,7 +6603,7 @@ files:
6576
6603
  - tracks/scala/exercises/scrabble-score/build.sbt
6577
6604
  - tracks/scala/exercises/scrabble-score/example.scala
6578
6605
  - tracks/scala/exercises/scrabble-score/src/main/scala/.keep
6579
- - tracks/scala/exercises/scrabble-score/src/test/scala/scrabble_score_test.scala
6606
+ - tracks/scala/exercises/scrabble-score/src/test/scala/ScrabbleScoreTest.scala
6580
6607
  - tracks/scala/exercises/secret-handshake/build.sbt
6581
6608
  - tracks/scala/exercises/secret-handshake/example.scala
6582
6609
  - tracks/scala/exercises/secret-handshake/src/main/scala/.keep
@@ -6601,11 +6628,11 @@ files:
6601
6628
  - tracks/scala/exercises/space-age/build.sbt
6602
6629
  - tracks/scala/exercises/space-age/example.scala
6603
6630
  - tracks/scala/exercises/space-age/src/main/scala/.keep
6604
- - tracks/scala/exercises/space-age/src/test/scala/space_age_test.scala
6631
+ - tracks/scala/exercises/space-age/src/test/scala/SpaceAgeTest.scala
6605
6632
  - tracks/scala/exercises/sublist/build.sbt
6606
6633
  - tracks/scala/exercises/sublist/example.scala
6607
6634
  - tracks/scala/exercises/sublist/src/main/scala/.keep
6608
- - tracks/scala/exercises/sublist/src/test/scala/sublist_test.scala
6635
+ - tracks/scala/exercises/sublist/src/test/scala/SublistTest.scala
6609
6636
  - tracks/scala/exercises/sum-of-multiples/build.sbt
6610
6637
  - tracks/scala/exercises/sum-of-multiples/example.scala
6611
6638
  - tracks/scala/exercises/sum-of-multiples/src/main/scala/.keep
@@ -6614,7 +6641,7 @@ files:
6614
6641
  - tracks/scala/exercises/triangle/build.sbt
6615
6642
  - tracks/scala/exercises/triangle/example.scala
6616
6643
  - tracks/scala/exercises/triangle/src/main/scala/.keep
6617
- - tracks/scala/exercises/triangle/src/test/scala/triangle_test.scala
6644
+ - tracks/scala/exercises/triangle/src/test/scala/TriangleTest.scala
6618
6645
  - tracks/scala/exercises/trinary/build.sbt
6619
6646
  - tracks/scala/exercises/trinary/example.scala
6620
6647
  - tracks/scala/exercises/trinary/src/main/scala/.keep
@@ -6622,7 +6649,7 @@ files:
6622
6649
  - tracks/scala/exercises/word-count/build.sbt
6623
6650
  - tracks/scala/exercises/word-count/example.scala
6624
6651
  - tracks/scala/exercises/word-count/src/main/scala/.keep
6625
- - tracks/scala/exercises/word-count/src/test/scala/word_count_test.scala
6652
+ - tracks/scala/exercises/word-count/src/test/scala/WordCountTest.scala
6626
6653
  - tracks/scala/exercises/wordy/build.sbt
6627
6654
  - tracks/scala/exercises/wordy/example.scala
6628
6655
  - tracks/scala/exercises/wordy/src/main/scala/.keep
@@ -6750,6 +6777,8 @@ files:
6750
6777
  - tracks/swift/exercises/anagram/AnagramTest.swift
6751
6778
  - tracks/swift/exercises/atbash-cipher/AtbashExample.swift
6752
6779
  - tracks/swift/exercises/atbash-cipher/AtbashTest.swift
6780
+ - tracks/swift/exercises/beer-song/BeerSongExample.swift
6781
+ - tracks/swift/exercises/beer-song/BeerSongTest.swift
6753
6782
  - tracks/swift/exercises/binary-search-tree/BinarySearchTreeExample.swift
6754
6783
  - tracks/swift/exercises/binary-search-tree/BinarySearchTreeTest.swift
6755
6784
  - tracks/swift/exercises/binary-search/BinarySearchExample.swift
@@ -6784,12 +6813,8 @@ files:
6784
6813
  - tracks/swift/exercises/grains/GrainsTest.swift
6785
6814
  - tracks/swift/exercises/hamming/HammingExample.swift
6786
6815
  - tracks/swift/exercises/hamming/HammingTest.swift
6787
- - tracks/swift/exercises/hello-world/helloWorld.swift
6788
- - tracks/swift/exercises/hello-world/helloWorld.xcodeproj/project.pbxproj
6789
- - tracks/swift/exercises/hello-world/helloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
6790
- - tracks/swift/exercises/hello-world/helloWorldExample.swift
6791
- - tracks/swift/exercises/hello-world/helloWorldTest/Info.plist
6792
- - tracks/swift/exercises/hello-world/helloWorldTest/helloWorldTest.swift
6816
+ - tracks/swift/exercises/hello-world/HelloWorldExample.swift
6817
+ - tracks/swift/exercises/hello-world/helloWorldTest.swift
6793
6818
  - tracks/swift/exercises/hexadecimal/HexadecimalExample.swift
6794
6819
  - tracks/swift/exercises/hexadecimal/HexadecimalTest.swift
6795
6820
  - tracks/swift/exercises/house/HouseExample.swift
@@ -6870,6 +6895,8 @@ files:
6870
6895
  - tracks/swift/exercises/space-age/SpaceAgeTest.swift
6871
6896
  - tracks/swift/exercises/strain/StrainExample.swift
6872
6897
  - tracks/swift/exercises/strain/StrainTest.swift
6898
+ - tracks/swift/exercises/sublist/SubListTest.swift
6899
+ - tracks/swift/exercises/sublist/SublistExample.swift
6873
6900
  - tracks/swift/exercises/sum-of-multiples/SumOfMultiplesExample.swift
6874
6901
  - tracks/swift/exercises/sum-of-multiples/SumOfMultiplesTest.swift
6875
6902
  - tracks/swift/exercises/tournament/TournamentExample.swift
@@ -6887,6 +6914,17 @@ files:
6887
6914
  - tracks/swift/exercises/wordy/WordyExample.swift
6888
6915
  - tracks/swift/exercises/wordy/WordyTest.swift
6889
6916
  - tracks/swift/img/icon.png
6917
+ - tracks/swift/img/page_assets/001-splash.png
6918
+ - tracks/swift/img/page_assets/002-templateChooser.png
6919
+ - tracks/swift/img/page_assets/003-nameProject.jpg
6920
+ - tracks/swift/img/page_assets/004-saveProject.jpg
6921
+ - tracks/swift/img/page_assets/005-folderLayout.png
6922
+ - tracks/swift/img/page_assets/006-newProjectInitial.jpg
6923
+ - tracks/swift/img/page_assets/007-fileInspectorUpdate.png
6924
+ - tracks/swift/img/page_assets/008-templateChooserSwift.png
6925
+ - tracks/swift/img/page_assets/009-importTestSource.png
6926
+ - tracks/swift/img/page_assets/010-testsImportExample.png
6927
+ - tracks/swift/img/page_assets/011-finalLayoutExample.png
6890
6928
  - tracks/swift/xcodeProject/xSwift Tests/Info.plist
6891
6929
  - tracks/swift/xcodeProject/xSwift.xcodeproj/project.pbxproj
6892
6930
  - tracks/swift/xcodeProject/xSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata