From b1cf11c0991541ebe33b24967361068d11fefce1 Mon Sep 17 00:00:00 2001 From: Lanre Adedara Date: Wed, 8 May 2024 08:11:37 +0100 Subject: [PATCH 1/2] Swift Implementation for LCCI 16.22 --- lcci/16.22.Langtons Ant/README.md | 44 ++++++++++++++++++++++++++ lcci/16.22.Langtons Ant/README_EN.md | 44 ++++++++++++++++++++++++++ lcci/16.22.Langtons Ant/Solution.swift | 41 ++++++++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 lcci/16.22.Langtons Ant/Solution.swift diff --git a/lcci/16.22.Langtons Ant/README.md b/lcci/16.22.Langtons Ant/README.md index 17d70e3e552fc..15420869fa1b4 100644 --- a/lcci/16.22.Langtons Ant/README.md +++ b/lcci/16.22.Langtons Ant/README.md @@ -206,6 +206,50 @@ func printKMoves(K int) []string { } ``` +```swift +class Solution { + func printKMoves(_ K: Int) -> [String] { + var x1 = 0, y1 = 0, x2 = 0, y2 = 0 + let dirs = [0, 1, 0, -1, 0] + let d = "RDLU" + var x = 0, y = 0, p = 0 + var black = Set<[Int]>() + var K = K + + while K > 0 { + let t = [x, y] + if black.insert(t).inserted { + p = (p + 1) % 4 + } else { + black.remove(t) + p = (p + 3) % 4 + } + x += dirs[p] + y += dirs[p + 1] + x1 = min(x1, x) + y1 = min(y1, y) + x2 = max(x2, x) + y2 = max(y2, y) + K -= 1 + } + + let m = x2 - x1 + 1 + let n = y2 - y1 + 1 + var g = Array(repeating: Array(repeating: "_", count: n), count: m) + + for t in black { + let i = t[0] - x1 + let j = t[1] - y1 + g[i][j] = "X" + } + + g[x - x1][y - y1] = String(d[d.index(d.startIndex, offsetBy: p)]) + + return g.map { $0.joined() } + } +} +``` + diff --git a/lcci/16.22.Langtons Ant/README_EN.md b/lcci/16.22.Langtons Ant/README_EN.md index 28448219478b4..d77c3a2919a49 100644 --- a/lcci/16.22.Langtons Ant/README_EN.md +++ b/lcci/16.22.Langtons Ant/README_EN.md @@ -226,6 +226,50 @@ func printKMoves(K int) []string { } ``` +```swift +class Solution { + func printKMoves(_ K: Int) -> [String] { + var x1 = 0, y1 = 0, x2 = 0, y2 = 0 + let dirs = [0, 1, 0, -1, 0] + let d = "RDLU" + var x = 0, y = 0, p = 0 + var black = Set<[Int]>() + var K = K + + while K > 0 { + let t = [x, y] + if black.insert(t).inserted { + p = (p + 1) % 4 + } else { + black.remove(t) + p = (p + 3) % 4 + } + x += dirs[p] + y += dirs[p + 1] + x1 = min(x1, x) + y1 = min(y1, y) + x2 = max(x2, x) + y2 = max(y2, y) + K -= 1 + } + + let m = x2 - x1 + 1 + let n = y2 - y1 + 1 + var g = Array(repeating: Array(repeating: "_", count: n), count: m) + + for t in black { + let i = t[0] - x1 + let j = t[1] - y1 + g[i][j] = "X" + } + + g[x - x1][y - y1] = String(d[d.index(d.startIndex, offsetBy: p)]) + + return g.map { $0.joined() } + } +} +``` + diff --git a/lcci/16.22.Langtons Ant/Solution.swift b/lcci/16.22.Langtons Ant/Solution.swift new file mode 100644 index 0000000000000..bab48138ff747 --- /dev/null +++ b/lcci/16.22.Langtons Ant/Solution.swift @@ -0,0 +1,41 @@ +class Solution { + func printKMoves(_ K: Int) -> [String] { + var x1 = 0, y1 = 0, x2 = 0, y2 = 0 + let dirs = [0, 1, 0, -1, 0] + let d = "RDLU" + var x = 0, y = 0, p = 0 + var black = Set<[Int]>() + var K = K + + while K > 0 { + let t = [x, y] + if black.insert(t).inserted { + p = (p + 1) % 4 + } else { + black.remove(t) + p = (p + 3) % 4 + } + x += dirs[p] + y += dirs[p + 1] + x1 = min(x1, x) + y1 = min(y1, y) + x2 = max(x2, x) + y2 = max(y2, y) + K -= 1 + } + + let m = x2 - x1 + 1 + let n = y2 - y1 + 1 + var g = Array(repeating: Array(repeating: "_", count: n), count: m) + + for t in black { + let i = t[0] - x1 + let j = t[1] - y1 + g[i][j] = "X" + } + + g[x - x1][y - y1] = String(d[d.index(d.startIndex, offsetBy: p)]) + + return g.map { $0.joined() } + } +} \ No newline at end of file From 3b402580e411f370059ccc634ad7f7f5e3029ffe Mon Sep 17 00:00:00 2001 From: yanglbme Date: Wed, 8 May 2024 07:34:23 +0000 Subject: [PATCH 2/2] style: format code and docs with prettier --- lcci/16.22.Langtons Ant/README.md | 10 +++++----- lcci/16.22.Langtons Ant/README_EN.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lcci/16.22.Langtons Ant/README.md b/lcci/16.22.Langtons Ant/README.md index 15420869fa1b4..e66c8e52c7af1 100644 --- a/lcci/16.22.Langtons Ant/README.md +++ b/lcci/16.22.Langtons Ant/README.md @@ -215,7 +215,7 @@ class Solution { var x = 0, y = 0, p = 0 var black = Set<[Int]>() var K = K - + while K > 0 { let t = [x, y] if black.insert(t).inserted { @@ -232,19 +232,19 @@ class Solution { y2 = max(y2, y) K -= 1 } - + let m = x2 - x1 + 1 let n = y2 - y1 + 1 var g = Array(repeating: Array(repeating: "_", count: n), count: m) - + for t in black { let i = t[0] - x1 let j = t[1] - y1 g[i][j] = "X" } - + g[x - x1][y - y1] = String(d[d.index(d.startIndex, offsetBy: p)]) - + return g.map { $0.joined() } } } diff --git a/lcci/16.22.Langtons Ant/README_EN.md b/lcci/16.22.Langtons Ant/README_EN.md index d77c3a2919a49..fb1623540676b 100644 --- a/lcci/16.22.Langtons Ant/README_EN.md +++ b/lcci/16.22.Langtons Ant/README_EN.md @@ -235,7 +235,7 @@ class Solution { var x = 0, y = 0, p = 0 var black = Set<[Int]>() var K = K - + while K > 0 { let t = [x, y] if black.insert(t).inserted { @@ -252,19 +252,19 @@ class Solution { y2 = max(y2, y) K -= 1 } - + let m = x2 - x1 + 1 let n = y2 - y1 + 1 var g = Array(repeating: Array(repeating: "_", count: n), count: m) - + for t in black { let i = t[0] - x1 let j = t[1] - y1 g[i][j] = "X" } - + g[x - x1][y - y1] = String(d[d.index(d.startIndex, offsetBy: p)]) - + return g.map { $0.joined() } } }