Skip to content

Commit 884384d

Browse files
authored
[tree-building] Add canonical data where there was none previously (#2643)
* [tree-building] Add a new canonical data file * Add a comment mentioning this is a refactoring exercise
1 parent 96781cb commit 884384d

1 file changed

Lines changed: 300 additions & 0 deletions

File tree

Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
{
2+
"exercise": "tree-building",
3+
"comments": [
4+
"Per the description, this is a refactoring exercise.",
5+
"The expectation is that the stub file has a poorly written but working implementation."
6+
],
7+
"cases": [
8+
{
9+
"uuid": "761790a3-4c27-461a-b4e9-8bce8ccee5a1",
10+
"description": "empty list",
11+
"property": "buildTree",
12+
"input": {
13+
"records": []
14+
},
15+
"expected": {}
16+
},
17+
{
18+
"uuid": "dcc89dc3-eb39-4f26-a3cd-964e607c95ff",
19+
"description": "single record",
20+
"property": "buildTree",
21+
"input": {
22+
"records": [{ "recordId": 0, "parentId": 0 }]
23+
},
24+
"expected": {
25+
"node": {
26+
"id": 0,
27+
"children": []
28+
}
29+
}
30+
},
31+
{
32+
"uuid": "dcdb80f0-e5da-43e1-8b8d-6f307be89c0e",
33+
"description": "three records in order",
34+
"property": "buildTree",
35+
"input": {
36+
"records": [
37+
{ "recordId": 0, "parentId": 0 },
38+
{ "recordId": 1, "parentId": 0 },
39+
{ "recordId": 2, "parentId": 0 }
40+
]
41+
},
42+
"expected": {
43+
"node": {
44+
"id": 0,
45+
"children": [
46+
{ "recordId": 1, "parentId": 0 },
47+
{ "recordId": 2, "parentId": 0 }
48+
]
49+
}
50+
}
51+
},
52+
{
53+
"uuid": "2ff5b8f8-d95e-401e-9359-233919488d22",
54+
"description": "three records in reverse order",
55+
"property": "buildTree",
56+
"input": {
57+
"records": [
58+
{ "recordId": 2, "parentId": 0 },
59+
{ "recordId": 1, "parentId": 0 },
60+
{ "recordId": 0, "parentId": 0 }
61+
]
62+
},
63+
"expected": {
64+
"node": {
65+
"id": 0,
66+
"children": [
67+
{ "recordId": 1, "parentId": 0 },
68+
{ "recordId": 2, "parentId": 0 }
69+
]
70+
}
71+
}
72+
},
73+
{
74+
"uuid": "de798d3b-8905-4446-a114-a0dd2476d945",
75+
"description": "more than two children",
76+
"property": "buildTree",
77+
"input": {
78+
"records": [
79+
{ "recordId": 0, "parentId": 0 },
80+
{ "recordId": 1, "parentId": 0 },
81+
{ "recordId": 2, "parentId": 0 },
82+
{ "recordId": 3, "parentId": 0 }
83+
]
84+
},
85+
"expected": {
86+
"node": {
87+
"id": 0,
88+
"children": [
89+
{ "recordId": 1, "parentId": 0 },
90+
{ "recordId": 2, "parentId": 0 },
91+
{ "recordId": 3, "parentId": 0 }
92+
]
93+
}
94+
}
95+
},
96+
{
97+
"uuid": "13dd9b3c-6137-415f-b6fe-5044c1dfbc50",
98+
"description": "binary tree",
99+
"property": "buildTree",
100+
"input": {
101+
"records": [
102+
{ "recordId": 5, "parentId": 1 },
103+
{ "recordId": 3, "parentId": 2 },
104+
{ "recordId": 2, "parentId": 0 },
105+
{ "recordId": 4, "parentId": 1 },
106+
{ "recordId": 1, "parentId": 0 },
107+
{ "recordId": 0, "parentId": 0 },
108+
{ "recordId": 6, "parentId": 2 }
109+
]
110+
},
111+
"expected": {
112+
"node": {
113+
"id": 0,
114+
"children": [
115+
{
116+
"recordId": 1,
117+
"children": [{ "recordId": 4 }, { "recordId": 5 }]
118+
},
119+
{
120+
"recordId": 2,
121+
"children": [{ "recordId": 3 }, { "recordId": 6 }]
122+
}
123+
]
124+
}
125+
}
126+
},
127+
{
128+
"uuid": "5cfd29dc-166b-47da-84ca-1c60b5ae5941",
129+
"description": "unbalanced tree",
130+
"property": "buildTree",
131+
"input": {
132+
"records": [
133+
{ "recordId": 5, "parentId": 2 },
134+
{ "recordId": 3, "parentId": 2 },
135+
{ "recordId": 2, "parentId": 0 },
136+
{ "recordId": 4, "parentId": 1 },
137+
{ "recordId": 1, "parentId": 0 },
138+
{ "recordId": 0, "parentId": 0 },
139+
{ "recordId": 6, "parentId": 2 }
140+
]
141+
},
142+
"expected": {
143+
"node": {
144+
"id": 0,
145+
"children": [
146+
{
147+
"recordId": 1,
148+
"children": [{ "recordId": 4 }]
149+
},
150+
{
151+
"recordId": 2,
152+
"children": [
153+
{ "recordId": 3 },
154+
{ "recordId": 5 },
155+
{ "recordId": 6 }
156+
]
157+
}
158+
]
159+
}
160+
}
161+
},
162+
{
163+
"uuid": "a05ddb5d-2d11-4948-88d3-b5f18a44ddce",
164+
"description": "one root node and has parent",
165+
"property": "buildTree",
166+
"input": {
167+
"records": [{ "recordId": 0, "parentId": 1 }]
168+
},
169+
"expected": {
170+
"error": "node parent_id should be smaller than its record_id"
171+
}
172+
},
173+
{
174+
"uuid": "9ed09df2-8fd6-4e37-aa37-e7753c057a1a",
175+
"description": "root node has parent",
176+
"property": "buildTree",
177+
"input": {
178+
"records": [
179+
{ "recordId": 0, "parentId": 1 },
180+
{ "recordId": 1, "parentId": 0 }
181+
]
182+
},
183+
"expected": {
184+
"error": "node parent_id should be smaller than its record_id"
185+
}
186+
},
187+
{
188+
"uuid": "8755a2c4-2c6b-4396-b155-b5bf4b6bc280",
189+
"description": "no root node",
190+
"property": "buildTree",
191+
"input": {
192+
"records": [
193+
{ "recordId": 1, "parentId": 0 },
194+
{ "recordId": 2, "parentId": 0 }
195+
]
196+
},
197+
"expected": {
198+
"error": "record id is invalid or out of order"
199+
}
200+
},
201+
{
202+
"uuid": "c6ef8f9a-4045-4949-a1e1-e0ae804e4af4",
203+
"description": "duplicate node",
204+
"property": "buildTree",
205+
"input": {
206+
"records": [
207+
{ "recordId": 0, "parentId": 0 },
208+
{ "recordId": 1, "parentId": 0 },
209+
{ "recordId": 1, "parentId": 0 }
210+
]
211+
},
212+
"expected": {
213+
"error": "record id is invalid or out of order"
214+
}
215+
},
216+
{
217+
"uuid": "7a7b77a6-3447-4905-b79c-d22bfe43f408",
218+
"description": "duplicate root",
219+
"property": "buildTree",
220+
"input": {
221+
"records": [
222+
{ "recordId": 0, "parentId": 0 },
223+
{ "recordId": 0, "parentId": 0 }
224+
]
225+
},
226+
"expected": {
227+
"error": "record id is invalid or out of order"
228+
}
229+
},
230+
{
231+
"uuid": "c6f51bd7-3608-4390-b446-dfd1bcbf3ddc",
232+
"description": "non-continuous",
233+
"property": "buildTree",
234+
"input": {
235+
"records": [
236+
{ "recordId": 2, "parentId": 0 },
237+
{ "recordId": 4, "parentId": 2 },
238+
{ "recordId": 1, "parentId": 0 },
239+
{ "recordId": 0, "parentId": 0 }
240+
]
241+
},
242+
"expected": {
243+
"error": "record id is invalid or out of order"
244+
}
245+
},
246+
{
247+
"uuid": "1f3d1b50-4494-4b22-b88a-68f32f7d321d",
248+
"description": "cycle directly",
249+
"property": "buildTree",
250+
"input": {
251+
"records": [
252+
{ "recordId": 5, "parentId": 2 },
253+
{ "recordId": 3, "parentId": 2 },
254+
{ "recordId": 2, "parentId": 2 },
255+
{ "recordId": 4, "parentId": 1 },
256+
{ "recordId": 1, "parentId": 0 },
257+
{ "recordId": 0, "parentId": 0 },
258+
{ "recordId": 6, "parentId": 3 }
259+
]
260+
},
261+
"expected": {
262+
"error": "record id is invalid or out of order"
263+
}
264+
},
265+
{
266+
"uuid": "ac568b50-3f9b-4cb4-b602-e0eb13de4269",
267+
"description": "cycle indirectly",
268+
"property": "buildTree",
269+
"input": {
270+
"records": [
271+
{ "recordId": 5, "parentId": 2 },
272+
{ "recordId": 3, "parentId": 2 },
273+
{ "recordId": 2, "parentId": 6 },
274+
{ "recordId": 4, "parentId": 1 },
275+
{ "recordId": 1, "parentId": 0 },
276+
{ "recordId": 0, "parentId": 0 },
277+
{ "recordId": 6, "parentId": 3 }
278+
]
279+
},
280+
"expected": {
281+
"error": "record id is invalid or out of order"
282+
}
283+
},
284+
{
285+
"uuid": "cf954b21-3cef-420c-8e72-d19547505e1f",
286+
"description": "higher id parent of lower id",
287+
"property": "buildTree",
288+
"input": {
289+
"records": [
290+
{ "recordId": 0, "parentId": 0 },
291+
{ "recordId": 2, "parentId": 0 },
292+
{ "recordId": 1, "parentId": 2 }
293+
]
294+
},
295+
"expected": {
296+
"error": "record id is invalid or out of order"
297+
}
298+
}
299+
]
300+
}

0 commit comments

Comments
 (0)