trackler 2.0.8.43 → 2.0.8.44
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/tracks/ceylon/exercises/anagram/source/anagram/AnagramTest.ceylon +3 -2
- data/tracks/ceylon/exercises/bracket-push/source/bracketpush/BracketsTest.ceylon +3 -0
- data/tracks/ceylon/exercises/hamming/source/hamming/HammingTest.ceylon +16 -0
- data/tracks/ceylon/exercises/largest-series-product/source/largestseriesproduct/SeriesTest.ceylon +16 -0
- data/tracks/ceylon/exercises/leap/source/leap/LeapTest.ceylon +1 -0
- data/tracks/ceylon/exercises/react/source/react/ReactorTest.ceylon +2 -0
- data/tracks/ceylon/exercises/sieve/source/sieve/SieveTest.ceylon +1 -0
- data/tracks/crystal/exercises/sieve/src/example.cr +3 -2
- data/tracks/csharp/.github/stale.yml +0 -0
- data/tracks/csharp/exercises/house/HINTS.md +3 -0
- data/tracks/csharp/exercises/saddle-points/HINTS.md +4 -0
- data/tracks/fsharp/.github/stale.yml +0 -0
- data/tracks/go/.github/stale.yml +22 -0
- data/tracks/go/README.md +26 -15
- data/tracks/go/exercises/bob/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/bowling/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/change/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/clock/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/connect/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/custom-set/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/forth/.meta/gen.go +71 -0
- data/tracks/go/exercises/forth/cases_test.go +259 -236
- data/tracks/go/exercises/forth/forth_test.go +19 -34
- data/tracks/go/exercises/gigasecond/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/hamming/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/largest-series-product/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/leap/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/luhn/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/meetup/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/raindrops/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/rna-transcription/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/roman-numerals/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/transpose/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/exercises/word-count/{example_gen.go → .meta/gen.go} +1 -1
- data/tracks/go/gen/gen.go +9 -9
- data/tracks/purescript/config.json +7 -0
- data/tracks/purescript/exercises/binary-search/bower.json +16 -0
- data/tracks/purescript/exercises/binary-search/examples/src/BinarySearch.purs +19 -0
- data/tracks/purescript/exercises/binary-search/src/BinarySearch.purs +3 -0
- data/tracks/purescript/exercises/binary-search/test/Main.purs +53 -0
- data/tracks/python/config.json +6 -0
- data/tracks/python/exercises/rectangles/rectangles_test.py +68 -41
- data/tracks/python/exercises/transpose/example.py +6 -0
- data/tracks/python/exercises/transpose/transpose.py +2 -0
- data/tracks/python/exercises/transpose/transpose_test.py +264 -0
- metadata +32 -20
- data/tracks/go/exercises/forth/example_gen.go +0 -99
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cad1dc38bea7e7ee4ddedd5f7215ef56be2adb9a
|
4
|
+
data.tar.gz: 3891605c70d09d4a9e44db48a7e702bcee6486cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 454da043eddd6054d7ceacb2ca7768db876af837347ca5c4dc9864638a7f159a6297b905f129bf3adc90d2af078c04b8af228d12be8b4386ba06bf88b5038640
|
7
|
+
data.tar.gz: 19be29744501524033e93ea0e793e305dade023157c35de1f5500ba0e81af04d4ebba679c7ec90b1e37dd3f3102e05086b9d53f19f428ebc6013be2d9cf51b50
|
data/lib/trackler/version.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import ceylon.test { ... }
|
2
2
|
|
3
|
+
// Tests adapted from x-common version 1.0.1
|
3
4
|
{[String, {String*}, {String*}]*} cases => {
|
4
5
|
// no matches
|
5
6
|
["diaper", {"hello", "world", "zombies", "pants"}, {}],
|
@@ -7,13 +8,13 @@ import ceylon.test { ... }
|
|
7
8
|
["ant", {"tan", "stand", "at"}, {"tan"}],
|
8
9
|
// does not detect false positives
|
9
10
|
["galea", {"eagle"}, {}],
|
10
|
-
// detects
|
11
|
+
// detects two anagrams
|
11
12
|
["master", {"stream", "pigeon", "maters"}, {"stream", "maters"}],
|
12
13
|
// does not detect anagram subsets
|
13
14
|
["good", {"dog", "goody"}, {}],
|
14
15
|
// detects anagram
|
15
16
|
["listen", {"enlists", "google", "inlets", "banana"}, {"inlets"}],
|
16
|
-
// detects
|
17
|
+
// detects three anagrams
|
17
18
|
[
|
18
19
|
"allergy",
|
19
20
|
{"gallery", "ballerina", "regally", "clergy", "largely", "leading"},
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import ceylon.test { ... }
|
2
2
|
|
3
|
+
// Tests adapted from x-common version 1.1.0
|
3
4
|
{[String, Boolean]*} cases => {
|
4
5
|
// paired square brackets
|
5
6
|
["[]", true],
|
@@ -9,6 +10,8 @@ import ceylon.test { ... }
|
|
9
10
|
["[[", false],
|
10
11
|
// wrong ordered brackets
|
11
12
|
["}{", false],
|
13
|
+
// wrong closing bracket
|
14
|
+
["{]", false],
|
12
15
|
// paired with whitespace
|
13
16
|
["{ }", true],
|
14
17
|
// simple nested brackets
|
@@ -1,20 +1,36 @@
|
|
1
1
|
import ceylon.test { ... }
|
2
2
|
|
3
|
+
// Tests adapted from x-common version 1.0.0
|
3
4
|
{[String, String, Integer?]*} cases => {
|
5
|
+
// identical strands
|
4
6
|
["A", "A", 0],
|
7
|
+
// long identical strands
|
5
8
|
["GGACTGA", "GGACTGA", 0],
|
9
|
+
// complete distance in single nucleotide strands
|
6
10
|
["A", "G", 1],
|
11
|
+
// complete distance in small strands
|
7
12
|
["AG", "CT", 2],
|
13
|
+
// small distance in small strands
|
8
14
|
["AT", "CT", 1],
|
15
|
+
// small distance
|
9
16
|
["GGACG", "GGTCG", 1],
|
17
|
+
// small distance in long strands
|
10
18
|
["ACCAGGG", "ACTATGG", 2],
|
19
|
+
// non-unique character in first strand
|
11
20
|
["AGA", "AGG", 1],
|
21
|
+
// non-unique character in second strand
|
12
22
|
["AGG", "AGA", 1],
|
23
|
+
// same nucleotides in different positions
|
13
24
|
["TAG", "GAT", 2],
|
25
|
+
// large distance
|
14
26
|
["GATACA", "GCATAA", 4],
|
27
|
+
// large distance in off-by-one strand
|
15
28
|
["GGACGGATTCTG", "AGGACGGATTCT", 9],
|
29
|
+
// empty strands
|
16
30
|
["", "", 0],
|
31
|
+
// disallow first strand longer
|
17
32
|
["AATG", "AAA", null],
|
33
|
+
// disallow second strand longer
|
18
34
|
["ATA", "AGTG", null]
|
19
35
|
};
|
20
36
|
|
data/tracks/ceylon/exercises/largest-series-product/source/largestseriesproduct/SeriesTest.ceylon
CHANGED
@@ -1,20 +1,36 @@
|
|
1
1
|
import ceylon.test { ... }
|
2
2
|
|
3
|
+
// Tests adapted from x-common version 1.0.0
|
3
4
|
{[String, Integer, Integer?]*} cases => {
|
5
|
+
// finds the largest product if span equals length
|
4
6
|
["29", 2, 18],
|
7
|
+
// can find the largest product of 2 with numbers in order
|
5
8
|
["0123456789", 2, 72],
|
9
|
+
// can find the largest product of 2
|
6
10
|
["576802143", 2, 48],
|
11
|
+
// can find the largest product of 3 with numbers in order
|
7
12
|
["0123456789", 3, 504],
|
13
|
+
// can find the largest product of 3
|
8
14
|
["1027839564", 3, 270],
|
15
|
+
// can find the largest product of 5 with numbers in order
|
9
16
|
["0123456789", 5, 15120],
|
17
|
+
// can get the largest product of a big number
|
10
18
|
["73167176531330624919225119674426574742355349194934", 6, 23520],
|
19
|
+
// reports zero if the only digits are zero
|
11
20
|
["0000", 2, 0],
|
21
|
+
// reports zero if all spans include zero
|
12
22
|
["99099", 3, 0],
|
23
|
+
// rejects span longer than string length
|
13
24
|
["123", 4, null],
|
25
|
+
// reports 1 for empty string and empty product (0 span)
|
14
26
|
["", 0, 1],
|
27
|
+
// reports 1 for nonempty string and empty product (0 span)
|
15
28
|
["123", 0, 1],
|
29
|
+
// rejects empty string and nonzero span
|
16
30
|
["", 1, null],
|
31
|
+
// rejects invalid character in digits
|
17
32
|
["1234a5", 2, null],
|
33
|
+
// rejects negative span
|
18
34
|
["12345", -1, null]
|
19
35
|
};
|
20
36
|
|
@@ -4,9 +4,10 @@ module Primes
|
|
4
4
|
def sieve(limit)
|
5
5
|
sieve_ar = Array.new(limit + 1, true)
|
6
6
|
sieve_ar[0] = sieve_ar[1] = false
|
7
|
-
|
7
|
+
|
8
|
+
2.step(to: Math.sqrt(limit)) do |i|
|
8
9
|
next unless sieve_ar[i]
|
9
|
-
(i*i).step(limit, i) { |ii| sieve_ar[ii] = false }
|
10
|
+
(i*i).step(to: limit, by: i) { |ii| sieve_ar[ii] = false }
|
10
11
|
end
|
11
12
|
|
12
13
|
sieve_ar.each_with_index.reduce([] of Int32) { |p, (s, i)| s ? p << i : p }
|
File without changes
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Configuration for probot-stale - https://github.com/probot/stale
|
2
|
+
|
3
|
+
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
4
|
+
daysUntilStale: 60
|
5
|
+
# Number of days of inactivity before a stale Issue or Pull Request is closed
|
6
|
+
daysUntilClose: 7
|
7
|
+
# Issues or Pull Requests with these labels will never be considered stale
|
8
|
+
exemptLabels:
|
9
|
+
- pinned
|
10
|
+
- security
|
11
|
+
- good first patch
|
12
|
+
# Label to use when marking as stale
|
13
|
+
staleLabel: wontfix
|
14
|
+
# Comment to post when marking as stale. Set to `false` to disable
|
15
|
+
markComment: >
|
16
|
+
This issue has been automatically marked as stale because it has not had
|
17
|
+
recent activity. It will be closed if no further activity occurs. Thank you
|
18
|
+
for your contributions.
|
19
|
+
# Comment to post when closing a stale Issue or Pull Request. Set to `false` to disable
|
20
|
+
closeComment: false
|
21
|
+
# Limit to only `issues` or `pulls`
|
22
|
+
# only: issues
|
data/tracks/go/README.md
CHANGED
@@ -44,15 +44,16 @@ number of files there.
|
|
44
44
|
|
45
45
|
```sh
|
46
46
|
~/exercism/go/leap
|
47
|
-
$ tree
|
47
|
+
$ tree -a
|
48
48
|
.
|
49
49
|
├── cases_test.go
|
50
|
-
├── example_gen.go
|
51
50
|
├── example.go
|
52
51
|
├── leap.go
|
53
|
-
|
52
|
+
├── leap_test.go
|
53
|
+
└── .meta
|
54
|
+
└── gen.go
|
54
55
|
|
55
|
-
|
56
|
+
1 directory, 5 files
|
56
57
|
```
|
57
58
|
|
58
59
|
This list of files can vary across exercises so let's quickly run through
|
@@ -61,16 +62,22 @@ each file and briefly describe what it is.
|
|
61
62
|
**cases_test.go** - This file contains [generated test cases](#generating-test-cases),
|
62
63
|
and will only be present in some exercises.
|
63
64
|
|
64
|
-
**
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
**example.go** - This is a reference solution for the exercise.
|
65
|
+
**example.go** - This is a reference solution for the exercise. This file is
|
66
|
+
ignored by the `exercism fetch` command, as are any files that include the
|
67
|
+
word *example* in the filename, or anything within the *.meta* directory.
|
69
68
|
|
70
69
|
**leap.go** - This is a *stub file*, and will only be present in some exercises.
|
71
70
|
|
72
71
|
**leap_test.go** - This is the main test file for the exercise.
|
73
72
|
|
73
|
+
**.meta/** - The *.meta* directory is used to contain files that are not
|
74
|
+
meant to be included when a user fetches an exercise, for instance test case
|
75
|
+
generators.
|
76
|
+
|
77
|
+
**gen.go** - This file, within the *.meta* directory, generates the *cases_test.go*
|
78
|
+
file, and will only be present in some exercises. See [generating test cases](#generating-test-cases)
|
79
|
+
for more information.
|
80
|
+
|
74
81
|
In some exercises there can be extra files, for instance the `series` exercise
|
75
82
|
contains extra test files.
|
76
83
|
|
@@ -136,7 +143,7 @@ without a stub is [twelve-days](exercises/twelve-days/). At this point users wil
|
|
136
143
|
have some experience in creating solutions for the exercises and can begin to
|
137
144
|
create their own solutions from scratch. Some of the later exercises may have stub
|
138
145
|
files if the author thinks there may be implementation confusion, a particularly
|
139
|
-
difficult concept, or boilerplate code needed.
|
146
|
+
difficult concept, or boilerplate code needed.
|
140
147
|
|
141
148
|
### Problem Versioning
|
142
149
|
|
@@ -163,17 +170,21 @@ tracks don't.
|
|
163
170
|
|
164
171
|
Some problems that are implemented in multiple tracks use the same inputs and
|
165
172
|
outputs to define the test suites. Where the [x-common](https://github.com/exercism/x-common)
|
166
|
-
repository contains json
|
167
|
-
the test cases programmatically.
|
173
|
+
repository contains a *canonical-data.json* file with these inputs and outputs,
|
174
|
+
we can generate the test cases programmatically.
|
168
175
|
|
169
|
-
See the *
|
176
|
+
See the *gen.go* file in the `leap` exercise for an example of how this
|
170
177
|
can be done.
|
171
178
|
|
179
|
+
Test case generators are named *gen.go* and are kept in a special *.meta*
|
180
|
+
directory within each exercise that makes use of a test cases generator. This
|
181
|
+
*.meta* directory will be ignored when a user fetches an exercise.
|
182
|
+
|
172
183
|
Whenever the shared JSON data changes, the test cases will need to be regenerated.
|
173
184
|
To do this, make sure that the **x-common** repository has been cloned in the same
|
174
185
|
parent-directory as the **xgo** repository. Then navigate into the **xgo**
|
175
|
-
directory and run `go run exercises/<
|
176
|
-
that the `<
|
186
|
+
directory and run `go run exercises/<exercise>/.meta/gen.go`. You should see
|
187
|
+
that the `<exercise>/cases_test.go` file has changed. Commit the change.
|
177
188
|
|
178
189
|
## Pull requests
|
179
190
|
|
@@ -0,0 +1,71 @@
|
|
1
|
+
// +build ignore
|
2
|
+
|
3
|
+
package main
|
4
|
+
|
5
|
+
import (
|
6
|
+
"log"
|
7
|
+
"text/template"
|
8
|
+
|
9
|
+
"../../../gen"
|
10
|
+
)
|
11
|
+
|
12
|
+
func main() {
|
13
|
+
t, err := template.New("").Parse(tmpl)
|
14
|
+
if err != nil {
|
15
|
+
log.Fatal(err)
|
16
|
+
}
|
17
|
+
var j js
|
18
|
+
if err := gen.Gen("forth", &j, t); err != nil {
|
19
|
+
log.Fatal(err)
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
// The JSON structure we expect to be able to unmarshal into
|
24
|
+
type js struct {
|
25
|
+
Groups []Group `json:"cases"`
|
26
|
+
}
|
27
|
+
|
28
|
+
// A group of test cases.
|
29
|
+
type Group struct {
|
30
|
+
Name string `json:"description"`
|
31
|
+
Cases []OneCase
|
32
|
+
}
|
33
|
+
|
34
|
+
// One test case.
|
35
|
+
type OneCase struct {
|
36
|
+
Description string
|
37
|
+
Input []string
|
38
|
+
Expected []int
|
39
|
+
}
|
40
|
+
|
41
|
+
// template applied to above data structure generates the Go test cases
|
42
|
+
var tmpl = `package forth
|
43
|
+
|
44
|
+
{{.Header}}
|
45
|
+
|
46
|
+
type testGroup struct {
|
47
|
+
group string
|
48
|
+
tests []testCase
|
49
|
+
}
|
50
|
+
|
51
|
+
type testCase struct {
|
52
|
+
description string
|
53
|
+
input []string
|
54
|
+
expected []int // nil slice indicates error expected.
|
55
|
+
}
|
56
|
+
|
57
|
+
var testGroups = []testGroup{
|
58
|
+
{{range .J.Groups}}{
|
59
|
+
group: {{printf "%q" .Name}},
|
60
|
+
tests: []testCase{
|
61
|
+
{{range .Cases}}{
|
62
|
+
{{printf "%q" .Description}},
|
63
|
+
{{printf "%#v" .Input}},
|
64
|
+
{{printf "%#v" .Expected}},
|
65
|
+
},
|
66
|
+
{{end}}
|
67
|
+
},
|
68
|
+
},
|
69
|
+
{{end}}
|
70
|
+
}
|
71
|
+
`
|