-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcreate.go
100 lines (92 loc) · 2.26 KB
/
create.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
"path"
)
const problemBaseCN = "https://leetcode-cn.com/problems/"
const problemBase = "https://leetcode.com/problems/"
func createQuestion(basePath string, item *Item, question *Question) error {
titleSlug := item.Question.TitleSlug
folder := path.Join(basePath, titleSlug)
err := createFolder(folder)
if err != nil {
return err
}
defaultCode := parseDefaultCode(question.CodeDefinition)
err = createSolutionFile(folder, defaultCode)
if err != nil {
return err
}
err = createReadmeFile(folder, item.Title, titleSlug, question.TranslatedContent)
if err != nil {
return err
}
return nil
}
func createFolder(folder string) error {
err := os.Mkdir(folder, os.ModePerm)
if err != nil {
if os.IsExist(err) {
fmt.Println("folder existed: ", folder)
return err
}
}
return nil
}
func createSolutionFile(folder, defaultCode string) error {
solutionPath := path.Join(folder, "solution.go")
f, err := os.Create(solutionPath)
if err != nil {
return fmt.Errorf("failed to create file: %s\n", solutionPath)
}
defer f.Close()
w := bufio.NewWriter(f)
fmt.Fprintln(w, "package main")
fmt.Fprintln(w)
fmt.Fprint(w, defaultCode)
return w.Flush()
}
func createReadmeFile(folder, title, titleSlug, content string) error {
readmePath := path.Join(folder, "readme.md")
f, err := os.Create(readmePath)
if err != nil {
return fmt.Errorf("failed to create file: %s\n", readmePath)
}
defer f.Close()
w := bufio.NewWriter(f)
fmt.Fprintln(w, "## "+title)
fmt.Fprintln(w)
fmt.Fprint(w, content)
fmt.Fprintln(w)
fmt.Fprintln(w,"-----")
fmt.Fprintln(w)
fmt.Fprintln(w, "### 链接:")
fmt.Fprintln(w)
fmt.Fprintln(w, "中文:"+problemBaseCN+titleSlug)
fmt.Fprintln(w)
fmt.Fprintln(w, "英文:"+problemBase+titleSlug)
return w.Flush()
}
func parseDefaultCode(codeDeinition string) string {
var CodeDefinitions []CodeDefinition
bytes := []byte(codeDeinition)
err := json.Unmarshal(bytes, &CodeDefinitions)
if err != nil {
fmt.Println("Failed to parse code definition json: ", err)
return ""
}
for _, item := range CodeDefinitions {
if item.Value == "golang" {
return item.DefaultCode
}
}
return ""
}
type CodeDefinition struct {
Value string
Text string
DefaultCode string
}