Translate all code to English (#1836)

* Review the EN heading format.

* Fix pythontutor headings.

* Fix pythontutor headings.

* bug fixes

* Fix headings in **/summary.md

* Revisit the CN-to-EN translation for Python code using Claude-4.5

* Revisit the CN-to-EN translation for Java code using Claude-4.5

* Revisit the CN-to-EN translation for Cpp code using Claude-4.5.

* Fix the dictionary.

* Fix cpp code translation for the multipart strings.

* Translate Go code to English.

* Update workflows to test EN code.

* Add EN translation for C.

* Add EN translation for CSharp.

* Add EN translation for Swift.

* Trigger the CI check.

* Revert.

* Update en/hash_map.md

* Add the EN version of Dart code.

* Add the EN version of Kotlin code.

* Add missing code files.

* Add the EN version of JavaScript code.

* Add the EN version of TypeScript code.

* Fix the workflows.

* Add the EN version of Ruby code.

* Add the EN version of Rust code.

* Update the CI check for the English version  code.

* Update Python CI check.

* Fix cmakelists for en/C code.

* Fix Ruby comments
This commit is contained in:
Yudong Jin
2025-12-31 07:44:52 +08:00
committed by GitHub
parent 45e1295241
commit 2778a6f9c7
1284 changed files with 71557 additions and 3275 deletions
@@ -0,0 +1,44 @@
/**
* File: binary_search_recur.swift
* Created Time: 2023-09-02
* Author: nuomi1 (nuomi1@qq.com)
*/
/* Binary search: problem f(i, j) */
func dfs(nums: [Int], target: Int, i: Int, j: Int) -> Int {
// If the interval is empty, it means there is no target element, return -1
if i > j {
return -1
}
// Calculate the midpoint index m
let m = (i + j) / 2
if nums[m] < target {
// Recursion subproblem f(m+1, j)
return dfs(nums: nums, target: target, i: m + 1, j: j)
} else if nums[m] > target {
// Recursion subproblem f(i, m-1)
return dfs(nums: nums, target: target, i: i, j: m - 1)
} else {
// Found the target element, return its index
return m
}
}
/* Binary search */
func binarySearch(nums: [Int], target: Int) -> Int {
// Solve the problem f(0, n-1)
dfs(nums: nums, target: target, i: nums.startIndex, j: nums.endIndex - 1)
}
@main
enum BinarySearchRecur {
/* Driver Code */
static func main() {
let target = 6
let nums = [1, 3, 6, 8, 12, 15, 23, 26, 31, 35]
// Binary search (closed interval on both sides)
let index = binarySearch(nums: nums, target: target)
print("Index of target element 6 = \(index)")
}
}
@@ -0,0 +1,47 @@
/**
* File: build_tree.swift
* Created Time: 2023-09-02
* Author: nuomi1 (nuomi1@qq.com)
*/
import utils
/* Build binary tree: divide and conquer */
func dfs(preorder: [Int], inorderMap: [Int: Int], i: Int, l: Int, r: Int) -> TreeNode? {
// Terminate when the subtree interval is empty
if r - l < 0 {
return nil
}
// Initialize the root node
let root = TreeNode(x: preorder[i])
// Query m to divide the left and right subtrees
let m = inorderMap[preorder[i]]!
// Subproblem: build the left subtree
root.left = dfs(preorder: preorder, inorderMap: inorderMap, i: i + 1, l: l, r: m - 1)
// Subproblem: build the right subtree
root.right = dfs(preorder: preorder, inorderMap: inorderMap, i: i + 1 + m - l, l: m + 1, r: r)
// Return the root node
return root
}
/* Build binary tree */
func buildTree(preorder: [Int], inorder: [Int]) -> TreeNode? {
// Initialize hash map, storing the mapping from inorder elements to indices
let inorderMap = inorder.enumerated().reduce(into: [:]) { $0[$1.element] = $1.offset }
return dfs(preorder: preorder, inorderMap: inorderMap, i: inorder.startIndex, l: inorder.startIndex, r: inorder.endIndex - 1)
}
@main
enum BuildTree {
/* Driver Code */
static func main() {
let preorder = [3, 9, 2, 1, 7]
let inorder = [9, 3, 1, 2, 7]
print("Pre-order traversal = \(preorder)")
print("In-order traversal = \(inorder)")
let root = buildTree(preorder: preorder, inorder: inorder)
print("The constructed binary tree is:")
PrintUtil.printTree(root: root)
}
}
@@ -0,0 +1,58 @@
/**
* File: hanota.swift
* Created Time: 2023-09-02
* Author: nuomi1 (nuomi1@qq.com)
*/
/* Move a disk */
func move(src: inout [Int], tar: inout [Int]) {
// Take out a disk from the top of src
let pan = src.popLast()!
// Place the disk on top of tar
tar.append(pan)
}
/* Solve the Tower of Hanoi problem f(i) */
func dfs(i: Int, src: inout [Int], buf: inout [Int], tar: inout [Int]) {
// If there is only one disk left in src, move it directly to tar
if i == 1 {
move(src: &src, tar: &tar)
return
}
// Subproblem f(i-1): move the top i-1 disks from src to buf using tar
dfs(i: i - 1, src: &src, buf: &tar, tar: &buf)
// Subproblem f(1): move the remaining disk from src to tar
move(src: &src, tar: &tar)
// Subproblem f(i-1): move the top i-1 disks from buf to tar using src
dfs(i: i - 1, src: &buf, buf: &src, tar: &tar)
}
/* Solve the Tower of Hanoi problem */
func solveHanota(A: inout [Int], B: inout [Int], C: inout [Int]) {
let n = A.count
// The tail of the list is the top of the rod
// Move top n disks from src to C using B
dfs(i: n, src: &A, buf: &B, tar: &C)
}
@main
enum Hanota {
/* Driver Code */
static func main() {
// The tail of the list is the top of the rod
var A = [5, 4, 3, 2, 1]
var B: [Int] = []
var C: [Int] = []
print("In initial state:")
print("A = \(A)")
print("B = \(B)")
print("C = \(C)")
solveHanota(A: &A, B: &B, C: &C)
print("After disk movement is complete:")
print("A = \(A)")
print("B = \(B)")
print("C = \(C)")
}
}