trackler 2.1.0.30 → 2.1.0.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/common/CONTRIBUTING.md +0 -164
- data/common/exercises/collatz-conjecture/canonical-data.json +7 -1
- data/common/exercises/dominoes/canonical-data.json +13 -13
- data/common/exercises/proverb/description.md +8 -8
- data/common/exercises/scale-generator/description.md +5 -14
- data/lib/trackler/version.rb +1 -1
- data/tracks/java/config.json +10 -10
- data/tracks/java/exercises/ocr-numbers/src/example/java/OpticalCharacterReader.java +3 -3
- data/tracks/ocaml/exercises/dominoes/test.ml +1 -1
- data/tracks/ocaml/exercises/forth/test.ml +1 -1
- data/tracks/ocaml/exercises/list-ops/test.ml +34 -42
- data/tracks/ocaml/tools/test-generator/src/controller.ml +3 -4
- data/tracks/ocaml/tools/test-generator/src/languages.ml +9 -7
- data/tracks/ocaml/tools/test-generator/src/ocaml_special_cases.ml +0 -6
- data/tracks/ocaml/tools/test-generator/templates/ocaml/acronym/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/all-your-base/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/anagram/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/atbash-cipher/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/beer-song/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/binary-search/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/bob/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/bowling/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/bracket-push/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/change/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/connect/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/difference-of-squares/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/dominoes/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/etl/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/forth/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/hamming/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/hello-world/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/leap/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/luhn/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/minesweeper/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/pangram/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/phone-number/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/prime-factors/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/raindrops/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/roman-numerals/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/run-length-encoding/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/say/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/space-age/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/triangle/{template.ml → test.ml} +0 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/word-count/{template.ml → test.ml} +0 -0
- data/tracks/python/README.md +27 -12
- data/tracks/rust/README.md +1 -1
- metadata +32 -33
- data/tracks/ocaml/tools/test-generator/src/special_cases.ml +0 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ba0238c5efd0610f51d605a41a98489110c75117
|
|
4
|
+
data.tar.gz: 3749d5108159a055ad4d2c68a99ed6297f01c272
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ba96c15d0f423acd0aee7ec87c11308d95bc8d634626361803a779bdbab47a278466de2baa348f698c628a95c3c0ab02e558f598aa6fcd4d65f19b2d9cdfbff4
|
|
7
|
+
data.tar.gz: 70e84d13ae79a5d25eeba58d39ac848d2ae2b68c8d8c7f3d7c972e5beec589d58339005aa39fc1626242627fe1a041751b86e1bf7ff137c4a36621e73283ac2d
|
data/common/CONTRIBUTING.md
CHANGED
|
@@ -27,13 +27,10 @@ themselves. There are other guides about contributing to other parts of the Exer
|
|
|
27
27
|
* [Overview](#overview)
|
|
28
28
|
* [Updating an Exercise Test Suite](#updating-an-exercise-test-suite)
|
|
29
29
|
* [Updating a Generated Test Suite](#updating-a-generated-test-suite)
|
|
30
|
-
* [Porting an Exercise to Another Language Track](#porting-an-exercise-to-another-language-track)
|
|
31
|
-
* [Providing Feedback on the Site for an Exercise You Implemented](#providing-feedback-on-the-site-for-an-exercise-you-implemented)
|
|
32
30
|
* [Implementing a Completely New Exercise](#implementing-a-completely-new-exercise)
|
|
33
31
|
* [Track Anatomy](#track-anatomy)
|
|
34
32
|
* [Starting a New Track](#starting-a-new-track)
|
|
35
33
|
* [Beta-Testing a Language Track](#beta-testing-a-language-track)
|
|
36
|
-
* [Maintaining a Track](#maintaining-a-track)
|
|
37
34
|
* [Useful Tidbits](#useful-tidbits)
|
|
38
35
|
* [Pull Request Guidelines](#pull-request-guidelines)
|
|
39
36
|
* [Exercise Versioning](#exercise-versioning)
|
|
@@ -219,80 +216,6 @@ Follow the guidelines for setting up a development environment, verifying the ch
|
|
|
219
216
|
and submitting a pull request, as described in the [main section about updating an
|
|
220
217
|
exercise test suite](#updating-an-exercise-test-suite).
|
|
221
218
|
|
|
222
|
-
## Porting an Exercise to Another Language Track
|
|
223
|
-
|
|
224
|
-
To get a list of all the exercises that can be ported to a track,
|
|
225
|
-
go to the url `http://exercism.io/languages/:track_id/todo`.
|
|
226
|
-
|
|
227
|
-
For example here is the list of exercises that have not yet been implemented
|
|
228
|
-
for the Ruby track: http://exercism.io/languages/ruby/todo
|
|
229
|
-
|
|
230
|
-
Each unimplemented exercise links to existing implementations of the exercise in
|
|
231
|
-
other language tracks, so that people can use those example solutions and test
|
|
232
|
-
suites as inspiration.
|
|
233
|
-
|
|
234
|
-
We are also extracting canonical inputs and outputs for a given
|
|
235
|
-
exercise and storing them in JSON format in the x-common repository. We've accomplished this on a few exercises, but there are many more to do.
|
|
236
|
-
|
|
237
|
-
Although this page is now implemented, you can still get this information from the raw data
|
|
238
|
-
served by the API endpoint `http://x.exercism.io/v3/tracks/:track_id/todo`.
|
|
239
|
-
|
|
240
|
-
For example, here's the list of exercises that have not yet been implemented
|
|
241
|
-
in the Elm track: http://x.exercism.io/v3/tracks/elm/todo
|
|
242
|
-
|
|
243
|
-
It can be pretty unwieldy to read the JSON directly. To make it easier,
|
|
244
|
-
install a browser extension that formats the JSON nicely, or copy/paste the
|
|
245
|
-
response body into [jsonlint.com](http://jsonlint.com/) and click "validate JSON", which not
|
|
246
|
-
only validates it, but pretty-prints it.
|
|
247
|
-
|
|
248
|
-
The description of the problem can be found in the
|
|
249
|
-
[x-common](https://github.com/exercism/x-common) repository, in a folder named
|
|
250
|
-
after the problem slug: `exercises/<slug>/description.md`.
|
|
251
|
-
|
|
252
|
-
**When you decide to implement an exercise**
|
|
253
|
-
|
|
254
|
-
* check that there are no open pull requests for the same exercise
|
|
255
|
-
* open a "work in progress" (WIP) pull request
|
|
256
|
-
|
|
257
|
-
The way to open a WIP pull request even if you haven't done any work yet is:
|
|
258
|
-
|
|
259
|
-
* Fork and clone the repository
|
|
260
|
-
* Check out a branch for your the exercise
|
|
261
|
-
* Add an empty commit `git commit --allow-empty -m "dibs: I will implement exercise <slug>"`
|
|
262
|
-
(replace <slug> with the actual name of the exercise).
|
|
263
|
-
* Push the new branch to your repository, and open a pull request against that branch.
|
|
264
|
-
|
|
265
|
-
Once you have added the actual exercise, then you can rebase your branch onto the upstream
|
|
266
|
-
master, which will make the WIP commit go away.
|
|
267
|
-
|
|
268
|
-
The exercise should consist of, at minimum:
|
|
269
|
-
|
|
270
|
-
* A test suite
|
|
271
|
-
* A reference solution that passes the test (see [#reference-solution](#reference-solution))
|
|
272
|
-
|
|
273
|
-
You will need to add the exercise to `"exercises"` section of the `config.json` file in the track.
|
|
274
|
-
The order in which the exercises are listed there is the order in which they are fetched by default by `exercism fetch`.
|
|
275
|
-
Typically, exercises are ordered by difficulty, unless there is a particular reason to do otherwise.
|
|
276
|
-
|
|
277
|
-
Each language track might have additional guidance on how to order their
|
|
278
|
-
exercises or additional requirements on new exercise files; check the README in
|
|
279
|
-
the repository for the track.
|
|
280
|
-
|
|
281
|
-
### Providing Feedback on the Site for an Exercise You Implemented
|
|
282
|
-
|
|
283
|
-
Once you've created an exercise, you'll probably want to provide feedback to people who
|
|
284
|
-
submit solutions to it. By default you only get access to exercises you've submitted
|
|
285
|
-
a solution for.
|
|
286
|
-
|
|
287
|
-
You can fetch the problem directly using the CLI:
|
|
288
|
-
|
|
289
|
-
```bash
|
|
290
|
-
$ exercism fetch <track_id> <slug>
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
Go ahead and submit the reference solution that you wrote when creating the problem.
|
|
294
|
-
Remember to archive it if you don't want other people to comment on it.
|
|
295
|
-
|
|
296
219
|
## Implementing a Completely New Exercise
|
|
297
220
|
|
|
298
221
|
A problem must have a unique slug. This slug is used as
|
|
@@ -405,93 +328,6 @@ satisfy the tests provided for each problem.
|
|
|
405
328
|
You can include advice and helpful links for your language track in the
|
|
406
329
|
`SETUP.md` file.
|
|
407
330
|
|
|
408
|
-
## Maintaining a Track
|
|
409
|
-
|
|
410
|
-
Maintaining a language track generally consists of:
|
|
411
|
-
|
|
412
|
-
- Reviewing/merging pull requests.
|
|
413
|
-
- Discussing improvements in the exercises.
|
|
414
|
-
- Implementing or porting new exercises.
|
|
415
|
-
- Improving the development tooling (e.g. implementing continuous
|
|
416
|
-
integration).
|
|
417
|
-
- Language-Specific support.
|
|
418
|
-
- Adding/improving language-specific documentation.
|
|
419
|
-
|
|
420
|
-
Ideally a track will have several maintainers, for two reasons:
|
|
421
|
-
|
|
422
|
-
- more lively
|
|
423
|
-
- spread the workload
|
|
424
|
-
|
|
425
|
-
**More Lively**
|
|
426
|
-
|
|
427
|
-
We've noticed that as soon as there are at least two people maintaining
|
|
428
|
-
the same track we get rich discussions about quality and idioms. There's a lot
|
|
429
|
-
more activity, and it's a lot more fun.
|
|
430
|
-
|
|
431
|
-
**Spread the Workload**
|
|
432
|
-
|
|
433
|
-
We don't want to burn people out, and it's really nice to be able to
|
|
434
|
-
go on vacation or get busy at work without worrying too much about a growing
|
|
435
|
-
backlog of unanswered issues and unreviewed and unmerged pull requests.
|
|
436
|
-
|
|
437
|
-
**Caveat**
|
|
438
|
-
|
|
439
|
-
There's a small chance that when more people are involved there's a bit of
|
|
440
|
-
diffusion of responsibility (worth googling and reading about if you haven't
|
|
441
|
-
heard the term before).
|
|
442
|
-
|
|
443
|
-
### Reviewing/Merging Pull Requests
|
|
444
|
-
|
|
445
|
-
In general:
|
|
446
|
-
|
|
447
|
-
- Avoid merging your own pull requests (but it's fine if it's really simple).
|
|
448
|
-
- If the change is significant, get a second opinion.
|
|
449
|
-
- If it's insignificant or simple or uncontroversial, go ahead and merge.
|
|
450
|
-
- If nobody else responds within a certain amount of time, go ahead and merge
|
|
451
|
-
it anyway, if you feel like it's good enough (we can always fix things
|
|
452
|
-
later).
|
|
453
|
-
|
|
454
|
-
Many maintainers have mentioned that they like to get a second pair of eyes
|
|
455
|
-
even for simple fixes, because it's so easy to for typos and really silly
|
|
456
|
-
things to slip in.
|
|
457
|
-
|
|
458
|
-
### Use Branches (Probably, Mostly)
|
|
459
|
-
|
|
460
|
-
Even for simple fixes (documentation, typos) branches let others see what's
|
|
461
|
-
going on in the repository. If it's insignificant, go ahead and merge it
|
|
462
|
-
yourself.
|
|
463
|
-
|
|
464
|
-
Sometimes it's just silly to create a branch. In that case, go ahead and put
|
|
465
|
-
it in master, unless there's a track-level policy about not doing that.
|
|
466
|
-
|
|
467
|
-
### Claiming Issues
|
|
468
|
-
|
|
469
|
-
When you start working on an issue, claim it (either assign it to yourself
|
|
470
|
-
or just add a comment that you're taking it).
|
|
471
|
-
|
|
472
|
-
If you have a big list of similar, related things, it's fine to create
|
|
473
|
-
a single issue with a todo list, and people can claim individual things
|
|
474
|
-
in the comment thread.
|
|
475
|
-
|
|
476
|
-
### Implementing / Reviewing New Exercises
|
|
477
|
-
|
|
478
|
-
The tracks should implement the exercise idiomatically in the language
|
|
479
|
-
at hand, without veering too far from the README as described (does expanding
|
|
480
|
-
the exercise introduce new ideas or just add more work? Is this better off
|
|
481
|
-
treated as a new, separate exercise?).
|
|
482
|
-
|
|
483
|
-
If there are interesting corner cases, then these should be added to the
|
|
484
|
-
README, they help make the discussions better.
|
|
485
|
-
|
|
486
|
-
Exercises should not enforce a single way to solve the problem, if possible.
|
|
487
|
-
The more interesting exercises allow several approaches, and create rich
|
|
488
|
-
opportunities for discussing trade-offs when people submit their solutions.
|
|
489
|
-
|
|
490
|
-
### Skipping Uninteresting Exercises
|
|
491
|
-
|
|
492
|
-
Don't be afraid to 'forego' exercises that don't make sense in the language,
|
|
493
|
-
or that are not particularly interesting.
|
|
494
|
-
|
|
495
331
|
## Useful Tidbits
|
|
496
332
|
|
|
497
333
|
Here are a few bits and pieces that are referenced from some of the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"exercise": "collatz-conjecture",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"cases": [
|
|
5
5
|
{
|
|
6
6
|
"description": "zero steps for one",
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
"number": 12,
|
|
21
21
|
"expected": 9
|
|
22
22
|
},
|
|
23
|
+
{
|
|
24
|
+
"description": "Large number of even and odd steps",
|
|
25
|
+
"property": "steps",
|
|
26
|
+
"number": 1000000,
|
|
27
|
+
"expected": 152
|
|
28
|
+
},
|
|
23
29
|
{
|
|
24
30
|
"description": "zero is an error",
|
|
25
31
|
"property": "steps",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"exercise": "dominoes",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"comments": [
|
|
5
5
|
"Inputs are given as lists of two-element lists.",
|
|
6
6
|
"Feel free to convert the input to a sensible type in the specific language",
|
|
@@ -41,37 +41,37 @@
|
|
|
41
41
|
"description": "empty input = empty output",
|
|
42
42
|
"property": "canChain",
|
|
43
43
|
"input": [],
|
|
44
|
-
"
|
|
44
|
+
"expected": true
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"description": "singleton input = singleton output",
|
|
48
48
|
"property": "canChain",
|
|
49
49
|
"input": [[1, 1]],
|
|
50
|
-
"
|
|
50
|
+
"expected": true
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
"description": "singleton that can't be chained",
|
|
54
54
|
"property": "canChain",
|
|
55
55
|
"input": [[1, 2]],
|
|
56
|
-
"
|
|
56
|
+
"expected": false
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
"description": "three elements",
|
|
60
60
|
"property": "canChain",
|
|
61
61
|
"input": [[1, 2], [3, 1], [2, 3]],
|
|
62
|
-
"
|
|
62
|
+
"expected": true
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
"description": "can reverse dominoes",
|
|
66
66
|
"property": "canChain",
|
|
67
67
|
"input": [[1, 2], [1, 3], [2, 3]],
|
|
68
|
-
"
|
|
68
|
+
"expected": true
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
"description": "can't be chained",
|
|
72
72
|
"property": "canChain",
|
|
73
73
|
"input": [[1, 2], [4, 1], [2, 3]],
|
|
74
|
-
"
|
|
74
|
+
"expected": false
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
"description": "disconnected - simple",
|
|
@@ -84,19 +84,19 @@
|
|
|
84
84
|
],
|
|
85
85
|
"property": "canChain",
|
|
86
86
|
"input": [[1, 1], [2, 2]],
|
|
87
|
-
"
|
|
87
|
+
"expected": false
|
|
88
88
|
},
|
|
89
89
|
{
|
|
90
90
|
"description": "disconnected - double loop",
|
|
91
91
|
"property": "canChain",
|
|
92
92
|
"input": [[1, 2], [2, 1], [3, 4], [4, 3]],
|
|
93
|
-
"
|
|
93
|
+
"expected": false
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
"description": "disconnected - single isolated",
|
|
97
97
|
"property": "canChain",
|
|
98
98
|
"input": [[1, 2], [2, 3], [3, 1], [4, 4]],
|
|
99
|
-
"
|
|
99
|
+
"expected": false
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
"description": "need backtrack",
|
|
@@ -109,19 +109,19 @@
|
|
|
109
109
|
],
|
|
110
110
|
"property": "canChain",
|
|
111
111
|
"input": [[1, 2], [2, 3], [3, 1], [2, 4], [2, 4]],
|
|
112
|
-
"
|
|
112
|
+
"expected": true
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"description": "separate loops",
|
|
116
116
|
"property": "canChain",
|
|
117
117
|
"input": [[1, 2], [2, 3], [3, 1], [1, 1], [2, 2], [3, 3]],
|
|
118
|
-
"
|
|
118
|
+
"expected": true
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
121
|
"description": "nine elements",
|
|
122
122
|
"property": "canChain",
|
|
123
123
|
"input": [[1, 2], [5, 3], [3, 1], [1, 2], [2, 4], [1, 6], [2, 3], [3, 4], [5, 6]],
|
|
124
|
-
"
|
|
124
|
+
"expected": true
|
|
125
125
|
}
|
|
126
126
|
]
|
|
127
127
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
For want of a horseshoe nail, a kingdom was lost, or so the saying goes. Output
|
|
2
|
-
the full text of this proverbial rhyme
|
|
2
|
+
the full text of this proverbial rhyme:
|
|
3
3
|
|
|
4
|
-
For want of a nail the shoe was lost.
|
|
5
|
-
For want of a shoe the horse was lost.
|
|
6
|
-
For want of a horse the rider was lost.
|
|
7
|
-
For want of a rider the message was lost.
|
|
8
|
-
For want of a message the battle was lost.
|
|
9
|
-
For want of a battle the kingdom was lost.
|
|
10
|
-
And all for the want of a horseshoe nail.
|
|
4
|
+
> For want of a nail the shoe was lost.
|
|
5
|
+
> For want of a shoe the horse was lost.
|
|
6
|
+
> For want of a horse the rider was lost.
|
|
7
|
+
> For want of a rider the message was lost.
|
|
8
|
+
> For want of a message the battle was lost.
|
|
9
|
+
> For want of a battle the kingdom was lost.
|
|
10
|
+
> And all for the want of a horseshoe nail.
|
|
@@ -48,17 +48,8 @@ Sometimes they may be smaller than usual (diminished, written "D"), or larger
|
|
|
48
48
|
|
|
49
49
|
Here is a table of pitches with the names of their interval distance from the tonic (A).
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
E | F | F# | G | G# | A |
|
|
59
|
-
-----------------------------------------------------------
|
|
60
|
-
Per 5th | Min 6th | Maj 6th | Min 7th | Maj 7th | Octave |
|
|
61
|
-
Dim 5th | Aug 5th | Dim 7th | Aug 6th | Dim 8ve | |
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
51
|
+
| A | A# | B | C | C# | D | D# | E | F | F# | G | G# | A |
|
|
52
|
+
|:------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:------:|
|
|
53
|
+
| Unison | Min 2nd | Maj 2nd | Min 3rd | Maj 3rd | Per 4th | Tritone | Per 5th | Min 6th | Maj 6th | Min 7th | Maj 7th | Octave |
|
|
54
|
+
| | | Dim 3rd | Aug 2nd | Dim 4th | | Aug 4th | Dim 5th | Aug 5th | Dim 7th | Aug 6th | Dim 8ve | |
|
|
55
|
+
| | | | | | | Dim 5th | | | | | | |
|
data/lib/trackler/version.rb
CHANGED
data/tracks/java/config.json
CHANGED
|
@@ -270,11 +270,6 @@
|
|
|
270
270
|
"difficulty": 7,
|
|
271
271
|
"topics": []
|
|
272
272
|
},
|
|
273
|
-
{
|
|
274
|
-
"slug": "rectangles",
|
|
275
|
-
"difficulty": 7,
|
|
276
|
-
"topics": []
|
|
277
|
-
},
|
|
278
273
|
{
|
|
279
274
|
"slug": "meetup",
|
|
280
275
|
"difficulty": 7,
|
|
@@ -290,6 +285,16 @@
|
|
|
290
285
|
"difficulty": 7,
|
|
291
286
|
"topics": []
|
|
292
287
|
},
|
|
288
|
+
{
|
|
289
|
+
"slug": "ocr-numbers",
|
|
290
|
+
"difficulty": 8,
|
|
291
|
+
"topics": []
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"slug": "rectangles",
|
|
295
|
+
"difficulty": 8,
|
|
296
|
+
"topics": []
|
|
297
|
+
},
|
|
293
298
|
{
|
|
294
299
|
"slug": "book-store",
|
|
295
300
|
"difficulty": 8,
|
|
@@ -325,11 +330,6 @@
|
|
|
325
330
|
"difficulty": 1,
|
|
326
331
|
"topics": []
|
|
327
332
|
},
|
|
328
|
-
{
|
|
329
|
-
"slug": "ocr-numbers",
|
|
330
|
-
"difficulty": 1,
|
|
331
|
-
"topics": []
|
|
332
|
-
},
|
|
333
333
|
{
|
|
334
334
|
"slug": "run-length-encoding",
|
|
335
335
|
"difficulty": 1,
|
|
@@ -8,7 +8,7 @@ import java.util.List;
|
|
|
8
8
|
*/
|
|
9
9
|
final class OpticalCharacterReader {
|
|
10
10
|
|
|
11
|
-
private static final int ROWS_PER_LINE
|
|
11
|
+
private static final int ROWS_PER_LINE = 4;
|
|
12
12
|
|
|
13
13
|
private static final int COLS_PER_SSD = 3;
|
|
14
14
|
|
|
@@ -56,9 +56,9 @@ final class OpticalCharacterReader {
|
|
|
56
56
|
"Number of input rows must be a positive multiple of " + ROWS_PER_LINE);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
final int
|
|
59
|
+
final int inputColCount = input.get(0).length();
|
|
60
60
|
|
|
61
|
-
if (
|
|
61
|
+
if (inputColCount == 0 || inputColCount % 3 != 0) {
|
|
62
62
|
throw new IllegalArgumentException(
|
|
63
63
|
"Number of input columns must be a positive multiple of " + COLS_PER_SSD);
|
|
64
64
|
}
|
|
@@ -6,76 +6,68 @@ module L = List_ops
|
|
|
6
6
|
let aei exp got _test_ctxt = assert_equal ~printer:Int.to_string exp got
|
|
7
7
|
|
|
8
8
|
let ael exp got _test_ctxt =
|
|
9
|
-
(
|
|
10
|
-
getting a stack overflow on very long lists. *)
|
|
11
|
-
if List.length exp < 1000 then
|
|
12
|
-
assert_equal ~printer:(List.to_string ~f:Int.to_string) exp got
|
|
13
|
-
else
|
|
14
|
-
assert_equal exp got
|
|
9
|
+
assert_equal ~printer:(List.to_string ~f:Int.to_string) exp got
|
|
15
10
|
|
|
16
11
|
let is_odd n = n % 2 = 1
|
|
17
12
|
|
|
18
|
-
let tests =
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
let tests = [
|
|
14
|
+
"length of empty list">::
|
|
15
|
+
aei 0 (L.length []);
|
|
21
16
|
"length of normal list">::
|
|
22
|
-
|
|
17
|
+
aei 4 (L.length [1;3;5;7]);
|
|
23
18
|
"length of huge list">::
|
|
24
|
-
|
|
19
|
+
aei 1_000_000 (L.length (List.range 0 1_000_000));
|
|
25
20
|
"reverse of empty list">::
|
|
26
|
-
|
|
21
|
+
ael [] (L.reverse []);
|
|
27
22
|
"reverse of normal list">::
|
|
28
|
-
|
|
23
|
+
ael [7;5;3;1] (L.reverse [1;3;5;7]);
|
|
29
24
|
"reverse of huge list">::
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
ael (List.range ~start:`exclusive ~stop:`inclusive ~stride:(-1) 1_000_000 0)
|
|
26
|
+
(L.reverse (List.range 0 1_000_000));
|
|
32
27
|
"map of empty list">::
|
|
33
|
-
|
|
28
|
+
ael [] (L.map ~f:((+) 1) []);
|
|
34
29
|
"map of normal list">::
|
|
35
|
-
|
|
30
|
+
ael [2;4;6;8] (L.map ~f:((+) 1) [1;3;5;7]);
|
|
36
31
|
"map of huge list">::
|
|
37
|
-
|
|
32
|
+
ael (List.range 1 1_000_001) (L.map ~f:((+) 1) (List.range 0 1_000_000));
|
|
38
33
|
"filter of empty list">::
|
|
39
|
-
|
|
34
|
+
ael [] (L.filter ~f:is_odd []);
|
|
40
35
|
"filter of normal list">::
|
|
41
|
-
|
|
36
|
+
ael [1;3] (L.filter ~f:is_odd [1;2;3;4]);
|
|
42
37
|
"filter of huge list">::
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
ael (List.range ~stride:2 1 1_000_000)
|
|
39
|
+
(L.filter ~f:is_odd (List.range 0 1_000_000));
|
|
45
40
|
"fold of empty list">::
|
|
46
|
-
|
|
41
|
+
aei 0 (L.fold ~init:0 ~f:(+) []);
|
|
47
42
|
"fold of normal list">::
|
|
48
|
-
|
|
43
|
+
aei 7 (L.fold ~init:(-3) ~f:(+) [1;2;3;4]);
|
|
49
44
|
"fold of huge list">::
|
|
50
|
-
|
|
51
|
-
|
|
45
|
+
aei (List.fold ~init:0 ~f:(+) (List.range 0 1_000_000))
|
|
46
|
+
(L.fold ~init:0 ~f:(+) (List.range 0 1_000_000));
|
|
52
47
|
"append of empty lists">::
|
|
53
|
-
|
|
48
|
+
ael [] (L.append [] []);
|
|
54
49
|
"append of empty and non-empty list">::
|
|
55
|
-
|
|
50
|
+
ael [1;2;3;4] (L.append [] [1;2;3;4]);
|
|
56
51
|
"append of non-empty and empty list">::
|
|
57
|
-
|
|
52
|
+
ael [1;2;3;4] (L.append [1;2;3;4] []);
|
|
58
53
|
"append of non-empty lists">::
|
|
59
54
|
ael [1;2;3;4;5] (L.append [1;2;3] [4;5]);
|
|
60
55
|
"append of huge lists">::
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
ael (List.range 0 2_000_000)
|
|
57
|
+
(L.append (List.range 0 1_000_000) (List.range 1_000_000 2_000_000));
|
|
63
58
|
"concat of empty list of lists">::
|
|
64
|
-
|
|
59
|
+
ael [] (L.concat []);
|
|
65
60
|
"concat of normal list of lists">::
|
|
66
|
-
|
|
61
|
+
ael [1;2;3;4;5;6] (L.concat [[1;2];[3];[];[4;5;6]]);
|
|
67
62
|
"concat of huge list of small lists">::
|
|
68
|
-
|
|
69
|
-
|
|
63
|
+
ael (List.range 0 1_000_000)
|
|
64
|
+
(L.concat (List.map ~f:(fun x -> [x]) (List.range 0 1_000_000)));
|
|
70
65
|
"concat of small list of huge lists">::
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
66
|
+
ael (List.range 0 1_000_000)
|
|
67
|
+
(L.concat
|
|
68
|
+
(List.map ~f:(fun x -> List.range (x*100_000) ((x+1)*100_000))
|
|
69
|
+
(List.range 0 10)))
|
|
75
70
|
]
|
|
76
71
|
|
|
77
72
|
let () =
|
|
78
73
|
run_test_tt_main ("list-ops tests" >::: tests)
|
|
79
|
-
|
|
80
|
-
(* vim:et:ts=2:sw=2:sts=2
|
|
81
|
-
*)
|
|
@@ -3,7 +3,6 @@ open Parser
|
|
|
3
3
|
open Model
|
|
4
4
|
open Utils
|
|
5
5
|
open Codegen
|
|
6
|
-
open Special_cases
|
|
7
6
|
open Template
|
|
8
7
|
open Files
|
|
9
8
|
open Languages
|
|
@@ -40,13 +39,13 @@ let prepend_version (version_printer: string -> string) (v: string option) (str:
|
|
|
40
39
|
let generate_code ~(lc: language_config) ~(slug: string) ~(template_file: content) ~(canonical_data_file: content): (content, string) Result.t =
|
|
41
40
|
let open Result.Monad_infix in
|
|
42
41
|
Result.of_option ~error:("cannot recognize file for " ^ slug ^ " as a template") @@ find_template template_file lc.test_start_marker lc.test_end_marker >>= fun template ->
|
|
43
|
-
let edit_expected =
|
|
42
|
+
let edit_expected = lc.edit_expected ~stringify:json_to_string ~slug in
|
|
44
43
|
let edit_parameters = edit_parameters ~slug in
|
|
45
44
|
let fill_in_template = fill_in_template edit_expected edit_parameters in
|
|
46
45
|
let file_text = template.file_text in
|
|
47
46
|
let file_lines = String.split_lines file_text |> List.to_array in
|
|
48
47
|
let prepend_version = prepend_version lc.version_printer in
|
|
49
|
-
parse_json_text canonical_data_file
|
|
48
|
+
parse_json_text canonical_data_file "expected" "cases"
|
|
50
49
|
|> Result.map_error ~f:show_error >>| simplify_single_test_suite >>= fun cd -> (match cd.tests with
|
|
51
50
|
| Single cases ->
|
|
52
51
|
let template = to_single template.template in
|
|
@@ -90,7 +89,7 @@ let check_canonical_data canonical_data_folder =
|
|
|
90
89
|
let canonical_data_files = List.sort canonical_data_files ~cmp:(fun (s1, _) (s2, _) -> String.compare s1 s2) in
|
|
91
90
|
let total_count = List.length canonical_data_files in
|
|
92
91
|
List.iter canonical_data_files ~f:(fun (slug, text) ->
|
|
93
|
-
match parse_json_text text
|
|
92
|
+
match parse_json_text text "expected" "cases" with
|
|
94
93
|
| Error e -> print_endline @@ slug ^ ": " ^ (show_error e)
|
|
95
94
|
| _ -> ok_count := !ok_count + 1
|
|
96
95
|
);
|
|
@@ -1,30 +1,32 @@
|
|
|
1
1
|
open Core
|
|
2
|
+
open Yojson.Basic
|
|
3
|
+
include Ocaml_special_cases
|
|
2
4
|
|
|
3
5
|
type language_config = {
|
|
4
|
-
name: string;
|
|
5
6
|
template_file_name: string;
|
|
6
7
|
default_base_folder: string;
|
|
7
8
|
test_start_marker: string;
|
|
8
9
|
test_end_marker: string;
|
|
9
|
-
version_printer: string -> string
|
|
10
|
+
version_printer: string -> string;
|
|
11
|
+
edit_expected: stringify: (json -> string) -> slug: string -> value: json -> string;
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
let default_language_config = function
|
|
13
15
|
| "ocaml" -> {
|
|
14
|
-
|
|
15
|
-
template_file_name = "template.ml";
|
|
16
|
+
template_file_name = "test.ml";
|
|
16
17
|
default_base_folder = "../..";
|
|
17
18
|
test_start_marker = "(* TEST";
|
|
18
19
|
test_end_marker = "END TEST";
|
|
19
|
-
version_printer = fun v -> "(* Test/exercise version: \"" ^ v ^ "\" *)\n\n";
|
|
20
|
+
version_printer = (fun v -> "(* Test/exercise version: \"" ^ v ^ "\" *)\n\n");
|
|
21
|
+
edit_expected = ocaml_edit_expected;
|
|
20
22
|
}
|
|
21
23
|
| "purescript" -> {
|
|
22
|
-
name = "purescript";
|
|
23
24
|
template_file_name = "Main.purs";
|
|
24
25
|
default_base_folder = "../../../xpurescript";
|
|
25
26
|
test_start_marker = "--TEST";
|
|
26
27
|
test_end_marker = "--END TEST";
|
|
27
|
-
version_printer = fun v -> "-- Test/exercise version: \"" ^ v ^ "\"\n\n";
|
|
28
|
+
version_printer = (fun v -> "-- Test/exercise version: \"" ^ v ^ "\"\n\n");
|
|
29
|
+
edit_expected = Purescript_special_cases.edit_expected;
|
|
28
30
|
}
|
|
29
31
|
| x -> failwith @@ "unknown language " ^ x
|
|
30
32
|
|
|
@@ -129,9 +129,3 @@ let edit_parameters ~(slug: string) (parameters: (string * json) list) = match (
|
|
|
129
129
|
| ("bowling", ps) -> edit_bowling ps
|
|
130
130
|
| ("binary-search", ps) -> edit_binary_search ps
|
|
131
131
|
| (_, ps) -> map_elements json_to_string ps
|
|
132
|
-
|
|
133
|
-
let expected_key_name slug = match slug with
|
|
134
|
-
| "dominoes" -> "can_chain"
|
|
135
|
-
| _ -> "expected"
|
|
136
|
-
|
|
137
|
-
let cases_name _slug = "cases"
|
|
File without changes
|
data/tracks/ocaml/tools/test-generator/templates/ocaml/all-your-base/{template.ml → test.ml}
RENAMED
|
File without changes
|
|
File without changes
|
data/tracks/ocaml/tools/test-generator/templates/ocaml/atbash-cipher/{template.ml → test.ml}
RENAMED
|
File without changes
|
|
File without changes
|
data/tracks/ocaml/tools/test-generator/templates/ocaml/binary-search/{template.ml → test.ml}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/tracks/ocaml/tools/test-generator/templates/ocaml/difference-of-squares/{template.ml → test.ml}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/tracks/ocaml/tools/test-generator/templates/ocaml/prime-factors/{template.ml → test.ml}
RENAMED
|
File without changes
|
|
File without changes
|
data/tracks/ocaml/tools/test-generator/templates/ocaml/roman-numerals/{template.ml → test.ml}
RENAMED
|
File without changes
|
data/tracks/ocaml/tools/test-generator/templates/ocaml/run-length-encoding/{template.ml → test.ml}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/tracks/python/README.md
CHANGED
|
@@ -5,38 +5,53 @@
|
|
|
5
5
|
|
|
6
6
|
Exercism exercises in Python
|
|
7
7
|
|
|
8
|
+
|
|
8
9
|
## Contributing Guide
|
|
9
10
|
|
|
10
11
|
Please see the [contributing guide](https://github.com/exercism/x-common/blob/master/CONTRIBUTING.md)
|
|
11
12
|
|
|
13
|
+
|
|
12
14
|
## Working on the Exercises
|
|
13
15
|
|
|
14
16
|
We welcome both improvements to the existing exercises and new exercises.
|
|
15
|
-
A
|
|
17
|
+
A list of missing exercise can be found here: http://exercism.io/languages/python/todo
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Conventions
|
|
21
|
+
|
|
22
|
+
- We use minimalistic stub files for all exercises (#272).
|
|
23
|
+
- We use `unittest` (Python Standard Library) and no 3rd-party-framework.
|
|
24
|
+
- We use the parameter order `self.assertEqual(actual, expected)` (#440).
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Testing
|
|
16
28
|
|
|
17
29
|
All exercises must be compatible with Python versions 2.7 and 3.3 upwards.
|
|
18
|
-
Therefore please test your changes with these versions.
|
|
19
30
|
|
|
20
|
-
|
|
31
|
+
To test a single exercise (e.g., with Python 2.7):
|
|
21
32
|
```
|
|
22
33
|
python2.7 test/check-exercises.py [exercise-name]
|
|
23
34
|
```
|
|
24
35
|
|
|
25
|
-
|
|
36
|
+
To test all exercises (e.g., with Python 3):
|
|
26
37
|
```
|
|
27
|
-
python3
|
|
38
|
+
python3 test/check-exercises.py
|
|
28
39
|
```
|
|
29
40
|
|
|
30
|
-
Test all exercises:
|
|
31
|
-
```
|
|
32
|
-
python test/check-exercises.py
|
|
33
|
-
```
|
|
34
41
|
|
|
35
|
-
|
|
42
|
+
### Code Style
|
|
43
|
+
|
|
44
|
+
The Python code in this repo is meant to follow the [PEP8 style guide](https://www.python.org/dev/peps/pep-0008/) (a stylized version http://pep8.org).
|
|
45
|
+
|
|
46
|
+
This repo uses [flake8](http://flake8.readthedocs.org/en/latest/) with default settings to enforce the coding standard.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### CI build
|
|
50
|
+
|
|
51
|
+
This repo uses `travis-ci` in the following configuration: [travis.yml](https://github.com/exercism/xpython/blob/master/.travis.yml)
|
|
36
52
|
|
|
37
|
-
|
|
53
|
+
It will check automatically the code style, the problem configuration and runns the unittests with all supported Python versions.
|
|
38
54
|
|
|
39
|
-
This repo uses [flake8](http://flake8.readthedocs.org/en/latest/) with default settings to enforce the coding standard. When you submit a PR, it needs to pass the flake8 tool with no warnings, or it won't be accepted.
|
|
40
55
|
|
|
41
56
|
## Pull Requests
|
|
42
57
|
|
data/tracks/rust/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Exercism exercises in Rust
|
|
|
7
7
|
|
|
8
8
|
## Contributing Guide
|
|
9
9
|
|
|
10
|
-
Please see the [contributing guide](https://github.com/exercism/
|
|
10
|
+
Please see the [contributing guide](https://github.com/exercism/docs/tree/master/contributing-to-language-tracks)
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
## Rust icon
|
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.1.0.
|
|
4
|
+
version: 2.1.0.31
|
|
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-06-
|
|
11
|
+
date: 2017-06-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rubyzip
|
|
@@ -6251,40 +6251,39 @@ files:
|
|
|
6251
6251
|
- tracks/ocaml/tools/test-generator/src/ocaml_special_cases.ml
|
|
6252
6252
|
- tracks/ocaml/tools/test-generator/src/parser.ml
|
|
6253
6253
|
- tracks/ocaml/tools/test-generator/src/purescript_special_cases.ml
|
|
6254
|
-
- tracks/ocaml/tools/test-generator/src/special_cases.ml
|
|
6255
6254
|
- tracks/ocaml/tools/test-generator/src/template.ml
|
|
6256
6255
|
- tracks/ocaml/tools/test-generator/src/test_gen.ml
|
|
6257
6256
|
- tracks/ocaml/tools/test-generator/src/utils.ml
|
|
6258
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/acronym/
|
|
6259
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/all-your-base/
|
|
6260
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/anagram/
|
|
6261
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/atbash-cipher/
|
|
6262
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/beer-song/
|
|
6263
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/binary-search/
|
|
6264
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/bob/
|
|
6265
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/bowling/
|
|
6266
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/bracket-push/
|
|
6267
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/change/
|
|
6268
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/connect/
|
|
6269
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/difference-of-squares/
|
|
6270
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/dominoes/
|
|
6271
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/etl/
|
|
6272
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/forth/
|
|
6273
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/hamming/
|
|
6274
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/hello-world/
|
|
6275
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/leap/
|
|
6276
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/luhn/
|
|
6277
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/minesweeper/
|
|
6278
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/pangram/
|
|
6279
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/phone-number/
|
|
6280
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/prime-factors/
|
|
6281
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/raindrops/
|
|
6282
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/roman-numerals/
|
|
6283
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/run-length-encoding/
|
|
6284
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/say/
|
|
6285
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/space-age/
|
|
6286
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/triangle/
|
|
6287
|
-
- tracks/ocaml/tools/test-generator/templates/ocaml/word-count/
|
|
6257
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/acronym/test.ml
|
|
6258
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/all-your-base/test.ml
|
|
6259
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/anagram/test.ml
|
|
6260
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/atbash-cipher/test.ml
|
|
6261
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/beer-song/test.ml
|
|
6262
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/binary-search/test.ml
|
|
6263
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/bob/test.ml
|
|
6264
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/bowling/test.ml
|
|
6265
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/bracket-push/test.ml
|
|
6266
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/change/test.ml
|
|
6267
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/connect/test.ml
|
|
6268
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/difference-of-squares/test.ml
|
|
6269
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/dominoes/test.ml
|
|
6270
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/etl/test.ml
|
|
6271
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/forth/test.ml
|
|
6272
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/hamming/test.ml
|
|
6273
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/hello-world/test.ml
|
|
6274
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/leap/test.ml
|
|
6275
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/luhn/test.ml
|
|
6276
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/minesweeper/test.ml
|
|
6277
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/pangram/test.ml
|
|
6278
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/phone-number/test.ml
|
|
6279
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/prime-factors/test.ml
|
|
6280
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/raindrops/test.ml
|
|
6281
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/roman-numerals/test.ml
|
|
6282
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/run-length-encoding/test.ml
|
|
6283
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/say/test.ml
|
|
6284
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/space-age/test.ml
|
|
6285
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/triangle/test.ml
|
|
6286
|
+
- tracks/ocaml/tools/test-generator/templates/ocaml/word-count/test.ml
|
|
6288
6287
|
- tracks/ocaml/tools/test-generator/templates/purescript/hamming/Main.purs
|
|
6289
6288
|
- tracks/ocaml/tools/test-generator/test/all_tests.ml
|
|
6290
6289
|
- tracks/ocaml/tools/test-generator/test/beer-song.json
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
open Core
|
|
2
|
-
|
|
3
|
-
open Yojson.Basic
|
|
4
|
-
open Ocaml_special_cases
|
|
5
|
-
open Purescript_special_cases
|
|
6
|
-
|
|
7
|
-
let edit_expected ~(language: string) ~(stringify: json -> string) ~(slug: string) ~(value: json) = match language with
|
|
8
|
-
| "ocaml" -> Ocaml_special_cases.ocaml_edit_expected ~stringify ~slug ~value
|
|
9
|
-
| "purescript" -> Purescript_special_cases.edit_expected ~stringify ~slug ~value
|
|
10
|
-
| _ -> failwith "unknown language"
|
|
11
|
-
|
|
12
|
-
include Ocaml_special_cases
|