trackler 2.0.8.16 → 2.0.8.17

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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/alphametics/canonical-data.json +100 -44
  3. data/common/exercises/anagram/canonical-data.json +3 -3
  4. data/common/exercises/beer-song/canonical-data.json +75 -47
  5. data/common/exercises/binary-search/canonical-data.json +86 -74
  6. data/common/exercises/bowling/canonical-data.json +1 -1
  7. data/common/exercises/bracket-push/canonical-data.json +15 -0
  8. data/common/exercises/circular-buffer/canonical-data.json +16 -1
  9. data/common/exercises/connect/canonical-data.json +19 -7
  10. data/common/exercises/custom-set/canonical-data.json +287 -246
  11. data/common/exercises/dominoes/canonical-data.json +125 -111
  12. data/common/exercises/flatten-array/canonical-data.json +35 -28
  13. data/common/exercises/food-chain/canonical-data.json +196 -182
  14. data/common/exercises/gigasecond/canonical-data.json +51 -41
  15. data/common/exercises/isogram/canonical-data.json +59 -38
  16. data/common/exercises/pangram/canonical-data.json +69 -47
  17. data/common/exercises/perfect-numbers/canonical-data.json +3 -3
  18. data/common/exercises/phone-number/canonical-data.json +74 -55
  19. data/common/exercises/sum-of-multiples/canonical-data.json +88 -62
  20. data/lib/trackler/version.rb +1 -1
  21. data/tracks/elixir/docs/INSTALLATION.md +2 -0
  22. data/tracks/elixir/docs/LEARNING.md +2 -0
  23. data/tracks/elixir/docs/RESOURCES.md +8 -0
  24. data/tracks/groovy/docs/ABOUT.md +1 -1
  25. data/tracks/groovy/docs/LEARNING.md +5 -4
  26. data/tracks/groovy/docs/RESOURCES.md +8 -1
  27. data/tracks/rust/exercises/hello-world/GETTING_STARTED.md +29 -97
  28. metadata +1 -1
@@ -1,113 +1,127 @@
1
1
  {
2
- "#": [
3
- "Inputs are given as lists of two-element lists.",
4
- "Feel free to convert the input to a sensible type in the specific language",
5
- "For example, if the target language has 2-tuples, that is a good candidate.",
6
- "",
7
- "There are two levels of this exercise that can be implemented and/or tested:",
8
- "",
9
- "1: Given a list of dominoes, determine whether it can be made into a chain.",
10
- "Under this scheme, the submitted code only needs to return a boolean.",
11
- "The test code only needs to check that that boolean value matches up.",
12
- "",
13
- "2: Given a list of dominoes, determine one possible chain, if one exists, or else conclude that none can be made.",
14
- "Under this scheme, the submitted code needs to either return a chain, or signal that none exists.",
15
- "Different languages may do this differently:",
16
- "return Option<Vector<Domino>>, return ([]Domino, error), raise exception, etc.",
17
- "The test code needs to check that the returned chain is correct (see below).",
18
- "",
19
- "It's infeasible to list every single possible result chain in this file.",
20
- "That's because for even a simple list [(1, 2), (2, 3), (3, 1)],",
21
- "the possible chains are that order, any rotation of that order,",
22
- "and any rotation of that order with all dominoes reversed.",
23
- "",
24
- "For this reason, this JSON file will only list whether a chain is possible.",
25
- "Tracks wishing to verify correct results of the second level must separately perform this verification.",
26
- "",
27
- "The properties to verify are:",
28
- "1. The submitted code claims there is a chain if and only if there actually is one.",
29
- "2. The number of dominoes in the output equals the number of dominoes in the input.",
30
- "3a. For each adjacent pair of dominoes ... (a, b), (c, d) ...: b is equal to c.",
31
- "3b. For the dominoes on the ends (a, b) ... (c, d): a is equal to d.",
32
- "4. Every domino appears in the output an equal number of times as the number of times it appears in the input.",
33
- "(in other words, the dominoes in the output are the same dominoes as the ones in the input)",
34
- "",
35
- "Feel free to examine the Rust track for ideas on implementing the second level verification."
36
- ],
37
- "cases": [
38
- {
39
- "description": "empty input = empty output",
40
- "input": [],
41
- "can_chain": true
42
- },
43
- {
44
- "description": "singleton input = singleton output",
45
- "input": [[1, 1]],
46
- "can_chain": true
47
- },
48
- {
49
- "description": "singleton that can't be chained",
50
- "input": [[1, 2]],
51
- "can_chain": false
52
- },
53
- {
54
- "description": "three elements",
55
- "input": [[1, 2], [3, 1], [2, 3]],
56
- "can_chain": true
57
- },
58
- {
59
- "description": "can reverse dominoes",
60
- "input": [[1, 2], [1, 3], [2, 3]],
61
- "can_chain": true
62
- },
63
- {
64
- "description": "can't be chained",
65
- "input": [[1, 2], [4, 1], [2, 3]],
66
- "can_chain": false
67
- },
68
- {
69
- "description": "disconnected - simple",
70
- "#": [
71
- "This meets the requirement of being possibly-Euclidean.",
72
- "All vertices have even degree.",
73
- "Nevertheless, there is no chain here, as there's no way to get from 1 to 2.",
74
- "This test (and the two following) prevent solutions from using the even-degree test as the sole criterion,",
75
- "as that is not a sufficient condition."
76
- ],
77
- "input": [[1, 1], [2, 2]],
78
- "can_chain": false
79
- },
80
- {
81
- "description": "disconnected - double loop",
82
- "input": [[1, 2], [2, 1], [3, 4], [4, 3]],
83
- "can_chain": false
84
- },
85
- {
86
- "description": "disconnected - single isolated",
87
- "input": [[1, 2], [2, 3], [3, 1], [4, 4]],
88
- "can_chain": false
89
- },
90
- {
91
- "description": "need backtrack",
92
- "#": [
93
- "Some solutions may make a chain out of (1, 2), (2, 3), (3, 1)",
94
- "then decide that since there are no more dominoes containing a 1,",
95
- "there is no chain possible.",
96
- "There is indeed a chain here, so this test checks for this line of reasoning.",
97
- "You need to place the (2, 4) after the (1, 2) rather than the (2, 3)."
98
- ],
99
- "input": [[1, 2], [2, 3], [3, 1], [2, 4], [2, 4]],
100
- "can_chain": true
101
- },
102
- {
103
- "description": "separate loops",
104
- "input": [[1, 2], [2, 3], [3, 1], [1, 1], [2, 2], [3, 3]],
105
- "can_chain": true
106
- },
107
- {
108
- "description": "ten elements",
109
- "input": [[1, 2], [5, 3], [3, 1], [1, 2], [2, 4], [1, 6], [2, 3], [3, 4], [5, 6]],
110
- "can_chain": true
111
- }
112
- ]
2
+ "exercise": "dominoes",
3
+ "version": "1.0.0",
4
+ "comments": [
5
+ "Inputs are given as lists of two-element lists.",
6
+ "Feel free to convert the input to a sensible type in the specific language",
7
+ "For example, if the target language has 2-tuples, that is a good candidate.",
8
+ "",
9
+ "There are two levels of this exercise that can be implemented and/or tested:",
10
+ "",
11
+ "1: Given a list of dominoes, determine whether it can be made into a chain.",
12
+ "Under this scheme, the submitted code only needs to return a boolean.",
13
+ "The test code only needs to check that that boolean value matches up.",
14
+ "",
15
+ "2: Given a list of dominoes, determine one possible chain, if one exists, or else conclude that none can be made.",
16
+ "Under this scheme, the submitted code needs to either return a chain, or signal that none exists.",
17
+ "Different languages may do this differently:",
18
+ "return Option<Vector<Domino>>, return ([]Domino, error), raise exception, etc.",
19
+ "The test code needs to check that the returned chain is correct (see below).",
20
+ "",
21
+ "It's infeasible to list every single possible result chain in this file.",
22
+ "That's because for even a simple list [(1, 2), (2, 3), (3, 1)],",
23
+ "the possible chains are that order, any rotation of that order,",
24
+ "and any rotation of that order with all dominoes reversed.",
25
+ "",
26
+ "For this reason, this JSON file will only list whether a chain is possible.",
27
+ "Tracks wishing to verify correct results of the second level must separately perform this verification.",
28
+ "",
29
+ "The properties to verify are:",
30
+ "1. The submitted code claims there is a chain if and only if there actually is one.",
31
+ "2. The number of dominoes in the output equals the number of dominoes in the input.",
32
+ "3a. For each adjacent pair of dominoes ... (a, b), (c, d) ...: b is equal to c.",
33
+ "3b. For the dominoes on the ends (a, b) ... (c, d): a is equal to d.",
34
+ "4. Every domino appears in the output an equal number of times as the number of times it appears in the input.",
35
+ "(in other words, the dominoes in the output are the same dominoes as the ones in the input)",
36
+ "",
37
+ "Feel free to examine the Rust track for ideas on implementing the second level verification."
38
+ ],
39
+ "cases": [
40
+ {
41
+ "description": "empty input = empty output",
42
+ "property": "canChain",
43
+ "input": [],
44
+ "can_chain": true
45
+ },
46
+ {
47
+ "description": "singleton input = singleton output",
48
+ "property": "canChain",
49
+ "input": [[1, 1]],
50
+ "can_chain": true
51
+ },
52
+ {
53
+ "description": "singleton that can't be chained",
54
+ "property": "canChain",
55
+ "input": [[1, 2]],
56
+ "can_chain": false
57
+ },
58
+ {
59
+ "description": "three elements",
60
+ "property": "canChain",
61
+ "input": [[1, 2], [3, 1], [2, 3]],
62
+ "can_chain": true
63
+ },
64
+ {
65
+ "description": "can reverse dominoes",
66
+ "property": "canChain",
67
+ "input": [[1, 2], [1, 3], [2, 3]],
68
+ "can_chain": true
69
+ },
70
+ {
71
+ "description": "can't be chained",
72
+ "property": "canChain",
73
+ "input": [[1, 2], [4, 1], [2, 3]],
74
+ "can_chain": false
75
+ },
76
+ {
77
+ "description": "disconnected - simple",
78
+ "comments": [
79
+ "This meets the requirement of being possibly-Euclidean.",
80
+ "All vertices have even degree.",
81
+ "Nevertheless, there is no chain here, as there's no way to get from 1 to 2.",
82
+ "This test (and the two following) prevent solutions from using the even-degree test as the sole criterion,",
83
+ "as that is not a sufficient condition."
84
+ ],
85
+ "property": "canChain",
86
+ "input": [[1, 1], [2, 2]],
87
+ "can_chain": false
88
+ },
89
+ {
90
+ "description": "disconnected - double loop",
91
+ "property": "canChain",
92
+ "input": [[1, 2], [2, 1], [3, 4], [4, 3]],
93
+ "can_chain": false
94
+ },
95
+ {
96
+ "description": "disconnected - single isolated",
97
+ "property": "canChain",
98
+ "input": [[1, 2], [2, 3], [3, 1], [4, 4]],
99
+ "can_chain": false
100
+ },
101
+ {
102
+ "description": "need backtrack",
103
+ "comments": [
104
+ "Some solutions may make a chain out of (1, 2), (2, 3), (3, 1)",
105
+ "then decide that since there are no more dominoes containing a 1,",
106
+ "there is no chain possible.",
107
+ "There is indeed a chain here, so this test checks for this line of reasoning.",
108
+ "You need to place the (2, 4) after the (1, 2) rather than the (2, 3)."
109
+ ],
110
+ "property": "canChain",
111
+ "input": [[1, 2], [2, 3], [3, 1], [2, 4], [2, 4]],
112
+ "can_chain": true
113
+ },
114
+ {
115
+ "description": "separate loops",
116
+ "property": "canChain",
117
+ "input": [[1, 2], [2, 3], [3, 1], [1, 1], [2, 2], [3, 3]],
118
+ "can_chain": true
119
+ },
120
+ {
121
+ "description": "ten elements",
122
+ "property": "canChain",
123
+ "input": [[1, 2], [5, 3], [3, 1], [1, 2], [2, 4], [1, 6], [2, 3], [3, 4], [5, 6]],
124
+ "can_chain": true
125
+ }
126
+ ]
113
127
  }
@@ -1,29 +1,36 @@
1
1
  {
2
- "cases": [
3
- {
4
- "description": "flattens array with just integers present",
5
- "input": [1,[2,3,4,5,6,7],8],
6
- "expected": [1,2,3,4,5,6,7,8]
7
- },
8
- {
9
- "description": "5 level nesting",
10
- "input": [0, 2, [[2, 3], 8, 100, 4,[[[50]]]], -2],
11
- "expected":[0, 2, 2, 3, 8, 100, 4, 50, -2]
12
- },
13
- {
14
- "description": "6 level nesting",
15
- "input": [1,[2,[[3]],[4,[[5]]],6,7],8],
16
- "expected":[1,2,3,4,5,6,7,8]
17
- },
18
- {
19
- "description": "6 level nest list with null values",
20
- "input": [0, 2, [[2, 3], 8, [[100]], null, [[null]]], -2],
21
- "expected":[0,2,2,3,8,100,-2]
22
- },
23
- {
24
- "description": "all values in nested list are null",
25
- "input": [null,[[[null]]],null,null,[[null,null],null],null],
26
- "expected":[]
27
- }
28
- ]
29
- }
2
+ "exercise": "flatten-array",
3
+ "version": "1.0.0",
4
+ "cases": [
5
+ {
6
+ "description": "flattens array with just integers present",
7
+ "property": "flatten",
8
+ "input": [1, [2, 3, 4, 5, 6, 7], 8],
9
+ "expected": [1, 2, 3, 4, 5, 6, 7, 8]
10
+ },
11
+ {
12
+ "description": "5 level nesting",
13
+ "property": "flatten",
14
+ "input": [0, 2, [[2, 3], 8, 100, 4, [[[50]]]], -2],
15
+ "expected": [0, 2, 2, 3, 8, 100, 4, 50, -2]
16
+ },
17
+ {
18
+ "description": "6 level nesting",
19
+ "property": "flatten",
20
+ "input": [1, [2, [[3]], [4, [[5]]], 6, 7], 8],
21
+ "expected": [1, 2, 3, 4, 5, 6, 7, 8]
22
+ },
23
+ {
24
+ "description": "6 level nest list with null values",
25
+ "property": "flatten",
26
+ "input": [0, 2, [[2, 3], 8, [[100]], null, [[null]]], -2],
27
+ "expected": [0, 2, 2, 3, 8, 100, -2]
28
+ },
29
+ {
30
+ "description": "all values in nested list are null",
31
+ "property": "flatten",
32
+ "input": [null, [[[null]]], null, null, [[null, null], null], null],
33
+ "expected": []
34
+ }
35
+ ]
36
+ }
@@ -1,185 +1,199 @@
1
1
  {
2
- "#": [
3
- "JSON doesn't allow for multi-line strings, so all verses are presented ",
4
- "here as arrays of strings. It's up to the test generator to join the ",
5
- "lines together with line breaks.",
6
- "Some languages test for the verse() method, which takes a start verse ",
7
- "and optional end verse, but other languages have only tested for the full poem.",
8
- "For those languages in the latter category, you may wish to only ",
9
- "implement the full song test and leave the rest alone, ignoring the start ",
10
- "and end verse fields."
11
- ],
12
- "verse": {
13
- "description": "Return specified verse or series of verses",
14
- "cases": [
15
- {
16
- "description": "fly",
17
- "start verse": 1,
18
- "expected": [
19
- "I know an old lady who swallowed a fly.",
20
- "I don't know why she swallowed the fly. Perhaps she'll die."
21
- ]
22
- },
23
- {
24
- "description": "spider",
25
- "start verse": 2,
26
- "expected": [
27
- "I know an old lady who swallowed a spider.",
28
- "It wriggled and jiggled and tickled inside her.",
29
- "She swallowed the spider to catch the fly.",
30
- "I don't know why she swallowed the fly. Perhaps she'll die."
31
- ]
32
- },
33
- {
34
- "description": "bird",
35
- "start verse": 3,
36
- "expected": [
37
- "I know an old lady who swallowed a bird.",
38
- "How absurd to swallow a bird!",
39
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
40
- "She swallowed the spider to catch the fly.",
41
- "I don't know why she swallowed the fly. Perhaps she'll die."
42
- ]
43
- },
44
- {
45
- "description": "cat",
46
- "start verse": 4,
47
- "expected": [
48
- "I know an old lady who swallowed a cat.",
49
- "Imagine that, to swallow a cat!",
50
- "She swallowed the cat to catch the bird.",
51
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
52
- "She swallowed the spider to catch the fly.",
53
- "I don't know why she swallowed the fly. Perhaps she'll die."
54
- ]
55
- },
56
- {
57
- "description": "dog",
58
- "start verse": 5,
59
- "expected": [
60
- "I know an old lady who swallowed a dog.",
61
- "What a hog, to swallow a dog!",
62
- "She swallowed the dog to catch the cat.",
63
- "She swallowed the cat to catch the bird.",
64
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
65
- "She swallowed the spider to catch the fly.",
66
- "I don't know why she swallowed the fly. Perhaps she'll die."
67
- ]
68
- },
69
- {
70
- "description": "goat",
71
- "start verse": 6,
72
- "expected": [
73
- "I know an old lady who swallowed a goat.",
74
- "Just opened her throat and swallowed a goat!",
75
- "She swallowed the goat to catch the dog.",
76
- "She swallowed the dog to catch the cat.",
77
- "She swallowed the cat to catch the bird.",
78
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
79
- "She swallowed the spider to catch the fly.",
80
- "I don't know why she swallowed the fly. Perhaps she'll die."
81
- ]
82
- },
83
- {
84
- "description": "cow",
85
- "start verse": 7,
86
- "expected": [
87
- "I know an old lady who swallowed a cow.",
88
- "I don't know how she swallowed a cow!",
89
- "She swallowed the cow to catch the goat.",
90
- "She swallowed the goat to catch the dog.",
91
- "She swallowed the dog to catch the cat.",
92
- "She swallowed the cat to catch the bird.",
93
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
94
- "She swallowed the spider to catch the fly.",
95
- "I don't know why she swallowed the fly. Perhaps she'll die."
96
- ]
97
- },
98
- {
99
- "description": "horse",
100
- "start verse": 8,
101
- "expected": [
102
- "I know an old lady who swallowed a horse.",
103
- "She's dead, of course!"
104
- ]
105
- },
106
- {
107
- "description": "multiple verses",
108
- "start verse": 1,
109
- "end verse": 3,
110
- "expected": [
111
- "I know an old lady who swallowed a fly.",
112
- "I don't know why she swallowed the fly. Perhaps she'll die.",
113
- "",
114
- "I know an old lady who swallowed a spider.",
115
- "It wriggled and jiggled and tickled inside her.",
116
- "She swallowed the spider to catch the fly.",
117
- "I don't know why she swallowed the fly. Perhaps she'll die.",
118
- "",
119
- "I know an old lady who swallowed a bird.",
120
- "How absurd to swallow a bird!",
121
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
122
- "She swallowed the spider to catch the fly.",
123
- "I don't know why she swallowed the fly. Perhaps she'll die."
124
- ]
125
- },
126
- {
127
- "description": "full song",
128
- "start verse": 1,
129
- "end verse": 8,
130
- "expected": [
131
- "I know an old lady who swallowed a fly.",
132
- "I don't know why she swallowed the fly. Perhaps she'll die.",
133
- "",
134
- "I know an old lady who swallowed a spider.",
135
- "It wriggled and jiggled and tickled inside her.",
136
- "She swallowed the spider to catch the fly.",
137
- "I don't know why she swallowed the fly. Perhaps she'll die.",
138
- "",
139
- "I know an old lady who swallowed a bird.",
140
- "How absurd to swallow a bird!",
141
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
142
- "She swallowed the spider to catch the fly.",
143
- "I don't know why she swallowed the fly. Perhaps she'll die.",
144
- "",
145
- "I know an old lady who swallowed a cat.",
146
- "Imagine that, to swallow a cat!",
147
- "She swallowed the cat to catch the bird.",
148
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
149
- "She swallowed the spider to catch the fly.",
150
- "I don't know why she swallowed the fly. Perhaps she'll die.",
151
- "",
152
- "I know an old lady who swallowed a dog.",
153
- "What a hog, to swallow a dog!",
154
- "She swallowed the dog to catch the cat.",
155
- "She swallowed the cat to catch the bird.",
156
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
157
- "She swallowed the spider to catch the fly.",
158
- "I don't know why she swallowed the fly. Perhaps she'll die.",
159
- "",
160
- "I know an old lady who swallowed a goat.",
161
- "Just opened her throat and swallowed a goat!",
162
- "She swallowed the goat to catch the dog.",
163
- "She swallowed the dog to catch the cat.",
164
- "She swallowed the cat to catch the bird.",
165
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
166
- "She swallowed the spider to catch the fly.",
167
- "I don't know why she swallowed the fly. Perhaps she'll die.",
168
- "",
169
- "I know an old lady who swallowed a cow.",
170
- "I don't know how she swallowed a cow!",
171
- "She swallowed the cow to catch the goat.",
172
- "She swallowed the goat to catch the dog.",
173
- "She swallowed the dog to catch the cat.",
174
- "She swallowed the cat to catch the bird.",
175
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
176
- "She swallowed the spider to catch the fly.",
177
- "I don't know why she swallowed the fly. Perhaps she'll die.",
178
- "",
179
- "I know an old lady who swallowed a horse.",
180
- "She's dead, of course!"
181
- ]
182
- }
183
- ]
2
+ "exercise": "food-chain",
3
+ "version": "1.0.0",
4
+ "comments": [
5
+ "JSON doesn't allow for multi-line strings, so all verses are presented ",
6
+ "here as arrays of strings. It's up to the test generator to join the ",
7
+ "lines together with line breaks.",
8
+ "Some languages test for the verse() method, which takes a start verse ",
9
+ "and optional end verse, but other languages have only tested for the full poem.",
10
+ "For those languages in the latter category, you may wish to only ",
11
+ "implement the full song test and leave the rest alone, ignoring the start ",
12
+ "and end verse fields."
13
+ ],
14
+ "cases": [
15
+ {
16
+ "description": "Return specified verse or series of verses",
17
+ "cases": [
18
+ {
19
+ "description": "fly",
20
+ "property": "verse",
21
+ "start verse": 1,
22
+ "expected": [
23
+ "I know an old lady who swallowed a fly.",
24
+ "I don't know why she swallowed the fly. Perhaps she'll die."
25
+ ]
26
+ },
27
+ {
28
+ "description": "spider",
29
+ "property": "verse",
30
+ "start verse": 2,
31
+ "expected": [
32
+ "I know an old lady who swallowed a spider.",
33
+ "It wriggled and jiggled and tickled inside her.",
34
+ "She swallowed the spider to catch the fly.",
35
+ "I don't know why she swallowed the fly. Perhaps she'll die."
36
+ ]
37
+ },
38
+ {
39
+ "description": "bird",
40
+ "property": "verse",
41
+ "start verse": 3,
42
+ "expected": [
43
+ "I know an old lady who swallowed a bird.",
44
+ "How absurd to swallow a bird!",
45
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
46
+ "She swallowed the spider to catch the fly.",
47
+ "I don't know why she swallowed the fly. Perhaps she'll die."
48
+ ]
49
+ },
50
+ {
51
+ "description": "cat",
52
+ "property": "verse",
53
+ "start verse": 4,
54
+ "expected": [
55
+ "I know an old lady who swallowed a cat.",
56
+ "Imagine that, to swallow a cat!",
57
+ "She swallowed the cat to catch the bird.",
58
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
59
+ "She swallowed the spider to catch the fly.",
60
+ "I don't know why she swallowed the fly. Perhaps she'll die."
61
+ ]
62
+ },
63
+ {
64
+ "description": "dog",
65
+ "property": "verse",
66
+ "start verse": 5,
67
+ "expected": [
68
+ "I know an old lady who swallowed a dog.",
69
+ "What a hog, to swallow a dog!",
70
+ "She swallowed the dog to catch the cat.",
71
+ "She swallowed the cat to catch the bird.",
72
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
73
+ "She swallowed the spider to catch the fly.",
74
+ "I don't know why she swallowed the fly. Perhaps she'll die."
75
+ ]
76
+ },
77
+ {
78
+ "description": "goat",
79
+ "property": "verse",
80
+ "start verse": 6,
81
+ "expected": [
82
+ "I know an old lady who swallowed a goat.",
83
+ "Just opened her throat and swallowed a goat!",
84
+ "She swallowed the goat to catch the dog.",
85
+ "She swallowed the dog to catch the cat.",
86
+ "She swallowed the cat to catch the bird.",
87
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
88
+ "She swallowed the spider to catch the fly.",
89
+ "I don't know why she swallowed the fly. Perhaps she'll die."
90
+ ]
91
+ },
92
+ {
93
+ "description": "cow",
94
+ "property": "verse",
95
+ "start verse": 7,
96
+ "expected": [
97
+ "I know an old lady who swallowed a cow.",
98
+ "I don't know how she swallowed a cow!",
99
+ "She swallowed the cow to catch the goat.",
100
+ "She swallowed the goat to catch the dog.",
101
+ "She swallowed the dog to catch the cat.",
102
+ "She swallowed the cat to catch the bird.",
103
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
104
+ "She swallowed the spider to catch the fly.",
105
+ "I don't know why she swallowed the fly. Perhaps she'll die."
106
+ ]
107
+ },
108
+ {
109
+ "description": "horse",
110
+ "property": "verse",
111
+ "start verse": 8,
112
+ "expected": [
113
+ "I know an old lady who swallowed a horse.",
114
+ "She's dead, of course!"
115
+ ]
116
+ },
117
+ {
118
+ "description": "multiple verses",
119
+ "property": "verse",
120
+ "start verse": 1,
121
+ "end verse": 3,
122
+ "expected": [
123
+ "I know an old lady who swallowed a fly.",
124
+ "I don't know why she swallowed the fly. Perhaps she'll die.",
125
+ "",
126
+ "I know an old lady who swallowed a spider.",
127
+ "It wriggled and jiggled and tickled inside her.",
128
+ "She swallowed the spider to catch the fly.",
129
+ "I don't know why she swallowed the fly. Perhaps she'll die.",
130
+ "",
131
+ "I know an old lady who swallowed a bird.",
132
+ "How absurd to swallow a bird!",
133
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
134
+ "She swallowed the spider to catch the fly.",
135
+ "I don't know why she swallowed the fly. Perhaps she'll die."
136
+ ]
137
+ },
138
+ {
139
+ "description": "full song",
140
+ "property": "verse",
141
+ "start verse": 1,
142
+ "end verse": 8,
143
+ "expected": [
144
+ "I know an old lady who swallowed a fly.",
145
+ "I don't know why she swallowed the fly. Perhaps she'll die.",
146
+ "",
147
+ "I know an old lady who swallowed a spider.",
148
+ "It wriggled and jiggled and tickled inside her.",
149
+ "She swallowed the spider to catch the fly.",
150
+ "I don't know why she swallowed the fly. Perhaps she'll die.",
151
+ "",
152
+ "I know an old lady who swallowed a bird.",
153
+ "How absurd to swallow a bird!",
154
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
155
+ "She swallowed the spider to catch the fly.",
156
+ "I don't know why she swallowed the fly. Perhaps she'll die.",
157
+ "",
158
+ "I know an old lady who swallowed a cat.",
159
+ "Imagine that, to swallow a cat!",
160
+ "She swallowed the cat to catch the bird.",
161
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
162
+ "She swallowed the spider to catch the fly.",
163
+ "I don't know why she swallowed the fly. Perhaps she'll die.",
164
+ "",
165
+ "I know an old lady who swallowed a dog.",
166
+ "What a hog, to swallow a dog!",
167
+ "She swallowed the dog to catch the cat.",
168
+ "She swallowed the cat to catch the bird.",
169
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
170
+ "She swallowed the spider to catch the fly.",
171
+ "I don't know why she swallowed the fly. Perhaps she'll die.",
172
+ "",
173
+ "I know an old lady who swallowed a goat.",
174
+ "Just opened her throat and swallowed a goat!",
175
+ "She swallowed the goat to catch the dog.",
176
+ "She swallowed the dog to catch the cat.",
177
+ "She swallowed the cat to catch the bird.",
178
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
179
+ "She swallowed the spider to catch the fly.",
180
+ "I don't know why she swallowed the fly. Perhaps she'll die.",
181
+ "",
182
+ "I know an old lady who swallowed a cow.",
183
+ "I don't know how she swallowed a cow!",
184
+ "She swallowed the cow to catch the goat.",
185
+ "She swallowed the goat to catch the dog.",
186
+ "She swallowed the dog to catch the cat.",
187
+ "She swallowed the cat to catch the bird.",
188
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.",
189
+ "She swallowed the spider to catch the fly.",
190
+ "I don't know why she swallowed the fly. Perhaps she'll die.",
191
+ "",
192
+ "I know an old lady who swallowed a horse.",
193
+ "She's dead, of course!"
194
+ ]
195
+ }
196
+ ]
184
197
  }
198
+ ]
185
199
  }