trackler 2.0.8.16 → 2.0.8.17

Sign up to get free protection for your applications and to get access to all the features.
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
  }