From f4bbe4b4412e80edebfec0de9a37daa3ef2b9c95 Mon Sep 17 00:00:00 2001 From: Arun Date: Sun, 7 Sep 2025 12:48:36 +0530 Subject: [PATCH 1/9] chore: setup problem folder --- .../main.go | 6 ++++ .../main_test.go | 35 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/3000-maximum-area-of-longest-diagonal-rectangle/main.go create mode 100644 src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go new file mode 100644 index 0000000..6ee1d0d --- /dev/null +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go @@ -0,0 +1,6 @@ +package main + +func areaOfMaxDiagonal(dimensions [][]int) int { + // TODO: implement solution + panic("not implemented") +} diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go new file mode 100644 index 0000000..e3440f5 --- /dev/null +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go @@ -0,0 +1,35 @@ +package main + +import ( + "testing" +) + +func TestareaOfMaxDiagonal(t *testing.T) { + tests := []struct { + name string + // TODO: add test fields + want interface{} + }{ + { + name: "Example 1", + // TODO: add test case + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // TODO: implement test + // got := areaOfMaxDiagonal(...) + // if got != tt.want { + // t.Errorf("areaOfMaxDiagonal() = %v, want %v", got, tt.want) + // } + }) + } +} + +func BenchmarkareaOfMaxDiagonal(b *testing.B) { + // TODO: add benchmark inputs + for i := 0; i < b.N; i++ { + // areaOfMaxDiagonal(...) + } +} From e6f4aa841a9cd3bb6bc88034064767d146915aa9 Mon Sep 17 00:00:00 2001 From: Arun Date: Sun, 7 Sep 2025 13:18:52 +0530 Subject: [PATCH 2/9] feat: implement tests to find rectangle with longest diagonal and max area --- .../main_test.go | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go index e3440f5..ef25756 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go @@ -4,30 +4,35 @@ import ( "testing" ) -func TestareaOfMaxDiagonal(t *testing.T) { +func TestAreaOfMaxDiagonal(t *testing.T) { tests := []struct { - name string - // TODO: add test fields - want interface{} + name string + input [][]int + expected int }{ { - name: "Example 1", - // TODO: add test case + name: "first test case from leetcode", + input: [][]int{{9, 3}, {8, 6}}, + expected: 48, + }, + { + name: "second test case from leetcode", + input: [][]int{{3, 4}, {4, 3}}, + expected: 12, }, } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - // TODO: implement test - // got := areaOfMaxDiagonal(...) - // if got != tt.want { - // t.Errorf("areaOfMaxDiagonal() = %v, want %v", got, tt.want) - // } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + output := areaOfMaxDiagonal(test.input) + if output != test.expected { + t.Errorf("Expected %d, got %d", test.expected, output) + } }) } } -func BenchmarkareaOfMaxDiagonal(b *testing.B) { +func BenchmarkAreaOfMaxDiagonal(b *testing.B) { // TODO: add benchmark inputs for i := 0; i < b.N; i++ { // areaOfMaxDiagonal(...) From c538f1155173d62dfdd9786f80363b352f58518b Mon Sep 17 00:00:00 2001 From: Arun Date: Sun, 7 Sep 2025 14:26:50 +0530 Subject: [PATCH 3/9] feat: first attempt at the problem --- .../main.go | 21 +++++++++++++++++-- .../main_test.go | 5 +++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go index 6ee1d0d..8dcc061 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go @@ -1,6 +1,23 @@ package main +import "math" + func areaOfMaxDiagonal(dimensions [][]int) int { - // TODO: implement solution - panic("not implemented") + var area int + var maxArea int + var diagonal float64 + var maxDiagonal float64 + for i := range dimensions { + length := dimensions[i][0] + width := dimensions[i][1] + diagonal = math.Sqrt(float64(length)*float64(length) + float64(width)*float64(width)) + area = length * width + if diagonal > maxDiagonal { + maxDiagonal = diagonal + if area > maxArea { + maxArea = area + } + } + } + return maxArea } diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go index ef25756..478411b 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go @@ -20,6 +20,11 @@ func TestAreaOfMaxDiagonal(t *testing.T) { input: [][]int{{3, 4}, {4, 3}}, expected: 12, }, + { + name: "third test case from leetcode", + input: [][]int{{6, 5}, {8, 6}, {2, 10}, {8, 1}, {9, 2}, {3, 5}, {3, 5}}, + expected: 20, + }, } for _, test := range tests { From cabb8f5085dbc6eb4f0d4d8b5388d74a81363489 Mon Sep 17 00:00:00 2001 From: Arun Date: Sat, 20 Sep 2025 21:57:30 +0530 Subject: [PATCH 4/9] chore: rewrite test input format, and add fourth test case from leetcode that's currently failing --- .../main.go | 23 ++++++++++++------- .../main_test.go | 13 +++++++---- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go index 8dcc061..334ecf5 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go @@ -1,22 +1,29 @@ package main -import "math" +import ( + "encoding/json" + "log" + "math" +) -func areaOfMaxDiagonal(dimensions [][]int) int { +func areaOfMaxDiagonal(dimensions string) int { var area int var maxArea int var diagonal float64 var maxDiagonal float64 - for i := range dimensions { - length := dimensions[i][0] - width := dimensions[i][1] + var parsedDimensions [][]int + err := json.Unmarshal([]byte(dimensions), &parsedDimensions) + if err != nil { + log.Fatal(err.Error()) + } + for i := range parsedDimensions { + length := parsedDimensions[i][0] + width := parsedDimensions[i][1] diagonal = math.Sqrt(float64(length)*float64(length) + float64(width)*float64(width)) area = length * width if diagonal > maxDiagonal { maxDiagonal = diagonal - if area > maxArea { - maxArea = area - } + maxArea = area } } return maxArea diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go index 478411b..9683974 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go @@ -7,24 +7,29 @@ import ( func TestAreaOfMaxDiagonal(t *testing.T) { tests := []struct { name string - input [][]int + input string expected int }{ { name: "first test case from leetcode", - input: [][]int{{9, 3}, {8, 6}}, + input: "[[9,3],[8,6]]", expected: 48, }, { name: "second test case from leetcode", - input: [][]int{{3, 4}, {4, 3}}, + input: "[[3,4],[4,3]]", expected: 12, }, { name: "third test case from leetcode", - input: [][]int{{6, 5}, {8, 6}, {2, 10}, {8, 1}, {9, 2}, {3, 5}, {3, 5}}, + input: "[[6,5],[8,6],[2,10],[8,1],[9,2],[3,5],[3,5]]", expected: 20, }, + { + name: "fourth test case from leetcode", + input: "[[4,7],[8,9],[5,3],[6,10],[2,9],[3,10],[2,2],[5,8],[5,10],[5,6],[8,9],[10,7],[8,9],[3,7],[2,6],[5,1],[7,4],[1,10],[1,7],[6,9],[3,3],[4,6],[8,2],[10,6],[7,9],[9,2],[1,2],[3,8],[10,2],[4,1],[9,7],[10,3],[6,9],[9,8],[7,7],[5,7],[5,4],[6,5],[1,8],[2,3],[7,10],[3,9],[5,7],[2,4],[5,6],[9,5],[8,8],[8,10],[6,8],[5,1],[10,8],[7,4],[2,1],[2,7],[10,3],[2,5],[7,6],[10,5],[10,9],[5,7],[10,6],[4,3],[10,4],[1,5],[8,9],[3,1],[2,5],[9,10],[6,6],[5,10],[10,2],[6,10],[1,1],[8,6],[1,7],[6,3],[9,3],[1,4],[1,1],[10,4],[7,9],[4,5],[2,8],[7,9],[7,3],[4,9],[2,8],[4,6],[9,1],[8,4],[2,4],[7,8],[3,5],[7,6],[8,6],[4,7],[25,60],[39,52],[16,63],[33,56]]", + expected: 2028, + }, } for _, test := range tests { From 037235f0ffffc6202117487cbf764d1fb85b03b3 Mon Sep 17 00:00:00 2001 From: Arun Date: Sat, 20 Sep 2025 22:19:47 +0530 Subject: [PATCH 5/9] debug: print values at each run --- src/3000-maximum-area-of-longest-diagonal-rectangle/main.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go index 334ecf5..f55ad3e 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "fmt" "log" "math" ) @@ -21,7 +22,9 @@ func areaOfMaxDiagonal(dimensions string) int { width := parsedDimensions[i][1] diagonal = math.Sqrt(float64(length)*float64(length) + float64(width)*float64(width)) area = length * width + fmt.Printf("Rectangle %d: [%d,%d], diagonal=%.2f, area=%d\n", i, length, width, diagonal, area) if diagonal > maxDiagonal { + fmt.Printf(" -> NEW MAX! Previous: %2.f, New: %.2f\n", maxDiagonal, diagonal) maxDiagonal = diagonal maxArea = area } From bbcd5b19d701a114f8e90f079fb804bc1e9f40b6 Mon Sep 17 00:00:00 2001 From: Arun Date: Sat, 20 Sep 2025 22:28:45 +0530 Subject: [PATCH 6/9] fix: handle for case when two diagonals match, and need to find the larger area --- src/3000-maximum-area-of-longest-diagonal-rectangle/main.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go index f55ad3e..209f1a7 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go @@ -28,6 +28,11 @@ func areaOfMaxDiagonal(dimensions string) int { maxDiagonal = diagonal maxArea = area } + if diagonal == maxDiagonal { + if area > maxArea { + maxArea = area + } + } } return maxArea } From f33eb510ec3176a40b3d2ead3026c93084b12475 Mon Sep 17 00:00:00 2001 From: Arun Date: Sat, 20 Sep 2025 22:29:53 +0530 Subject: [PATCH 7/9] chore: remove debug lines --- src/3000-maximum-area-of-longest-diagonal-rectangle/main.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go index 209f1a7..6827600 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go @@ -2,7 +2,6 @@ package main import ( "encoding/json" - "fmt" "log" "math" ) @@ -22,9 +21,7 @@ func areaOfMaxDiagonal(dimensions string) int { width := parsedDimensions[i][1] diagonal = math.Sqrt(float64(length)*float64(length) + float64(width)*float64(width)) area = length * width - fmt.Printf("Rectangle %d: [%d,%d], diagonal=%.2f, area=%d\n", i, length, width, diagonal, area) if diagonal > maxDiagonal { - fmt.Printf(" -> NEW MAX! Previous: %2.f, New: %.2f\n", maxDiagonal, diagonal) maxDiagonal = diagonal maxArea = area } From 3c4b6fc3d3264fa68961ab79a6a30ca28032d155 Mon Sep 17 00:00:00 2001 From: Arun Date: Sat, 20 Sep 2025 22:30:57 +0530 Subject: [PATCH 8/9] fix: switch back to the signature that leetcode expects --- .../main.go | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go index 6827600..1deb223 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main.go @@ -1,24 +1,17 @@ package main import ( - "encoding/json" - "log" "math" ) -func areaOfMaxDiagonal(dimensions string) int { +func areaOfMaxDiagonal(dimensions [][]int) int { var area int var maxArea int var diagonal float64 var maxDiagonal float64 - var parsedDimensions [][]int - err := json.Unmarshal([]byte(dimensions), &parsedDimensions) - if err != nil { - log.Fatal(err.Error()) - } - for i := range parsedDimensions { - length := parsedDimensions[i][0] - width := parsedDimensions[i][1] + for i := range dimensions { + length := dimensions[i][0] + width := dimensions[i][1] diagonal = math.Sqrt(float64(length)*float64(length) + float64(width)*float64(width)) area = length * width if diagonal > maxDiagonal { From f7d8e14d90cd3f42cdf2200d39850fedd4d4a160 Mon Sep 17 00:00:00 2001 From: Arun Date: Sat, 20 Sep 2025 22:41:56 +0530 Subject: [PATCH 9/9] feat: add testutil package for LeetCode test data conversion --- .../main_test.go | 5 ++++- testutil/leetcode.go | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 testutil/leetcode.go diff --git a/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go index 9683974..1ace576 100644 --- a/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go +++ b/src/3000-maximum-area-of-longest-diagonal-rectangle/main_test.go @@ -2,6 +2,8 @@ package main import ( "testing" + + "github.com/arunsathiya/leetcode/testutil" ) func TestAreaOfMaxDiagonal(t *testing.T) { @@ -34,7 +36,8 @@ func TestAreaOfMaxDiagonal(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - output := areaOfMaxDiagonal(test.input) + dimensions := testutil.Parse2DIntArray(test.input) + output := areaOfMaxDiagonal(dimensions) if output != test.expected { t.Errorf("Expected %d, got %d", test.expected, output) } diff --git a/testutil/leetcode.go b/testutil/leetcode.go new file mode 100644 index 0000000..7cb28c2 --- /dev/null +++ b/testutil/leetcode.go @@ -0,0 +1,16 @@ +package testutil + +import ( + "encoding/json" +) + +// Parse2DIntArray converts LeetCode format string to [][]int +// Example: "[[1,2],[3,4]]" -> [][]int{{1,2},{3,4}} +func Parse2DIntArray(jsonStr string) [][]int { + var result [][]int + err := json.Unmarshal([]byte(jsonStr), &result) + if err != nil { + panic("Failed to parse 2D int array: " + err.Error()) + } + return result +}