trackler 2.2.1.86 → 2.2.1.87

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/reverse-string/metadata.yml +0 -1
  4. data/tracks/bash/CONTRIBUTING.md +129 -28
  5. data/tracks/bash/config/exercise_readme.go.tmpl +10 -4
  6. data/tracks/bash/exercises/acronym/README.md +8 -11
  7. data/tracks/bash/exercises/acronym/{acronym_tests.sh → acronym_test.sh} +0 -0
  8. data/tracks/bash/exercises/anagram/README.md +6 -1
  9. data/tracks/bash/exercises/anagram/anagram_test.sh +1 -1
  10. data/tracks/bash/exercises/armstrong-numbers/README.md +10 -2
  11. data/tracks/bash/exercises/atbash-cipher/README.md +6 -6
  12. data/tracks/bash/exercises/bob/README.md +8 -1
  13. data/tracks/bash/exercises/collatz-conjecture/README.md +11 -2
  14. data/tracks/bash/exercises/collatz-conjecture/{collatz_test.sh → collatz_conjecture_test.sh} +6 -6
  15. data/tracks/bash/exercises/difference-of-squares/README.md +6 -1
  16. data/tracks/bash/exercises/error-handling/README.md +13 -5
  17. data/tracks/bash/exercises/error-handling/error_handling_test.sh +18 -22
  18. data/tracks/bash/exercises/error-handling/example.sh +7 -6
  19. data/tracks/bash/exercises/gigasecond/.meta/hints.md +0 -5
  20. data/tracks/bash/exercises/gigasecond/README.md +36 -1
  21. data/tracks/bash/exercises/grains/README.md +10 -2
  22. data/tracks/bash/exercises/hamming/README.md +6 -1
  23. data/tracks/bash/exercises/hello-world/README.md +7 -2
  24. data/tracks/bash/exercises/leap/README.md +7 -2
  25. data/tracks/bash/exercises/luhn/README.md +7 -2
  26. data/tracks/bash/exercises/nucleotide-count/README.md +13 -22
  27. data/tracks/bash/exercises/pangram/README.md +7 -2
  28. data/tracks/bash/exercises/phone-number/README.md +10 -4
  29. data/tracks/bash/exercises/raindrops/README.md +6 -1
  30. data/tracks/bash/exercises/reverse-string/README.md +11 -2
  31. data/tracks/bash/exercises/rna-transcription/README.md +7 -2
  32. data/tracks/bash/exercises/roman-numerals/README.md +11 -2
  33. data/tracks/bash/exercises/triangle/README.md +5 -4
  34. data/tracks/bash/exercises/two-fer/README.md +7 -9
  35. data/tracks/bash/exercises/word-count/README.md +6 -2
  36. data/tracks/bash/exercises/word-count/example.sh +22 -13
  37. data/tracks/bash/scripts/canonical_data_check.sh +112 -0
  38. data/tracks/c/exercises/acronym/src/{example.h → acronym.h} +0 -0
  39. data/tracks/c/exercises/gigasecond/.meta/hints.md +124 -0
  40. data/tracks/c/exercises/gigasecond/README.md +126 -0
  41. data/tracks/c/exercises/isogram/src/{example.h → isogram.h} +0 -0
  42. data/tracks/c/exercises/meetup/.meta/hints.md +124 -0
  43. data/tracks/c/exercises/meetup/README.md +142 -12
  44. data/tracks/c/exercises/pangram/src/{example.h → pangram.h} +0 -0
  45. data/tracks/c/exercises/space-age/.meta/hints.md +124 -0
  46. data/tracks/c/exercises/space-age/README.md +127 -2
  47. data/tracks/elisp/bin/test-examples +11 -14
  48. data/tracks/elisp/config.json +9 -1
  49. data/tracks/elisp/exercises/acronym/README.md +13 -0
  50. data/tracks/elisp/exercises/acronym/acronym-test.el +28 -0
  51. data/tracks/elisp/exercises/acronym/acronym.el +11 -0
  52. data/tracks/elisp/exercises/acronym/example.el +14 -0
  53. data/tracks/elisp/exercises/bob/example.el +1 -3
  54. data/tracks/elisp/exercises/hamming/README.md +2 -0
  55. data/tracks/elisp/exercises/hamming/hamming-test.el +35 -12
  56. data/tracks/elisp/exercises/hamming/hamming.el +0 -3
  57. data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +206 -132
  58. data/tracks/fsharp/exercises/custom-set/Example.fs +2 -0
  59. data/tracks/fsharp/generators/Generators.fs +61 -0
  60. data/tracks/go/config.json +25 -2
  61. data/tracks/go/exercises/acronym/acronym_test.go +8 -0
  62. data/tracks/go/exercises/alphametics/.meta/gen.go +72 -0
  63. data/tracks/go/exercises/alphametics/.meta/hints.md +38 -0
  64. data/tracks/go/exercises/alphametics/README.md +93 -0
  65. data/tracks/go/exercises/alphametics/alphametics_test.go +33 -0
  66. data/tracks/go/exercises/alphametics/cases_test.go +59 -0
  67. data/tracks/go/exercises/alphametics/example.go +212 -0
  68. data/tracks/go/exercises/atbash-cipher/.meta/gen.go +6 -4
  69. data/tracks/go/exercises/atbash-cipher/cases_test.go +2 -2
  70. data/tracks/go/exercises/change/.meta/gen.go +7 -5
  71. data/tracks/go/exercises/change/cases_test.go +2 -2
  72. data/tracks/go/exercises/collatz-conjecture/.meta/gen.go +5 -3
  73. data/tracks/go/exercises/collatz-conjecture/cases_test.go +2 -2
  74. data/tracks/go/exercises/connect/.meta/gen.go +5 -3
  75. data/tracks/go/exercises/connect/cases_test.go +2 -2
  76. data/tracks/go/exercises/flatten-array/.meta/gen.go +5 -3
  77. data/tracks/go/exercises/flatten-array/cases_test.go +2 -2
  78. data/tracks/go/exercises/meetup/.meta/gen.go +19 -8
  79. data/tracks/go/exercises/meetup/cases_test.go +2 -2
  80. data/tracks/go/exercises/simple-linked-list/README.md +47 -0
  81. data/tracks/go/exercises/simple-linked-list/example.go +74 -0
  82. data/tracks/go/exercises/simple-linked-list/linked_list_test.go +210 -0
  83. data/tracks/idris/config.json +2 -2
  84. data/tracks/java/exercises/all-your-base/.meta/src/reference/java/BaseConverter.java +1 -5
  85. data/tracks/java/exercises/all-your-base/.meta/version +1 -1
  86. data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +34 -10
  87. data/tracks/java/exercises/bob/README.md +2 -0
  88. data/tracks/java/exercises/kindergarten-garden/.meta/version +1 -0
  89. data/tracks/java/exercises/kindergarten-garden/src/test/java/KindergartenGardenTest.java +0 -55
  90. data/tracks/java/exercises/meetup/.meta/version +1 -0
  91. data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +32 -0
  92. data/tracks/java/exercises/parallel-letter-frequency/README.md +1 -0
  93. data/tracks/java/exercises/proverb/README.md +16 -10
  94. data/tracks/java/exercises/rail-fence-cipher/README.md +5 -6
  95. data/tracks/java/exercises/two-fer/README.md +1 -1
  96. data/tracks/java/exercises/word-search/.meta/version +1 -1
  97. data/tracks/java/exercises/word-search/src/test/java/WordSearcherTest.java +240 -2
  98. data/tracks/javascript/.eslintignore +0 -1
  99. data/tracks/javascript/exercises/palindrome-products/example.js +3 -3
  100. data/tracks/kotlin/docs/INSTALLATION.md +77 -68
  101. data/tracks/kotlin/docs/TESTS.md +41 -39
  102. data/tracks/perl6/exercises/acronym/acronym.t +20 -8
  103. data/tracks/perl6/exercises/acronym/example.yaml +1 -1
  104. data/tracks/perl6/exercises/all-your-base/all-your-base.t +108 -66
  105. data/tracks/perl6/exercises/all-your-base/example.yaml +2 -2
  106. data/tracks/perl6/exercises/allergies/allergies.t +39 -15
  107. data/tracks/perl6/exercises/allergies/example.yaml +2 -2
  108. data/tracks/perl6/exercises/anagram/anagram.t +73 -40
  109. data/tracks/perl6/exercises/anagram/example.yaml +1 -1
  110. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +38 -15
  111. data/tracks/perl6/exercises/atbash-cipher/example.yaml +1 -1
  112. data/tracks/perl6/exercises/bob/bob.t +77 -27
  113. data/tracks/perl6/exercises/bob/example.yaml +1 -1
  114. data/tracks/perl6/exercises/flatten-array/example.yaml +1 -1
  115. data/tracks/perl6/exercises/flatten-array/flatten-array.t +20 -8
  116. data/tracks/perl6/exercises/luhn/example.yaml +1 -1
  117. data/tracks/perl6/exercises/luhn/luhn.t +42 -16
  118. data/tracks/perl6/exercises/roman-numerals/README.md +68 -0
  119. data/tracks/php/exercises/gigasecond/gigasecond_test.php +1 -1
  120. data/tracks/python/docs/ABOUT.md +2 -2
  121. metadata +27 -10
  122. data/tracks/bash/docs/EXERCISE_README_INSERT.md +0 -3
  123. data/tracks/bash/exercises/word-count/example.awk +0 -12
  124. 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 => .<input_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.0.0",
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
- "score": 0,
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
- "score": 1,
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
- "score": 5,
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
- "score": 0,
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
- "score": 1,
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
- "score": 2,
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
- "score": 8,
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
- "score": 3,
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
- "score": 5,
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
- "score": 248,
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
- "score": 255,
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
- "score": 509,
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.1",
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
- "subject": "diaper",
44
- "candidates": ["hello", "world", "zombies", "pants"],
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
- "subject": "ant",
51
- "candidates": ["tan", "stand", "at"],
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
- "subject": "galea",
58
- "candidates": ["eagle"],
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
- "subject": "master",
65
- "candidates": ["stream", "pigeon", "maters"],
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
- "subject": "good",
72
- "candidates": ["dog", "goody"],
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
- "subject": "listen",
79
- "candidates": ["enlists", "google", "inlets", "banana"],
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
- "subject": "allergy",
86
- "candidates": [ "gallery",
87
- "ballerina",
88
- "regally",
89
- "clergy",
90
- "largely",
91
- "leading"
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
- "subject": "corn",
99
- "candidates": ["corn", "dark", "Corn", "rank", "CORN", "cron", "park"],
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
- "subject": "mass",
106
- "candidates": ["last"],
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
- "subject": "Orchestra",
113
- "candidates": ["cashregister", "Carthorse", "radishes"],
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
- "subject": "Orchestra",
120
- "candidates": ["cashregister", "carthorse", "radishes"],
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
- "subject": "orchestra",
127
- "candidates": ["cashregister", "Carthorse", "radishes"],
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
- "subject": "banana",
134
- "candidates": ["Banana"],
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
- "subject": "go",
141
- "candidates": ["go Go GO"],
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
- "subject": "tapper",
148
- "candidates": ["patter"],
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
- "subject": "BANANA",
155
- "candidates": ["Banana"],
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.0.0",
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
- "phrase": "yes",
46
+ "input": {
47
+ "phrase": "yes"
48
+ },
47
49
  "expected": "bvh"
48
50
  },
49
51
  {
50
52
  "description": "encode no",
51
53
  "property": "encode",
52
- "phrase": "no",
54
+ "input": {
55
+ "phrase": "no"
56
+ },
53
57
  "expected": "ml"
54
58
  },
55
59
  {
56
60
  "description": "encode OMG",
57
61
  "property": "encode",
58
- "phrase": "OMG",
62
+ "input": {
63
+ "phrase": "OMG"
64
+ },
59
65
  "expected": "lnt"
60
66
  },
61
67
  {
62
68
  "description": "encode spaces",
63
69
  "property": "encode",
64
- "phrase": "O M G",
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
- "phrase": "mindblowingly",
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
- "phrase": "Testing,1 2 3, testing.",
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
- "phrase": "Truth is fiction.",
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
- "phrase": "The quick brown fox jumps over the lazy dog.",
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
- "phrase": "vcvix rhn",
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
- "phrase": "zmlyh gzxov rhlug vmzhg vkkrm thglm v",
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
- "phrase": "gvhgr mt123 gvhgr mt",
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
- "phrase": "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt",
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> {