trackler 2.2.1.30 → 2.2.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/word-search/canonical-data.json +278 -4
- data/tracks/c/exercises/raindrops/test/test_raindrops.c +0 -16
- data/tracks/ceylon/README.md +1 -1
- data/tracks/ceylon/config.json +12 -0
- data/tracks/ceylon/docs/RESOURCES.md +1 -1
- data/tracks/ceylon/exercises/anagram/source/anagram/AnagramTest.ceylon +1 -1
- data/tracks/ceylon/exercises/anagram/source/anagram/module.ceylon +1 -1
- data/tracks/ceylon/exercises/bracket-push/example/module.ceylon +2 -2
- data/tracks/ceylon/exercises/bracket-push/source/bracketpush/BracketsTest.ceylon +1 -1
- data/tracks/ceylon/exercises/bracket-push/source/bracketpush/module.ceylon +1 -1
- data/tracks/ceylon/exercises/hamming/source/hamming/HammingTest.ceylon +1 -1
- data/tracks/ceylon/exercises/hamming/source/hamming/module.ceylon +1 -1
- data/tracks/ceylon/exercises/largest-series-product/source/largestseriesproduct/SeriesTest.ceylon +1 -1
- data/tracks/ceylon/exercises/largest-series-product/source/largestseriesproduct/module.ceylon +1 -1
- data/tracks/ceylon/exercises/leap/source/leap/LeapTest.ceylon +1 -1
- data/tracks/ceylon/exercises/leap/source/leap/module.ceylon +1 -1
- data/tracks/ceylon/exercises/react/example/module.ceylon +2 -2
- data/tracks/ceylon/exercises/react/source/react/ReactorTest.ceylon +1 -1
- data/tracks/ceylon/exercises/react/source/react/module.ceylon +1 -1
- data/tracks/ceylon/exercises/rna-transcription/README.md +41 -0
- data/tracks/ceylon/exercises/rna-transcription/example/RNA.ceylon +13 -0
- data/tracks/ceylon/exercises/rna-transcription/source/rnatranscription/RNA.ceylon +5 -0
- data/tracks/ceylon/exercises/rna-transcription/source/rnatranscription/RNAtest.ceylon +33 -0
- data/tracks/ceylon/exercises/rna-transcription/source/rnatranscription/module.ceylon +3 -0
- data/tracks/ceylon/exercises/sieve/example/module.ceylon +2 -2
- data/tracks/ceylon/exercises/sieve/source/sieve/SieveTest.ceylon +1 -1
- data/tracks/ceylon/exercises/sieve/source/sieve/module.ceylon +1 -1
- data/tracks/clojure/.travis.yml +1 -1
- data/tracks/clojure/_src/generator.clj +1 -1
- data/tracks/clojure/exercises/clock/{clock.mustache → .meta/clock.mustache} +0 -0
- data/tracks/clojure/exercises/luhn/{luhn.mustache → .meta/luhn.mustache} +0 -0
- data/tracks/clojure/exercises/sublist/{sublist.mustache → .meta/sublist.mustache} +0 -0
- data/tracks/go/exercises/robot-name/.meta/hints.md +13 -0
- data/tracks/go/exercises/robot-name/bonus_example.go +2 -0
- data/tracks/java/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/tracks/java/gradle/wrapper/gradle-wrapper.properties +2 -2
- data/tracks/java/gradlew +3 -3
- data/tracks/java/gradlew.bat +0 -0
- data/tracks/php/config.json +8 -0
- data/tracks/php/exercises/flatten-array/example.php +10 -0
- data/tracks/php/exercises/flatten-array/flatten-array_test.php +51 -0
- data/tracks/ruby/exercises/hello-world/GETTING_STARTED.md +2 -2
- data/tracks/scala/exercises/accumulate/src/test/scala/AccumulateTest.scala +1 -0
- data/tracks/scala/exercises/allergies/example.scala +3 -3
- data/tracks/scala/exercises/allergies/src/test/scala/AllergiesTest.scala +68 -33
- data/tracks/scala/exercises/bank-account/src/test/scala/BankAccountTest.scala +1 -0
- data/tracks/scala/exercises/binary-search-tree/src/test/scala/BstTest.scala +1 -0
- data/tracks/scala/exercises/connect/example.scala +1 -1
- data/tracks/scala/exercises/connect/src/test/scala/ConnectTest.scala +72 -56
- data/tracks/scala/exercises/dominoes/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/dominoes/src/test/scala/DominoesTest.scala +32 -31
- data/tracks/scala/exercises/grade-school/src/test/scala/GradeSchoolTest.scala +1 -0
- data/tracks/scala/exercises/lens-person/src/test/scala/LensPersonTest.scala +1 -0
- data/tracks/scala/exercises/linked-list/src/test/scala/DequeTest.scala +1 -0
- data/tracks/scala/exercises/matrix/src/test/scala/MatrixTest.scala +1 -0
- data/tracks/scala/exercises/parallel-letter-frequency/src/test/scala/FrequencyTest.scala +1 -0
- data/tracks/scala/exercises/protein-translation/src/test/scala/ProteinTranslationTest.scala +2 -1
- data/tracks/scala/exercises/pythagorean-triplet/src/test/scala/PythagoreanTripletTest.scala +1 -0
- data/tracks/scala/exercises/robot-name/src/test/scala/RobotNameTest.scala +1 -0
- data/tracks/scala/exercises/series/src/test/scala/SeriesTest.scala +1 -0
- data/tracks/scala/exercises/sgf-parsing/src/test/scala/SgfTest.scala +1 -0
- data/tracks/scala/exercises/simple-cipher/src/test/scala/CipherTest.scala +1 -0
- data/tracks/scala/exercises/simple-linked-list/src/test/scala/SimpleLinkedListTest.scala +1 -1
- data/tracks/scala/exercises/strain/src/test/scala/StrainTest.scala +2 -1
- data/tracks/scala/exercises/wordy/example.scala +3 -3
- data/tracks/scala/exercises/wordy/src/test/scala/WordyTest.scala +84 -0
- data/tracks/scala/exercises/zebra-puzzle/src/test/scala/ZebraPuzzleTest.scala +1 -0
- data/tracks/scala/exercises/zipper/src/test/scala/ZipperTest.scala +1 -0
- data/tracks/scala/testgen/src/main/scala/AllergiesTestGenerator.scala +60 -0
- data/tracks/scala/testgen/src/main/scala/ConnectTestGenerator.scala +52 -0
- data/tracks/scala/testgen/src/main/scala/DominoesTestGenerator.scala +71 -0
- data/tracks/scala/testgen/src/main/scala/WordyTestGenerator.scala +35 -0
- data/tracks/scala/testgen/src/main/scala/testgen/TestSuiteBuilder.scala +20 -0
- data/tracks/scala/testgen/src/main/twirl/funSuiteTemplateIgnoreExpected.scala.txt +16 -0
- metadata +20 -8
- data/tracks/scala/exercises/allergies/src/main/scala/Allergies.scala +0 -11
- data/tracks/scala/exercises/dominoes/src/main/scala/Dominoes.scala +0 -4
- data/tracks/scala/exercises/wordy/src/test/scala/WordProblemTest.scala +0 -81
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: de05c3cb196794d1fcb7efdf1927f8ea001284c6
|
|
4
|
+
data.tar.gz: 43bc093840d44d5e958228bd019eac27d9ea7856
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 485b6ee9100a899bb2b5fcdf23b6f3369bb74d4b10f21c54093b22f225c0e5e4ea76d8bcb8ff38b2f19d88ce23f8f2a8317beade958f6b04d49c7e7659280489
|
|
7
|
+
data.tar.gz: 35ba23c29c2058c31b48f87fc2ae17483c7a376899819fd2604714f12de17ee07053cf2f1e3bb89c8c67045c49dec41e0417b436b09508de79aaa80dd799d9db
|
data/lib/trackler/version.rb
CHANGED
|
@@ -1,13 +1,161 @@
|
|
|
1
1
|
{
|
|
2
2
|
"exercise": "word-search",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"comments": [
|
|
5
5
|
"Grid rows and columns are 1-indexed.",
|
|
6
6
|
"An expected value of -1 indicates that some sort of failure should occur."
|
|
7
7
|
],
|
|
8
8
|
"cases": [
|
|
9
9
|
{
|
|
10
|
-
"description": "Should
|
|
10
|
+
"description": "Should accept an initial game grid and a target search word",
|
|
11
|
+
"property": "search",
|
|
12
|
+
"grid": [
|
|
13
|
+
"jefblpepre"
|
|
14
|
+
],
|
|
15
|
+
"wordsToSearchFor": [
|
|
16
|
+
"clojure"
|
|
17
|
+
],
|
|
18
|
+
"expected": {
|
|
19
|
+
"clojure": null
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"description": "Should locate one word written left to right",
|
|
24
|
+
"property": "search",
|
|
25
|
+
"grid": [
|
|
26
|
+
"clojurermt"
|
|
27
|
+
],
|
|
28
|
+
"wordsToSearchFor": [
|
|
29
|
+
"clojure"
|
|
30
|
+
],
|
|
31
|
+
"expected": {
|
|
32
|
+
"clojure": {
|
|
33
|
+
"start": {
|
|
34
|
+
"column": 1,
|
|
35
|
+
"row": 1
|
|
36
|
+
},
|
|
37
|
+
"end": {
|
|
38
|
+
"column": 7,
|
|
39
|
+
"row": 1
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"description": "Should locate the same word written left to right in a different position",
|
|
46
|
+
"property": "search",
|
|
47
|
+
"grid": [
|
|
48
|
+
"mtclojurer"
|
|
49
|
+
],
|
|
50
|
+
"wordsToSearchFor": [
|
|
51
|
+
"clojure"
|
|
52
|
+
],
|
|
53
|
+
"expected": {
|
|
54
|
+
"clojure": {
|
|
55
|
+
"start": {
|
|
56
|
+
"column": 3,
|
|
57
|
+
"row": 1
|
|
58
|
+
},
|
|
59
|
+
"end": {
|
|
60
|
+
"column": 9,
|
|
61
|
+
"row": 1
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"description": "Should locate a different left to right word",
|
|
68
|
+
"property": "search",
|
|
69
|
+
"grid": [
|
|
70
|
+
"coffeelplx"
|
|
71
|
+
],
|
|
72
|
+
"wordsToSearchFor": [
|
|
73
|
+
"coffee"
|
|
74
|
+
],
|
|
75
|
+
"expected": {
|
|
76
|
+
"coffee": {
|
|
77
|
+
"start": {
|
|
78
|
+
"column": 1,
|
|
79
|
+
"row": 1
|
|
80
|
+
},
|
|
81
|
+
"end": {
|
|
82
|
+
"column": 6,
|
|
83
|
+
"row": 1
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"description": "Should locate that different left to right word in a different position",
|
|
90
|
+
"property": "search",
|
|
91
|
+
"grid": [
|
|
92
|
+
"xcoffeezlp"
|
|
93
|
+
],
|
|
94
|
+
"wordsToSearchFor": [
|
|
95
|
+
"coffee"
|
|
96
|
+
],
|
|
97
|
+
"expected": {
|
|
98
|
+
"coffee": {
|
|
99
|
+
"start": {
|
|
100
|
+
"column": 2,
|
|
101
|
+
"row": 1
|
|
102
|
+
},
|
|
103
|
+
"end": {
|
|
104
|
+
"column": 7,
|
|
105
|
+
"row": 1
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"description": "Should locate a left to right word in two line grid",
|
|
112
|
+
"property": "search",
|
|
113
|
+
"grid": [
|
|
114
|
+
"jefblpepre",
|
|
115
|
+
"tclojurerm"
|
|
116
|
+
],
|
|
117
|
+
"wordsToSearchFor": [
|
|
118
|
+
"clojure"
|
|
119
|
+
],
|
|
120
|
+
"expected": {
|
|
121
|
+
"clojure": {
|
|
122
|
+
"start": {
|
|
123
|
+
"column": 2,
|
|
124
|
+
"row": 2
|
|
125
|
+
},
|
|
126
|
+
"end": {
|
|
127
|
+
"column": 8,
|
|
128
|
+
"row": 2
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"description": "Should locate a left to right word in three line grid",
|
|
135
|
+
"property": "search",
|
|
136
|
+
"grid": [
|
|
137
|
+
"camdcimgtc",
|
|
138
|
+
"jefblpepre",
|
|
139
|
+
"clojurermt"
|
|
140
|
+
],
|
|
141
|
+
"wordsToSearchFor": [
|
|
142
|
+
"clojure"
|
|
143
|
+
],
|
|
144
|
+
"expected": {
|
|
145
|
+
"clojure": {
|
|
146
|
+
"start": {
|
|
147
|
+
"column": 1,
|
|
148
|
+
"row": 3
|
|
149
|
+
},
|
|
150
|
+
"end": {
|
|
151
|
+
"column": 7,
|
|
152
|
+
"row": 3
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"description": "Should locate a left to right word in ten line grid",
|
|
11
159
|
"property": "search",
|
|
12
160
|
"grid": [
|
|
13
161
|
"jefblpepre",
|
|
@@ -38,7 +186,7 @@
|
|
|
38
186
|
}
|
|
39
187
|
},
|
|
40
188
|
{
|
|
41
|
-
"description": "Should locate
|
|
189
|
+
"description": "Should locate that left to right word in a different position in a ten line grid",
|
|
42
190
|
"property": "search",
|
|
43
191
|
"grid": [
|
|
44
192
|
"jefblpepre",
|
|
@@ -49,13 +197,139 @@
|
|
|
49
197
|
"wolcqlirpc",
|
|
50
198
|
"screeaumgr",
|
|
51
199
|
"alxhpburyi",
|
|
200
|
+
"clojurermt",
|
|
201
|
+
"jalaycalmp"
|
|
202
|
+
],
|
|
203
|
+
"wordsToSearchFor": [
|
|
204
|
+
"clojure"
|
|
205
|
+
],
|
|
206
|
+
"expected": {
|
|
207
|
+
"clojure": {
|
|
208
|
+
"start": {
|
|
209
|
+
"column": 1,
|
|
210
|
+
"row": 9
|
|
211
|
+
},
|
|
212
|
+
"end": {
|
|
213
|
+
"column": 7,
|
|
214
|
+
"row": 9
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"description": "Should locate a different left to right word in a ten line grid",
|
|
221
|
+
"property": "search",
|
|
222
|
+
"grid": [
|
|
223
|
+
"jefblpepre",
|
|
224
|
+
"camdcimgtc",
|
|
225
|
+
"oivokprjsm",
|
|
226
|
+
"pbwasqroua",
|
|
227
|
+
"rixilelhrs",
|
|
228
|
+
"wolcqlirpc",
|
|
229
|
+
"fortranftw",
|
|
230
|
+
"alxhpburyi",
|
|
231
|
+
"clojurermt",
|
|
232
|
+
"jalaycalmp"
|
|
233
|
+
],
|
|
234
|
+
"wordsToSearchFor": [
|
|
235
|
+
"fortran"
|
|
236
|
+
],
|
|
237
|
+
"expected": {
|
|
238
|
+
"fortran": {
|
|
239
|
+
"start": {
|
|
240
|
+
"column": 1,
|
|
241
|
+
"row": 7
|
|
242
|
+
},
|
|
243
|
+
"end": {
|
|
244
|
+
"column": 7,
|
|
245
|
+
"row": 7
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"description": "Should locate multiple words",
|
|
252
|
+
"property": "search",
|
|
253
|
+
"grid": [
|
|
254
|
+
"jefblpepre",
|
|
255
|
+
"camdcimgtc",
|
|
256
|
+
"oivokprjsm",
|
|
257
|
+
"pbwasqroua",
|
|
258
|
+
"rixilelhrs",
|
|
259
|
+
"wolcqlirpc",
|
|
260
|
+
"fortranftw",
|
|
261
|
+
"alxhpburyi",
|
|
52
262
|
"jalaycalmp",
|
|
53
263
|
"clojurermt"
|
|
54
264
|
],
|
|
55
265
|
"wordsToSearchFor": [
|
|
56
|
-
"
|
|
266
|
+
"fortran",
|
|
267
|
+
"clojure"
|
|
268
|
+
],
|
|
269
|
+
"expected": {
|
|
270
|
+
"clojure": {
|
|
271
|
+
"start": {
|
|
272
|
+
"column": 1,
|
|
273
|
+
"row": 10
|
|
274
|
+
},
|
|
275
|
+
"end": {
|
|
276
|
+
"column": 7,
|
|
277
|
+
"row": 10
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
"fortran": {
|
|
281
|
+
"start": {
|
|
282
|
+
"column": 1,
|
|
283
|
+
"row": 7
|
|
284
|
+
},
|
|
285
|
+
"end": {
|
|
286
|
+
"column": 7,
|
|
287
|
+
"row": 7
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"description": "Should locate a single word written right to left",
|
|
294
|
+
"property": "search",
|
|
295
|
+
"grid": [
|
|
296
|
+
"rixilelhrs"
|
|
297
|
+
],
|
|
298
|
+
"wordsToSearchFor": [
|
|
57
299
|
"elixir"
|
|
58
300
|
],
|
|
301
|
+
"expected": {
|
|
302
|
+
"elixir": {
|
|
303
|
+
"start": {
|
|
304
|
+
"column": 6,
|
|
305
|
+
"row": 1
|
|
306
|
+
},
|
|
307
|
+
"end": {
|
|
308
|
+
"column": 1,
|
|
309
|
+
"row": 1
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"description": "Should locate multiple words written in different horizontal directions",
|
|
316
|
+
"property": "search",
|
|
317
|
+
"grid": [
|
|
318
|
+
"jefblpepre",
|
|
319
|
+
"camdcimgtc",
|
|
320
|
+
"oivokprjsm",
|
|
321
|
+
"pbwasqroua",
|
|
322
|
+
"rixilelhrs",
|
|
323
|
+
"wolcqlirpc",
|
|
324
|
+
"screeaumgr",
|
|
325
|
+
"alxhpburyi",
|
|
326
|
+
"jalaycalmp",
|
|
327
|
+
"clojurermt"
|
|
328
|
+
],
|
|
329
|
+
"wordsToSearchFor": [
|
|
330
|
+
"elixir",
|
|
331
|
+
"clojure"
|
|
332
|
+
],
|
|
59
333
|
"expected": {
|
|
60
334
|
"clojure": {
|
|
61
335
|
"start": {
|
|
@@ -124,22 +124,6 @@ int main(void)
|
|
|
124
124
|
{
|
|
125
125
|
UnityBegin("raindrops.c");
|
|
126
126
|
|
|
127
|
-
RUN_TEST(test_one_yields_itself);
|
|
128
|
-
RUN_TEST(test_three_yields_pling);
|
|
129
|
-
RUN_TEST(test_five_yields_plang);
|
|
130
|
-
RUN_TEST(test_seven_yields_plong);
|
|
131
|
-
RUN_TEST(test_six_yields_pling);
|
|
132
|
-
RUN_TEST(test_nine_yields_pling);
|
|
133
|
-
RUN_TEST(test_ten_yields_plang);
|
|
134
|
-
RUN_TEST(test_fourteen_yields_plong);
|
|
135
|
-
RUN_TEST(test_fifteen_yields_plingplang);
|
|
136
|
-
RUN_TEST(test_twenty_one_yields_plingplong);
|
|
137
|
-
RUN_TEST(test_twenty_five_yields_plang);
|
|
138
|
-
RUN_TEST(test_thirty_five_yields_plangplong);
|
|
139
|
-
RUN_TEST(test_forty_nine_yields_plong);
|
|
140
|
-
RUN_TEST(test_fifty_two_yields_itself);
|
|
141
|
-
RUN_TEST(test_one_hundred_five_yields_plingplangplong);
|
|
142
|
-
RUN_TEST(test_big_prime_yields_itself);
|
|
143
127
|
RUN_TEST(test_one_yields_itself);
|
|
144
128
|
RUN_TEST(test_three_yields_pling);
|
|
145
129
|
RUN_TEST(test_five_yields_plang);
|
data/tracks/ceylon/README.md
CHANGED
|
@@ -141,7 +141,7 @@ As mentioned above, we used parameterized tests since this avoids test code dupl
|
|
|
141
141
|
|
|
142
142
|
Unfortunately, since by default all cases are enabled, this runs counter to the usual Exercism style in which only a *single test case* is enabled, and the student enables one more test case after making the previous one pass, taking an iterative process.
|
|
143
143
|
|
|
144
|
-
The [ignore annotation](https://modules.ceylon-lang.org/repo/1/ceylon/test/1.3.
|
|
144
|
+
The [ignore annotation](https://modules.ceylon-lang.org/repo/1/ceylon/test/1.3.3/module-doc/api/index.html#ignore) does not seem like it can be applied to individual cases of a parameterized test.
|
|
145
145
|
|
|
146
146
|
One possible solution to this would be to comment out all cases except the first.
|
|
147
147
|
If this solution were taken, students would need to be aware of this, and be informed that they need to uncomment the cases.
|
data/tracks/ceylon/config.json
CHANGED
|
@@ -34,6 +34,18 @@
|
|
|
34
34
|
"Mathematics"
|
|
35
35
|
]
|
|
36
36
|
},
|
|
37
|
+
{
|
|
38
|
+
"uuid": "bc986de4-62f7-439a-a144-fb8fdbdf4d30",
|
|
39
|
+
"slug": "rna-transcription",
|
|
40
|
+
"core": false,
|
|
41
|
+
"unlocked_by": null,
|
|
42
|
+
"difficulty": 3,
|
|
43
|
+
"topics": [
|
|
44
|
+
"Strings",
|
|
45
|
+
"Parsing",
|
|
46
|
+
"Transforming"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
37
49
|
{
|
|
38
50
|
"uuid": "fe43a5a0-9f83-45ab-af37-76f8a3e84393",
|
|
39
51
|
"slug": "anagram",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
* [Language specification](https://www.ceylon-lang.org/documentation/1.3/spec/)
|
|
2
2
|
* [Reference](https://www.ceylon-lang.org/documentation/1.3/reference/)
|
|
3
|
-
* [API documentation for the `language` module](https://modules.ceylon-lang.org/repo/1/ceylon/language/1.3.
|
|
3
|
+
* [API documentation for the `language` module](https://modules.ceylon-lang.org/repo/1/ceylon/language/1.3.3/module-doc/api/index.html)
|
|
4
4
|
* [Examples](https://www.ceylon-lang.org/documentation/1.3/examples/)
|
|
5
5
|
* [Community page](https://www.ceylon-lang.org/community/)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# RNA Transcription
|
|
2
|
+
|
|
3
|
+
Given a DNA strand, return its RNA complement (per RNA transcription).
|
|
4
|
+
|
|
5
|
+
Both DNA and RNA strands are a sequence of nucleotides.
|
|
6
|
+
|
|
7
|
+
The four nucleotides found in DNA are adenine (**A**), cytosine (**C**),
|
|
8
|
+
guanine (**G**) and thymine (**T**).
|
|
9
|
+
|
|
10
|
+
The four nucleotides found in RNA are adenine (**A**), cytosine (**C**),
|
|
11
|
+
guanine (**G**) and uracil (**U**).
|
|
12
|
+
|
|
13
|
+
Given a DNA strand, its transcribed RNA strand is formed by replacing
|
|
14
|
+
each nucleotide with its complement:
|
|
15
|
+
|
|
16
|
+
* `G` -> `C`
|
|
17
|
+
* `C` -> `G`
|
|
18
|
+
* `T` -> `A`
|
|
19
|
+
* `A` -> `U`
|
|
20
|
+
|
|
21
|
+
## Running Ceylon Tests
|
|
22
|
+
|
|
23
|
+
Before tests can be run, your code must be compiled via [`ceylon compile`](https://ceylon-lang.org/documentation/current/reference/tool/ceylon/subcommands/ceylon-compile.html).
|
|
24
|
+
|
|
25
|
+
We run tests with the [`ceylon test`](https://ceylon-lang.org/documentation/reference/tool/ceylon/subcommands/ceylon-test.html) command.
|
|
26
|
+
|
|
27
|
+
`ceylon test` expects a module name to run the tests on.
|
|
28
|
+
In the Ceylon track, each exercise has just a single module.
|
|
29
|
+
|
|
30
|
+
Therefore, you can run the tests with:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
ceylon compile && ceylon test $(basename source/*)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Source
|
|
37
|
+
|
|
38
|
+
Rosalind [http://rosalind.info/problems/rna](http://rosalind.info/problems/rna)
|
|
39
|
+
|
|
40
|
+
## Submitting Incomplete Solutions
|
|
41
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class Error() {}
|
|
2
|
+
|
|
3
|
+
String|Error transcription(String dna) {
|
|
4
|
+
return dna.fold("" of String|Error)((String|Error r,
|
|
5
|
+
Character c) => if (is Error r)
|
|
6
|
+
then (r)
|
|
7
|
+
else (switch (c)
|
|
8
|
+
case ('G') r + "C"
|
|
9
|
+
case ('C') r + "G"
|
|
10
|
+
case ('T') r + "A"
|
|
11
|
+
case ('A') r + "U"
|
|
12
|
+
else (Error())));
|
|
13
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import ceylon.test { ... }
|
|
2
|
+
|
|
3
|
+
// Tests adapted from problem-specifications version 1.0.1
|
|
4
|
+
{[String, String|Null]*} cases => {
|
|
5
|
+
// empty strand
|
|
6
|
+
["", ""],
|
|
7
|
+
// single C nucleotide strand
|
|
8
|
+
["C", "G"],
|
|
9
|
+
// single G nucleotide strand
|
|
10
|
+
["G", "C"],
|
|
11
|
+
// single A nucleotide strand
|
|
12
|
+
["A", "U"],
|
|
13
|
+
// single T nucleotide strand
|
|
14
|
+
["T", "A"],
|
|
15
|
+
// longer strand
|
|
16
|
+
["ACGTGGTCTTAA", "UGCACCAGAAUU"],
|
|
17
|
+
// strand with DNA nucleotides
|
|
18
|
+
["U", null],
|
|
19
|
+
// strand with invalid nucleotides
|
|
20
|
+
["XCGFGGTDTTAA", null],
|
|
21
|
+
// strand with invalid nucleotides after the first nucleotide
|
|
22
|
+
["ACGTFGTBTEAA", null]
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
test
|
|
26
|
+
parameters(`value cases`)
|
|
27
|
+
void testHamming(String dna, String|Null expected) {
|
|
28
|
+
if (exists expected) {
|
|
29
|
+
assertEquals(transcription(dna), expected);
|
|
30
|
+
} else if (!is Error result = transcription(dna)) {
|
|
31
|
+
fail("should have errored, but got ``result``");
|
|
32
|
+
}
|
|
33
|
+
}
|
data/tracks/clojure/.travis.yml
CHANGED
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
(defn -main
|
|
63
63
|
"Uses the test template for the exercise and test data to generate test cases."
|
|
64
64
|
[exercise-name & args]
|
|
65
|
-
(let [test-template-path (format "exercises/%s/%s.mustache" exercise-name exercise-name)
|
|
65
|
+
(let [test-template-path (format "exercises/%s/.meta/%s.mustache" exercise-name exercise-name)
|
|
66
66
|
test-data (load-test-data exercise-name)]
|
|
67
67
|
(if (file-exists? test-template-path)
|
|
68
68
|
(do
|
|
File without changes
|
|
File without changes
|
|
File without changes
|