Finished
88 * @returns {number}
99 */
1010export function count(diagram) {
11 throw new Error('Remove this line and implement the function');
11 // Edge Case: Empty diagram
12 if (!diagram || diagram.length === 0) {
13 return 0;
14 }
15
16 // Edge Case: Diagram with empty strings
17 if (diagram[0].length === 0) {
18 return 0;
19 }
20
21 const rows = diagram.length;
22 const cols = diagram[0].length;
23 let rectangleCount = 0;
24
25 // Check all possible top-left corners
26 for (let r1 = 0; r1 < rows; r1++) {
27 for (let c1 = 0; c1 < cols; c1++) {
28 // Edge Case: Verify top-left is a corner (+)
29 if (diagram[r1][c1] !== '+') continue;
30
31 // Look for possible bottom-right corners
32 for (let r2 = r1 + 1; r2 < rows; r2++) {
33 for (let c2 = c1 + 1; c2 < cols; c2++) {
34 // Edge Case: Verify we have a potential rectangle with correct corners
35 if (c2 >= diagram[r1].length || diagram[r1][c2] !== '+' ||
36 c1 >= diagram[r2].length || diagram[r2][c1] !== '+' ||
37 c2 >= diagram[r2].length || diagram[r2][c2] !== '+') {
38 continue;
39 }
40
41 // Check horizontal edges
42 let validRectangle = true;
43
44 // Edge Case: Check top edge
45 for (let c = c1 + 1; c < c2; c++) {
46 if (c >= diagram[r1].length || diagram[r1][c] !== '-' && diagram[r1][c] !== '+') {
47 validRectangle = false;
48 break;
49 }
50 }
51 if (!validRectangle) continue;
52
53 // Edge Case: Check bottom edge
54 for (let c = c1 + 1; c < c2; c++) {
55 if (c >= diagram[r2].length || diagram[r2][c] !== '-' && diagram[r2][c] !== '+') {
56 validRectangle = false;
57 break;
58 }
59 }
60 if (!validRectangle) continue;
61
62 // Edge Case: Check left edge
63 for (let r = r1 + 1; r < r2; r++) {
64 if (c1 >= diagram[r].length || diagram[r][c1] !== '|' && diagram[r][c1] !== '+') {
65 validRectangle = false;
66 break;
67 }
68 }
69 if (!validRectangle) continue;
70
71 // Edge Case: Check right edge
72 for (let r = r1 + 1; r < r2; r++) {
73 if (c2 >= diagram[r].length || diagram[r][c2] !== '|' && diagram[r][c2] !== '+') {
74 validRectangle = false;
75 break;
76 }
77 }
78 if (!validRectangle) continue;
79
80 // If we get here, we found a valid rectangle
81 rectangleCount++;
82 }
83 }
84 }
85 }
86
87 return rectangleCount;
1288}
89// Handled Edge Cases: Empty diagram, Diagram with empty strings, Invalid corners, Missing edges, Non-rectangle shapes
Test NameStatus
no rows
Pass
no columns
Pass
no rectangles
Pass
one rectangle
Pass
two rectangles without shared parts
Pass
five rectangles with shared parts
Pass
rectangle of height 1 is counted
Pass
rectangle of width 1 is counted
Pass
1x1 square is counted
Pass
only complete rectangles are counted
Pass
rectangles can be of different sizes
Pass
corner is required for a rectangle to be complete
Pass
large input with many rectangles
Pass
rectangles must have four sides
Pass

© 2025 Ridges AI. Building the future of decentralized AI development.