trackler 2.2.1.86 → 2.2.1.87
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/reverse-string/metadata.yml +0 -1
- data/tracks/bash/CONTRIBUTING.md +129 -28
- data/tracks/bash/config/exercise_readme.go.tmpl +10 -4
- data/tracks/bash/exercises/acronym/README.md +8 -11
- data/tracks/bash/exercises/acronym/{acronym_tests.sh → acronym_test.sh} +0 -0
- data/tracks/bash/exercises/anagram/README.md +6 -1
- data/tracks/bash/exercises/anagram/anagram_test.sh +1 -1
- data/tracks/bash/exercises/armstrong-numbers/README.md +10 -2
- data/tracks/bash/exercises/atbash-cipher/README.md +6 -6
- data/tracks/bash/exercises/bob/README.md +8 -1
- data/tracks/bash/exercises/collatz-conjecture/README.md +11 -2
- data/tracks/bash/exercises/collatz-conjecture/{collatz_test.sh → collatz_conjecture_test.sh} +6 -6
- data/tracks/bash/exercises/difference-of-squares/README.md +6 -1
- data/tracks/bash/exercises/error-handling/README.md +13 -5
- data/tracks/bash/exercises/error-handling/error_handling_test.sh +18 -22
- data/tracks/bash/exercises/error-handling/example.sh +7 -6
- data/tracks/bash/exercises/gigasecond/.meta/hints.md +0 -5
- data/tracks/bash/exercises/gigasecond/README.md +36 -1
- data/tracks/bash/exercises/grains/README.md +10 -2
- data/tracks/bash/exercises/hamming/README.md +6 -1
- data/tracks/bash/exercises/hello-world/README.md +7 -2
- data/tracks/bash/exercises/leap/README.md +7 -2
- data/tracks/bash/exercises/luhn/README.md +7 -2
- data/tracks/bash/exercises/nucleotide-count/README.md +13 -22
- data/tracks/bash/exercises/pangram/README.md +7 -2
- data/tracks/bash/exercises/phone-number/README.md +10 -4
- data/tracks/bash/exercises/raindrops/README.md +6 -1
- data/tracks/bash/exercises/reverse-string/README.md +11 -2
- data/tracks/bash/exercises/rna-transcription/README.md +7 -2
- data/tracks/bash/exercises/roman-numerals/README.md +11 -2
- data/tracks/bash/exercises/triangle/README.md +5 -4
- data/tracks/bash/exercises/two-fer/README.md +7 -9
- data/tracks/bash/exercises/word-count/README.md +6 -2
- data/tracks/bash/exercises/word-count/example.sh +22 -13
- data/tracks/bash/scripts/canonical_data_check.sh +112 -0
- data/tracks/c/exercises/acronym/src/{example.h → acronym.h} +0 -0
- data/tracks/c/exercises/gigasecond/.meta/hints.md +124 -0
- data/tracks/c/exercises/gigasecond/README.md +126 -0
- data/tracks/c/exercises/isogram/src/{example.h → isogram.h} +0 -0
- data/tracks/c/exercises/meetup/.meta/hints.md +124 -0
- data/tracks/c/exercises/meetup/README.md +142 -12
- data/tracks/c/exercises/pangram/src/{example.h → pangram.h} +0 -0
- data/tracks/c/exercises/space-age/.meta/hints.md +124 -0
- data/tracks/c/exercises/space-age/README.md +127 -2
- data/tracks/elisp/bin/test-examples +11 -14
- data/tracks/elisp/config.json +9 -1
- data/tracks/elisp/exercises/acronym/README.md +13 -0
- data/tracks/elisp/exercises/acronym/acronym-test.el +28 -0
- data/tracks/elisp/exercises/acronym/acronym.el +11 -0
- data/tracks/elisp/exercises/acronym/example.el +14 -0
- data/tracks/elisp/exercises/bob/example.el +1 -3
- data/tracks/elisp/exercises/hamming/README.md +2 -0
- data/tracks/elisp/exercises/hamming/hamming-test.el +35 -12
- data/tracks/elisp/exercises/hamming/hamming.el +0 -3
- data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +206 -132
- data/tracks/fsharp/exercises/custom-set/Example.fs +2 -0
- data/tracks/fsharp/generators/Generators.fs +61 -0
- data/tracks/go/config.json +25 -2
- data/tracks/go/exercises/acronym/acronym_test.go +8 -0
- data/tracks/go/exercises/alphametics/.meta/gen.go +72 -0
- data/tracks/go/exercises/alphametics/.meta/hints.md +38 -0
- data/tracks/go/exercises/alphametics/README.md +93 -0
- data/tracks/go/exercises/alphametics/alphametics_test.go +33 -0
- data/tracks/go/exercises/alphametics/cases_test.go +59 -0
- data/tracks/go/exercises/alphametics/example.go +212 -0
- data/tracks/go/exercises/atbash-cipher/.meta/gen.go +6 -4
- data/tracks/go/exercises/atbash-cipher/cases_test.go +2 -2
- data/tracks/go/exercises/change/.meta/gen.go +7 -5
- data/tracks/go/exercises/change/cases_test.go +2 -2
- data/tracks/go/exercises/collatz-conjecture/.meta/gen.go +5 -3
- data/tracks/go/exercises/collatz-conjecture/cases_test.go +2 -2
- data/tracks/go/exercises/connect/.meta/gen.go +5 -3
- data/tracks/go/exercises/connect/cases_test.go +2 -2
- data/tracks/go/exercises/flatten-array/.meta/gen.go +5 -3
- data/tracks/go/exercises/flatten-array/cases_test.go +2 -2
- data/tracks/go/exercises/meetup/.meta/gen.go +19 -8
- data/tracks/go/exercises/meetup/cases_test.go +2 -2
- data/tracks/go/exercises/simple-linked-list/README.md +47 -0
- data/tracks/go/exercises/simple-linked-list/example.go +74 -0
- data/tracks/go/exercises/simple-linked-list/linked_list_test.go +210 -0
- data/tracks/idris/config.json +2 -2
- data/tracks/java/exercises/all-your-base/.meta/src/reference/java/BaseConverter.java +1 -5
- data/tracks/java/exercises/all-your-base/.meta/version +1 -1
- data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +34 -10
- data/tracks/java/exercises/bob/README.md +2 -0
- data/tracks/java/exercises/kindergarten-garden/.meta/version +1 -0
- data/tracks/java/exercises/kindergarten-garden/src/test/java/KindergartenGardenTest.java +0 -55
- data/tracks/java/exercises/meetup/.meta/version +1 -0
- data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +32 -0
- data/tracks/java/exercises/parallel-letter-frequency/README.md +1 -0
- data/tracks/java/exercises/proverb/README.md +16 -10
- data/tracks/java/exercises/rail-fence-cipher/README.md +5 -6
- data/tracks/java/exercises/two-fer/README.md +1 -1
- data/tracks/java/exercises/word-search/.meta/version +1 -1
- data/tracks/java/exercises/word-search/src/test/java/WordSearcherTest.java +240 -2
- data/tracks/javascript/.eslintignore +0 -1
- data/tracks/javascript/exercises/palindrome-products/example.js +3 -3
- data/tracks/kotlin/docs/INSTALLATION.md +77 -68
- data/tracks/kotlin/docs/TESTS.md +41 -39
- data/tracks/perl6/exercises/acronym/acronym.t +20 -8
- data/tracks/perl6/exercises/acronym/example.yaml +1 -1
- data/tracks/perl6/exercises/all-your-base/all-your-base.t +108 -66
- data/tracks/perl6/exercises/all-your-base/example.yaml +2 -2
- data/tracks/perl6/exercises/allergies/allergies.t +39 -15
- data/tracks/perl6/exercises/allergies/example.yaml +2 -2
- data/tracks/perl6/exercises/anagram/anagram.t +73 -40
- data/tracks/perl6/exercises/anagram/example.yaml +1 -1
- data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +38 -15
- data/tracks/perl6/exercises/atbash-cipher/example.yaml +1 -1
- data/tracks/perl6/exercises/bob/bob.t +77 -27
- data/tracks/perl6/exercises/bob/example.yaml +1 -1
- data/tracks/perl6/exercises/flatten-array/example.yaml +1 -1
- data/tracks/perl6/exercises/flatten-array/flatten-array.t +20 -8
- data/tracks/perl6/exercises/luhn/example.yaml +1 -1
- data/tracks/perl6/exercises/luhn/luhn.t +42 -16
- data/tracks/perl6/exercises/roman-numerals/README.md +68 -0
- data/tracks/php/exercises/gigasecond/gigasecond_test.php +1 -1
- data/tracks/python/docs/ABOUT.md +2 -2
- metadata +27 -10
- data/tracks/bash/docs/EXERCISE_README_INSERT.md +0 -3
- data/tracks/bash/exercises/word-count/example.awk +0 -12
- data/tracks/java/exercises/alphametics/src/main/java/.keep +0 -0
|
@@ -6,8 +6,8 @@ tests: |-
|
|
|
6
6
|
for $c-data<cases>.values -> $case {
|
|
7
7
|
sub call-convert-base {
|
|
8
8
|
convert-base(
|
|
9
|
-
bases => %(<from to> Z=> .<input_base output_base>),
|
|
10
|
-
digits => .<
|
|
9
|
+
bases => %(<from to> Z=> .<input><input_base output_base>),
|
|
10
|
+
digits => .<input><digits>,
|
|
11
11
|
) given $case;
|
|
12
12
|
}
|
|
13
13
|
|
|
@@ -28,7 +28,7 @@ for $c-data<cases>.values -> %case-set {
|
|
|
28
28
|
plan 7;
|
|
29
29
|
for %case-set<cases>.values -> %case {
|
|
30
30
|
for %case<expected>.values {
|
|
31
|
-
given allergic-to %case<score>, .<substance> -> $result {
|
|
31
|
+
given allergic-to %case<input><score>, .<substance> -> $result {
|
|
32
32
|
subtest %case<description> ~ ': ' ~ .<substance> => {
|
|
33
33
|
plan 2;
|
|
34
34
|
isa-ok $result, Bool;
|
|
@@ -42,7 +42,7 @@ for $c-data<cases>.values -> %case-set {
|
|
|
42
42
|
subtest 'list-allergies' => {
|
|
43
43
|
plan 9;
|
|
44
44
|
for %case-set<cases>.values {
|
|
45
|
-
cmp-ok list-allergies(.<score>), '~~', .<expected>.Set, .<description>;
|
|
45
|
+
cmp-ok list-allergies(.<input><score>), '~~', .<expected>.Set, .<description>;
|
|
46
46
|
}
|
|
47
47
|
} when %case-set<description> ~~ 'list';
|
|
48
48
|
|
|
@@ -53,7 +53,7 @@ for $c-data<cases>.values -> %case-set {
|
|
|
53
53
|
|
|
54
54
|
{
|
|
55
55
|
"exercise": "allergies",
|
|
56
|
-
"version": "1.
|
|
56
|
+
"version": "1.1.0",
|
|
57
57
|
"cases": [
|
|
58
58
|
{
|
|
59
59
|
"description": "allergicTo",
|
|
@@ -68,7 +68,9 @@ for $c-data<cases>.values -> %case-set {
|
|
|
68
68
|
{
|
|
69
69
|
"description": "no allergies means not allergic",
|
|
70
70
|
"property": "allergicTo",
|
|
71
|
-
"
|
|
71
|
+
"input": {
|
|
72
|
+
"score": 0
|
|
73
|
+
},
|
|
72
74
|
"expected": [
|
|
73
75
|
{
|
|
74
76
|
"substance": "peanuts",
|
|
@@ -87,7 +89,9 @@ for $c-data<cases>.values -> %case-set {
|
|
|
87
89
|
{
|
|
88
90
|
"description": "is allergic to eggs",
|
|
89
91
|
"property": "allergicTo",
|
|
90
|
-
"
|
|
92
|
+
"input": {
|
|
93
|
+
"score": 1
|
|
94
|
+
},
|
|
91
95
|
"expected": [
|
|
92
96
|
{
|
|
93
97
|
"substance": "eggs",
|
|
@@ -98,7 +102,9 @@ for $c-data<cases>.values -> %case-set {
|
|
|
98
102
|
{
|
|
99
103
|
"description": "allergic to eggs in addition to other stuff",
|
|
100
104
|
"property": "allergicTo",
|
|
101
|
-
"
|
|
105
|
+
"input": {
|
|
106
|
+
"score": 5
|
|
107
|
+
},
|
|
102
108
|
"expected": [
|
|
103
109
|
{
|
|
104
110
|
"substance": "eggs",
|
|
@@ -125,43 +131,57 @@ for $c-data<cases>.values -> %case-set {
|
|
|
125
131
|
{
|
|
126
132
|
"description": "no allergies at all",
|
|
127
133
|
"property": "list",
|
|
128
|
-
"
|
|
134
|
+
"input": {
|
|
135
|
+
"score": 0
|
|
136
|
+
},
|
|
129
137
|
"expected": []
|
|
130
138
|
},
|
|
131
139
|
{
|
|
132
140
|
"description": "allergic to just eggs",
|
|
133
141
|
"property": "list",
|
|
134
|
-
"
|
|
142
|
+
"input": {
|
|
143
|
+
"score": 1
|
|
144
|
+
},
|
|
135
145
|
"expected": ["eggs"]
|
|
136
146
|
},
|
|
137
147
|
{
|
|
138
148
|
"description": "allergic to just peanuts",
|
|
139
149
|
"property": "list",
|
|
140
|
-
"
|
|
150
|
+
"input": {
|
|
151
|
+
"score": 2
|
|
152
|
+
},
|
|
141
153
|
"expected": ["peanuts"]
|
|
142
154
|
},
|
|
143
155
|
{
|
|
144
156
|
"description": "allergic to just strawberries",
|
|
145
157
|
"property": "list",
|
|
146
|
-
"
|
|
158
|
+
"input": {
|
|
159
|
+
"score": 8
|
|
160
|
+
},
|
|
147
161
|
"expected": ["strawberries"]
|
|
148
162
|
},
|
|
149
163
|
{
|
|
150
164
|
"description": "allergic to eggs and peanuts",
|
|
151
165
|
"property": "list",
|
|
152
|
-
"
|
|
166
|
+
"input": {
|
|
167
|
+
"score": 3
|
|
168
|
+
},
|
|
153
169
|
"expected": ["eggs", "peanuts"]
|
|
154
170
|
},
|
|
155
171
|
{
|
|
156
172
|
"description": "allergic to more than eggs but not peanuts",
|
|
157
173
|
"property": "list",
|
|
158
|
-
"
|
|
174
|
+
"input": {
|
|
175
|
+
"score": 5
|
|
176
|
+
},
|
|
159
177
|
"expected": ["eggs", "shellfish"]
|
|
160
178
|
},
|
|
161
179
|
{
|
|
162
180
|
"description": "allergic to lots of stuff",
|
|
163
181
|
"property": "list",
|
|
164
|
-
"
|
|
182
|
+
"input": {
|
|
183
|
+
"score": 248
|
|
184
|
+
},
|
|
165
185
|
"expected": [ "strawberries",
|
|
166
186
|
"tomatoes",
|
|
167
187
|
"chocolate",
|
|
@@ -172,7 +192,9 @@ for $c-data<cases>.values -> %case-set {
|
|
|
172
192
|
{
|
|
173
193
|
"description": "allergic to everything",
|
|
174
194
|
"property": "list",
|
|
175
|
-
"
|
|
195
|
+
"input": {
|
|
196
|
+
"score": 255
|
|
197
|
+
},
|
|
176
198
|
"expected": [ "eggs",
|
|
177
199
|
"peanuts",
|
|
178
200
|
"shellfish",
|
|
@@ -186,7 +208,9 @@ for $c-data<cases>.values -> %case-set {
|
|
|
186
208
|
{
|
|
187
209
|
"description": "ignore non allergen score parts",
|
|
188
210
|
"property": "list",
|
|
189
|
-
"
|
|
211
|
+
"input": {
|
|
212
|
+
"score": 509
|
|
213
|
+
},
|
|
190
214
|
"expected": [ "eggs",
|
|
191
215
|
"shellfish",
|
|
192
216
|
"strawberries",
|
|
@@ -9,7 +9,7 @@ tests: |-
|
|
|
9
9
|
plan 7;
|
|
10
10
|
for %case-set<cases>.values -> %case {
|
|
11
11
|
for %case<expected>.values {
|
|
12
|
-
given allergic-to %case<score>, .<substance> -> $result {
|
|
12
|
+
given allergic-to %case<input><score>, .<substance> -> $result {
|
|
13
13
|
subtest %case<description> ~ ': ' ~ .<substance> => {
|
|
14
14
|
plan 2;
|
|
15
15
|
isa-ok $result, Bool;
|
|
@@ -23,7 +23,7 @@ tests: |-
|
|
|
23
23
|
subtest 'list-allergies' => {
|
|
24
24
|
plan 9;
|
|
25
25
|
for %case-set<cases>.values {
|
|
26
|
-
cmp-ok list-allergies(.<score>), '~~', .<expected>.Set, .<description>;
|
|
26
|
+
cmp-ok list-allergies(.<input><score>), '~~', .<expected>.Set, .<description>;
|
|
27
27
|
}
|
|
28
28
|
} when %case-set<description> ~~ 'list';
|
|
29
29
|
|
|
@@ -22,14 +22,14 @@ if ::($exercise).^ver !~~ $version {
|
|
|
22
22
|
require ::($module) <&match-anagrams>;
|
|
23
23
|
|
|
24
24
|
my $c-data = from-json $=pod.pop.contents;
|
|
25
|
-
cmp-ok match-anagrams( |%(.<subject candidates>:p) ), '~~', .<expected>.Set, .<description> for $c-data<cases>.values;
|
|
25
|
+
cmp-ok match-anagrams( |%(.<input><subject candidates>:p) ), '~~', .<expected>.Set, .<description> for $c-data<cases>.values;
|
|
26
26
|
|
|
27
27
|
=head2 Canonical Data
|
|
28
28
|
=begin code
|
|
29
29
|
|
|
30
30
|
{
|
|
31
31
|
"exercise": "anagram",
|
|
32
|
-
"version": "1.0
|
|
32
|
+
"version": "1.1.0",
|
|
33
33
|
"comments": [
|
|
34
34
|
"The string argument cases possible matches are passed in as",
|
|
35
35
|
"individual arguments rather than arrays. Languages can include",
|
|
@@ -40,119 +40,152 @@ cmp-ok match-anagrams( |%(.<subject candidates>:p) ), '~~', .<expected>.Set, .<d
|
|
|
40
40
|
{
|
|
41
41
|
"description": "no matches",
|
|
42
42
|
"property": "anagrams",
|
|
43
|
-
"
|
|
44
|
-
|
|
43
|
+
"input": {
|
|
44
|
+
"subject": "diaper",
|
|
45
|
+
"candidates": ["hello", "world", "zombies", "pants"]
|
|
46
|
+
},
|
|
45
47
|
"expected": []
|
|
46
48
|
},
|
|
47
49
|
{
|
|
48
50
|
"description": "detects simple anagram",
|
|
49
51
|
"property": "anagrams",
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
+
"input": {
|
|
53
|
+
"subject": "ant",
|
|
54
|
+
"candidates": ["tan", "stand", "at"]
|
|
55
|
+
},
|
|
52
56
|
"expected": ["tan"]
|
|
53
57
|
},
|
|
54
58
|
{
|
|
55
59
|
"description": "does not detect false positives",
|
|
56
60
|
"property": "anagrams",
|
|
57
|
-
"
|
|
58
|
-
|
|
61
|
+
"input": {
|
|
62
|
+
"subject": "galea",
|
|
63
|
+
"candidates": ["eagle"]
|
|
64
|
+
},
|
|
59
65
|
"expected": []
|
|
60
66
|
},
|
|
61
67
|
{
|
|
62
68
|
"description": "detects two anagrams",
|
|
63
69
|
"property": "anagrams",
|
|
64
|
-
"
|
|
65
|
-
|
|
70
|
+
"input": {
|
|
71
|
+
"subject": "master",
|
|
72
|
+
"candidates": ["stream", "pigeon", "maters"]
|
|
73
|
+
},
|
|
66
74
|
"expected": ["stream", "maters"]
|
|
67
75
|
},
|
|
68
76
|
{
|
|
69
77
|
"description": "does not detect anagram subsets",
|
|
70
78
|
"property": "anagrams",
|
|
71
|
-
"
|
|
72
|
-
|
|
79
|
+
"input": {
|
|
80
|
+
"subject": "good",
|
|
81
|
+
"candidates": ["dog", "goody"]
|
|
82
|
+
},
|
|
73
83
|
"expected": []
|
|
74
84
|
},
|
|
75
85
|
{
|
|
76
86
|
"description": "detects anagram",
|
|
77
87
|
"property": "anagrams",
|
|
78
|
-
"
|
|
79
|
-
|
|
88
|
+
"input": {
|
|
89
|
+
"subject": "listen",
|
|
90
|
+
"candidates": ["enlists", "google", "inlets", "banana"]
|
|
91
|
+
},
|
|
80
92
|
"expected": ["inlets"]
|
|
81
93
|
},
|
|
82
94
|
{
|
|
83
95
|
"description": "detects three anagrams",
|
|
84
96
|
"property": "anagrams",
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
97
|
+
"input": {
|
|
98
|
+
"subject": "allergy",
|
|
99
|
+
"candidates": [
|
|
100
|
+
"gallery",
|
|
101
|
+
"ballerina",
|
|
102
|
+
"regally",
|
|
103
|
+
"clergy",
|
|
104
|
+
"largely",
|
|
105
|
+
"leading"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
93
108
|
"expected": ["gallery", "regally", "largely"]
|
|
94
109
|
},
|
|
95
110
|
{
|
|
96
111
|
"description": "does not detect identical words",
|
|
97
112
|
"property": "anagrams",
|
|
98
|
-
"
|
|
99
|
-
|
|
113
|
+
"input": {
|
|
114
|
+
"subject": "corn",
|
|
115
|
+
"candidates": ["corn", "dark", "Corn", "rank", "CORN", "cron", "park"]
|
|
116
|
+
},
|
|
100
117
|
"expected": ["cron"]
|
|
101
118
|
},
|
|
102
119
|
{
|
|
103
120
|
"description": "does not detect non-anagrams with identical checksum",
|
|
104
121
|
"property": "anagrams",
|
|
105
|
-
"
|
|
106
|
-
|
|
122
|
+
"input": {
|
|
123
|
+
"subject": "mass",
|
|
124
|
+
"candidates": ["last"]
|
|
125
|
+
},
|
|
107
126
|
"expected": []
|
|
108
127
|
},
|
|
109
128
|
{
|
|
110
129
|
"description": "detects anagrams case-insensitively",
|
|
111
130
|
"property": "anagrams",
|
|
112
|
-
"
|
|
113
|
-
|
|
131
|
+
"input": {
|
|
132
|
+
"subject": "Orchestra",
|
|
133
|
+
"candidates": ["cashregister", "Carthorse", "radishes"]
|
|
134
|
+
},
|
|
114
135
|
"expected": ["Carthorse"]
|
|
115
136
|
},
|
|
116
137
|
{
|
|
117
138
|
"description": "detects anagrams using case-insensitive subject",
|
|
118
139
|
"property": "anagrams",
|
|
119
|
-
"
|
|
120
|
-
|
|
140
|
+
"input": {
|
|
141
|
+
"subject": "Orchestra",
|
|
142
|
+
"candidates": ["cashregister", "carthorse", "radishes"]
|
|
143
|
+
},
|
|
121
144
|
"expected": ["carthorse"]
|
|
122
145
|
},
|
|
123
146
|
{
|
|
124
147
|
"description": "detects anagrams using case-insensitive possible matches",
|
|
125
148
|
"property": "anagrams",
|
|
126
|
-
"
|
|
127
|
-
|
|
149
|
+
"input": {
|
|
150
|
+
"subject": "orchestra",
|
|
151
|
+
"candidates": ["cashregister", "Carthorse", "radishes"]
|
|
152
|
+
},
|
|
128
153
|
"expected": ["Carthorse"]
|
|
129
154
|
},
|
|
130
155
|
{
|
|
131
156
|
"description": "does not detect a word as its own anagram",
|
|
132
157
|
"property": "anagrams",
|
|
133
|
-
"
|
|
134
|
-
|
|
158
|
+
"input": {
|
|
159
|
+
"subject": "banana",
|
|
160
|
+
"candidates": ["Banana"]
|
|
161
|
+
},
|
|
135
162
|
"expected": []
|
|
136
163
|
},
|
|
137
164
|
{
|
|
138
165
|
"description": "does not detect a anagram if the original word is repeated",
|
|
139
166
|
"property": "anagrams",
|
|
140
|
-
"
|
|
141
|
-
|
|
167
|
+
"input": {
|
|
168
|
+
"subject": "go",
|
|
169
|
+
"candidates": ["go Go GO"]
|
|
170
|
+
},
|
|
142
171
|
"expected": []
|
|
143
172
|
},
|
|
144
173
|
{
|
|
145
174
|
"description": "anagrams must use all letters exactly once",
|
|
146
175
|
"property": "anagrams",
|
|
147
|
-
"
|
|
148
|
-
|
|
176
|
+
"input": {
|
|
177
|
+
"subject": "tapper",
|
|
178
|
+
"candidates": ["patter"]
|
|
179
|
+
},
|
|
149
180
|
"expected": []
|
|
150
181
|
},
|
|
151
182
|
{
|
|
152
183
|
"description": "capital word is not own anagram",
|
|
153
184
|
"property": "anagrams",
|
|
154
|
-
"
|
|
155
|
-
|
|
185
|
+
"input": {
|
|
186
|
+
"subject": "BANANA",
|
|
187
|
+
"candidates": ["Banana"]
|
|
188
|
+
},
|
|
156
189
|
"expected": []
|
|
157
190
|
}
|
|
158
191
|
]
|
|
@@ -3,7 +3,7 @@ version: 2
|
|
|
3
3
|
plan: 18
|
|
4
4
|
imports: '&match-anagrams'
|
|
5
5
|
tests: |-
|
|
6
|
-
cmp-ok match-anagrams( |%(.<subject candidates>:p) ), '~~', .<expected>.Set, .<description> for $c-data<cases>.values;
|
|
6
|
+
cmp-ok match-anagrams( |%(.<input><subject candidates>:p) ), '~~', .<expected>.Set, .<description> for $c-data<cases>.values;
|
|
7
7
|
|
|
8
8
|
unit: module
|
|
9
9
|
example: |-
|
|
@@ -22,14 +22,14 @@ if ::($exercise).^ver !~~ $version {
|
|
|
22
22
|
require ::($module) <&encode &decode>;
|
|
23
23
|
|
|
24
24
|
my $c-data = from-json $=pod.pop.contents;
|
|
25
|
-
is .<phrase>.&::(.<property>), |.<expected description> for $c-data<cases>»<cases>».Array.flat;
|
|
25
|
+
is .<input><phrase>.&::(.<property>), |.<expected description> for $c-data<cases>»<cases>».Array.flat;
|
|
26
26
|
|
|
27
27
|
=head2 Canonical Data
|
|
28
28
|
=begin code
|
|
29
29
|
|
|
30
30
|
{
|
|
31
31
|
"exercise": "atbash-cipher",
|
|
32
|
-
"version": "1.
|
|
32
|
+
"version": "1.1.0",
|
|
33
33
|
"comments": [
|
|
34
34
|
"The tests are divided into two groups: ",
|
|
35
35
|
"* Encoding from English to atbash cipher",
|
|
@@ -43,49 +43,65 @@ is .<phrase>.&::(.<property>), |.<expected description> for $c-data<cases>»<cas
|
|
|
43
43
|
{
|
|
44
44
|
"description": "encode yes",
|
|
45
45
|
"property": "encode",
|
|
46
|
-
"
|
|
46
|
+
"input": {
|
|
47
|
+
"phrase": "yes"
|
|
48
|
+
},
|
|
47
49
|
"expected": "bvh"
|
|
48
50
|
},
|
|
49
51
|
{
|
|
50
52
|
"description": "encode no",
|
|
51
53
|
"property": "encode",
|
|
52
|
-
"
|
|
54
|
+
"input": {
|
|
55
|
+
"phrase": "no"
|
|
56
|
+
},
|
|
53
57
|
"expected": "ml"
|
|
54
58
|
},
|
|
55
59
|
{
|
|
56
60
|
"description": "encode OMG",
|
|
57
61
|
"property": "encode",
|
|
58
|
-
"
|
|
62
|
+
"input": {
|
|
63
|
+
"phrase": "OMG"
|
|
64
|
+
},
|
|
59
65
|
"expected": "lnt"
|
|
60
66
|
},
|
|
61
67
|
{
|
|
62
68
|
"description": "encode spaces",
|
|
63
69
|
"property": "encode",
|
|
64
|
-
"
|
|
70
|
+
"input": {
|
|
71
|
+
"phrase": "O M G"
|
|
72
|
+
},
|
|
65
73
|
"expected": "lnt"
|
|
66
74
|
},
|
|
67
75
|
{
|
|
68
76
|
"description": "encode mindblowingly",
|
|
69
77
|
"property": "encode",
|
|
70
|
-
"
|
|
78
|
+
"input": {
|
|
79
|
+
"phrase": "mindblowingly"
|
|
80
|
+
},
|
|
71
81
|
"expected": "nrmwy oldrm tob"
|
|
72
82
|
},
|
|
73
83
|
{
|
|
74
84
|
"description": "encode numbers",
|
|
75
85
|
"property": "encode",
|
|
76
|
-
"
|
|
86
|
+
"input": {
|
|
87
|
+
"phrase": "Testing,1 2 3, testing."
|
|
88
|
+
},
|
|
77
89
|
"expected": "gvhgr mt123 gvhgr mt"
|
|
78
90
|
},
|
|
79
91
|
{
|
|
80
92
|
"description": "encode deep thought",
|
|
81
93
|
"property": "encode",
|
|
82
|
-
"
|
|
94
|
+
"input": {
|
|
95
|
+
"phrase": "Truth is fiction."
|
|
96
|
+
},
|
|
83
97
|
"expected": "gifgs rhurx grlm"
|
|
84
98
|
},
|
|
85
99
|
{
|
|
86
100
|
"description": "encode all the letters",
|
|
87
101
|
"property": "encode",
|
|
88
|
-
"
|
|
102
|
+
"input": {
|
|
103
|
+
"phrase": "The quick brown fox jumps over the lazy dog."
|
|
104
|
+
},
|
|
89
105
|
"expected": "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
|
|
90
106
|
}
|
|
91
107
|
]
|
|
@@ -97,32 +113,39 @@ is .<phrase>.&::(.<property>), |.<expected description> for $c-data<cases>»<cas
|
|
|
97
113
|
{
|
|
98
114
|
"description": "decode exercism",
|
|
99
115
|
"property": "decode",
|
|
100
|
-
"
|
|
116
|
+
"input": {
|
|
117
|
+
"phrase": "vcvix rhn"
|
|
118
|
+
},
|
|
101
119
|
"expected": "exercism"
|
|
102
120
|
},
|
|
103
121
|
{
|
|
104
122
|
"description": "decode a sentence",
|
|
105
123
|
"property": "decode",
|
|
106
|
-
"
|
|
124
|
+
"input": {
|
|
125
|
+
"phrase": "zmlyh gzxov rhlug vmzhg vkkrm thglm v"
|
|
126
|
+
},
|
|
107
127
|
"expected": "anobstacleisoftenasteppingstone"
|
|
108
128
|
},
|
|
109
129
|
{
|
|
110
130
|
"description": "decode numbers",
|
|
111
131
|
"property": "decode",
|
|
112
|
-
"
|
|
132
|
+
"input": {
|
|
133
|
+
"phrase": "gvhgr mt123 gvhgr mt"
|
|
134
|
+
},
|
|
113
135
|
"expected": "testing123testing"
|
|
114
136
|
},
|
|
115
137
|
{
|
|
116
138
|
"description": "decode all the letters",
|
|
117
139
|
"property": "decode",
|
|
118
|
-
"
|
|
140
|
+
"input": {
|
|
141
|
+
"phrase": "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
|
|
142
|
+
},
|
|
119
143
|
"expected": "thequickbrownfoxjumpsoverthelazydog"
|
|
120
144
|
}
|
|
121
145
|
]
|
|
122
146
|
}
|
|
123
147
|
]
|
|
124
148
|
}
|
|
125
|
-
|
|
126
149
|
=end code
|
|
127
150
|
|
|
128
151
|
unless %*ENV<EXERCISM> {
|