Skip to content

Commit 46ff540

Browse files
authored
feat: add swift implementation to lcci problem: No.16.13 (doocs#2744)
1 parent 2eddb55 commit 46ff540

File tree

3 files changed

+108
-0
lines changed

3 files changed

+108
-0
lines changed

lcci/16.13.Bisect Squares/README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,43 @@ function cutSquares(square1: number[], square2: number[]): number[] {
196196
}
197197
```
198198

199+
```swift
200+
class Solution {
201+
func cutSquares(_ square1: [Int], _ square2: [Int]) -> [Double] {
202+
let x1 = Double(square1[0]) + Double(square1[2]) / 2.0
203+
let y1 = Double(square1[1]) + Double(square1[2]) / 2.0
204+
let x2 = Double(square2[0]) + Double(square2[2]) / 2.0
205+
let y2 = Double(square2[1]) + Double(square2[2]) / 2.0
206+
207+
if x1 == x2 {
208+
let y3 = min(Double(square1[1]), Double(square2[1]))
209+
let y4 = max(Double(square1[1]) + Double(square1[2]), Double(square2[1]) + Double(square2[2]))
210+
return [x1, y3, x2, y4]
211+
}
212+
213+
let k = (y2 - y1) / (x2 - x1)
214+
let b = y1 - k * x1
215+
216+
if abs(k) > 1 {
217+
let y3 = min(Double(square1[1]), Double(square2[1]))
218+
let x3 = (y3 - b) / k
219+
let y4 = max(Double(square1[1]) + Double(square1[2]), Double(square2[1]) + Double(square2[2]))
220+
let x4 = (y4 - b) / k
221+
if x3 > x4 || (x3 == x4 && y3 > y4) {
222+
return [x4, y4, x3, y3]
223+
}
224+
return [x3, y3, x4, y4]
225+
} else {
226+
let x3 = min(Double(square1[0]), Double(square2[0]))
227+
let y3 = k * x3 + b
228+
let x4 = max(Double(square1[0]) + Double(square1[2]), Double(square2[0]) + Double(square2[2]))
229+
let y4 = k * x4 + b
230+
return [x3, y3, x4, y4]
231+
}
232+
}
233+
}
234+
```
235+
199236
<!-- tabs:end -->
200237

201238
<!-- end -->

lcci/16.13.Bisect Squares/README_EN.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,43 @@ function cutSquares(square1: number[], square2: number[]): number[] {
201201
}
202202
```
203203

204+
```swift
205+
class Solution {
206+
func cutSquares(_ square1: [Int], _ square2: [Int]) -> [Double] {
207+
let x1 = Double(square1[0]) + Double(square1[2]) / 2.0
208+
let y1 = Double(square1[1]) + Double(square1[2]) / 2.0
209+
let x2 = Double(square2[0]) + Double(square2[2]) / 2.0
210+
let y2 = Double(square2[1]) + Double(square2[2]) / 2.0
211+
212+
if x1 == x2 {
213+
let y3 = min(Double(square1[1]), Double(square2[1]))
214+
let y4 = max(Double(square1[1]) + Double(square1[2]), Double(square2[1]) + Double(square2[2]))
215+
return [x1, y3, x2, y4]
216+
}
217+
218+
let k = (y2 - y1) / (x2 - x1)
219+
let b = y1 - k * x1
220+
221+
if abs(k) > 1 {
222+
let y3 = min(Double(square1[1]), Double(square2[1]))
223+
let x3 = (y3 - b) / k
224+
let y4 = max(Double(square1[1]) + Double(square1[2]), Double(square2[1]) + Double(square2[2]))
225+
let x4 = (y4 - b) / k
226+
if x3 > x4 || (x3 == x4 && y3 > y4) {
227+
return [x4, y4, x3, y3]
228+
}
229+
return [x3, y3, x4, y4]
230+
} else {
231+
let x3 = min(Double(square1[0]), Double(square2[0]))
232+
let y3 = k * x3 + b
233+
let x4 = max(Double(square1[0]) + Double(square1[2]), Double(square2[0]) + Double(square2[2]))
234+
let y4 = k * x4 + b
235+
return [x3, y3, x4, y4]
236+
}
237+
}
238+
}
239+
```
240+
204241
<!-- tabs:end -->
205242

206243
<!-- end -->
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Solution {
2+
func cutSquares(_ square1: [Int], _ square2: [Int]) -> [Double] {
3+
let x1 = Double(square1[0]) + Double(square1[2]) / 2.0
4+
let y1 = Double(square1[1]) + Double(square1[2]) / 2.0
5+
let x2 = Double(square2[0]) + Double(square2[2]) / 2.0
6+
let y2 = Double(square2[1]) + Double(square2[2]) / 2.0
7+
8+
if x1 == x2 {
9+
let y3 = min(Double(square1[1]), Double(square2[1]))
10+
let y4 = max(Double(square1[1]) + Double(square1[2]), Double(square2[1]) + Double(square2[2]))
11+
return [x1, y3, x2, y4]
12+
}
13+
14+
let k = (y2 - y1) / (x2 - x1)
15+
let b = y1 - k * x1
16+
17+
if abs(k) > 1 {
18+
let y3 = min(Double(square1[1]), Double(square2[1]))
19+
let x3 = (y3 - b) / k
20+
let y4 = max(Double(square1[1]) + Double(square1[2]), Double(square2[1]) + Double(square2[2]))
21+
let x4 = (y4 - b) / k
22+
if x3 > x4 || (x3 == x4 && y3 > y4) {
23+
return [x4, y4, x3, y3]
24+
}
25+
return [x3, y3, x4, y4]
26+
} else {
27+
let x3 = min(Double(square1[0]), Double(square2[0]))
28+
let y3 = k * x3 + b
29+
let x4 = max(Double(square1[0]) + Double(square1[2]), Double(square2[0]) + Double(square2[2]))
30+
let y4 = k * x4 + b
31+
return [x3, y3, x4, y4]
32+
}
33+
}
34+
}

0 commit comments

Comments
 (0)