mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 00:25:22 +08:00
Fix ctl module
This commit is contained in:
19
ctl/label.go
19
ctl/label.go
@ -10,6 +10,7 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/halfrost/LeetCode-Go/ctl/util"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -75,7 +76,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func getChapterFourFileOrder() ([]string, []int) {
|
func getChapterFourFileOrder() ([]string, []int) {
|
||||||
solutions, solutionIds := LoadChapterFourDir()
|
solutions, solutionIds := util.LoadChapterFourDir()
|
||||||
chapterFourFileOrder := []string{"_index"}
|
chapterFourFileOrder := []string{"_index"}
|
||||||
chapterFourFileOrder = append(chapterFourFileOrder, solutions...)
|
chapterFourFileOrder = append(chapterFourFileOrder, solutions...)
|
||||||
fmt.Printf("ChapterFour 中包括 _index 有 %v 个文件, len(id) = %v\n", len(chapterFourFileOrder), len(solutionIds))
|
fmt.Printf("ChapterFour 中包括 _index 有 %v 个文件, len(id) = %v\n", len(chapterFourFileOrder), len(solutionIds))
|
||||||
@ -149,7 +150,7 @@ func addPreNextLabel(order, preOrder []string, chapterFourIds []int, preChapter,
|
|||||||
tmp = "\n\n" + delLine + fmt.Sprintf("<p align = \"right\"><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">下一页➡️</a></p>\n", chapter, order[index+1])
|
tmp = "\n\n" + delLine + fmt.Sprintf("<p align = \"right\"><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">下一页➡️</a></p>\n", chapter, order[index+1])
|
||||||
} else {
|
} else {
|
||||||
if chapter == "ChapterFour" {
|
if chapter == "ChapterFour" {
|
||||||
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">⬅️上一章</a></p>\n", preChapter, preOrder[len(preOrder)-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">下一页➡️</a></p>\n", chapter, GetChpaterFourFileNum(chapterFourIds[(index-1)+1]), order[index+1]) + preNextFotter
|
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">⬅️上一章</a></p>\n", preChapter, preOrder[len(preOrder)-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">下一页➡️</a></p>\n", chapter, util.GetChpaterFourFileNum(chapterFourIds[(index-1)+1]), order[index+1]) + preNextFotter
|
||||||
} else {
|
} else {
|
||||||
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">⬅️上一章</a></p>\n", preChapter, preOrder[len(preOrder)-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">下一页➡️</a></p>\n", chapter, order[index+1]) + preNextFotter
|
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">⬅️上一章</a></p>\n", preChapter, preOrder[len(preOrder)-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">下一页➡️</a></p>\n", chapter, order[index+1]) + preNextFotter
|
||||||
}
|
}
|
||||||
@ -157,26 +158,26 @@ func addPreNextLabel(order, preOrder []string, chapterFourIds []int, preChapter,
|
|||||||
} else if index == len(order)-1 {
|
} else if index == len(order)-1 {
|
||||||
if chapter == "ChapterFour" {
|
if chapter == "ChapterFour" {
|
||||||
// 最后一页不需要“下一页”
|
// 最后一页不需要“下一页”
|
||||||
tmp = "\n\n" + delLine + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">⬅️上一页</a></p>\n", chapter, GetChpaterFourFileNum(chapterFourIds[(index-1)-1]), order[index-1])
|
tmp = "\n\n" + delLine + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">⬅️上一页</a></p>\n", chapter, util.GetChpaterFourFileNum(chapterFourIds[(index-1)-1]), order[index-1])
|
||||||
} else {
|
} else {
|
||||||
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">⬅️上一页</a></p>\n", chapter, order[index-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/\">下一章➡️</a></p>\n", nextChapter) + preNextFotter
|
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">⬅️上一页</a></p>\n", chapter, order[index-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/\">下一章➡️</a></p>\n", nextChapter) + preNextFotter
|
||||||
}
|
}
|
||||||
} else if index == 1 {
|
} else if index == 1 {
|
||||||
if chapter == "ChapterFour" {
|
if chapter == "ChapterFour" {
|
||||||
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/\">⬅️上一页</a></p>\n", chapter) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">下一页➡️</a></p>\n", chapter, GetChpaterFourFileNum(chapterFourIds[(index-1)+1]), order[index+1]) + preNextFotter
|
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/\">⬅️上一页</a></p>\n", chapter) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">下一页➡️</a></p>\n", chapter, util.GetChpaterFourFileNum(chapterFourIds[(index-1)+1]), order[index+1]) + preNextFotter
|
||||||
} else {
|
} else {
|
||||||
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/\">⬅️上一页</a></p>\n", chapter) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">下一页➡️</a></p>\n", chapter, order[index+1]) + preNextFotter
|
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/\">⬅️上一页</a></p>\n", chapter) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">下一页➡️</a></p>\n", chapter, order[index+1]) + preNextFotter
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if chapter == "ChapterFour" {
|
if chapter == "ChapterFour" {
|
||||||
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">⬅️上一页</a></p>\n", chapter, GetChpaterFourFileNum(chapterFourIds[(index-1)-1]), order[index-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">下一页➡️</a></p>\n", chapter, GetChpaterFourFileNum(chapterFourIds[(index-1)+1]), order[index+1]) + preNextFotter
|
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">⬅️上一页</a></p>\n", chapter, util.GetChpaterFourFileNum(chapterFourIds[(index-1)-1]), order[index-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/%v/\">下一页➡️</a></p>\n", chapter, util.GetChpaterFourFileNum(chapterFourIds[(index-1)+1]), order[index+1]) + preNextFotter
|
||||||
} else {
|
} else {
|
||||||
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">⬅️上一页</a></p>\n", chapter, order[index-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">下一页➡️</a></p>\n", chapter, order[index+1]) + preNextFotter
|
tmp = "\n\n" + preNextHeader + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">⬅️上一页</a></p>\n", chapter, order[index-1]) + fmt.Sprintf("<p><a href=\"https://books.halfrost.com/leetcode/%v/%v/\">下一页➡️</a></p>\n", chapter, order[index+1]) + preNextFotter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if chapter == "ChapterFour" && index > 0 {
|
if chapter == "ChapterFour" && index > 0 {
|
||||||
path = fmt.Sprintf("%v/%v", GetChpaterFourFileNum(chapterFourIds[(index-1)]), path)
|
path = fmt.Sprintf("%v/%v", util.GetChpaterFourFileNum(chapterFourIds[(index-1)]), path)
|
||||||
}
|
}
|
||||||
|
|
||||||
exist, err = needAdd(fmt.Sprintf("../website/content/%v/%v.md", chapter, path))
|
exist, err = needAdd(fmt.Sprintf("../website/content/%v/%v.md", chapter, path))
|
||||||
@ -191,7 +192,7 @@ func addPreNextLabel(order, preOrder []string, chapterFourIds []int, preChapter,
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
WriteFile(fmt.Sprintf("../website/content/%v/%v.md", chapter, path), res)
|
util.WriteFile(fmt.Sprintf("../website/content/%v/%v.md", chapter, path), res)
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -241,7 +242,7 @@ func delPreNextLabel(order []string, chapterFourIds []int, chapter string) {
|
|||||||
lineNum = 3
|
lineNum = 3
|
||||||
}
|
}
|
||||||
if chapter == "ChapterFour" && index > 0 {
|
if chapter == "ChapterFour" && index > 0 {
|
||||||
path = fmt.Sprintf("%v/%v", GetChpaterFourFileNum(chapterFourIds[(index-1)]), path)
|
path = fmt.Sprintf("%v/%v", util.GetChpaterFourFileNum(chapterFourIds[(index-1)]), path)
|
||||||
}
|
}
|
||||||
|
|
||||||
exist, err := needAdd(fmt.Sprintf("../website/content/%v/%v.md", chapter, path))
|
exist, err := needAdd(fmt.Sprintf("../website/content/%v/%v.md", chapter, path))
|
||||||
@ -262,7 +263,7 @@ func delPreNextLabel(order []string, chapterFourIds []int, chapter string) {
|
|||||||
// fmt.Println(err)
|
// fmt.Println(err)
|
||||||
// return
|
// return
|
||||||
// }
|
// }
|
||||||
// WriteFile(fmt.Sprintf("../website/content/ChapterOne/%v.md", v), res)
|
// util.WriteFile(fmt.Sprintf("../website/content/ChapterOne/%v.md", v), res)
|
||||||
}
|
}
|
||||||
|
|
||||||
func needAdd(filePath string) (bool, error) {
|
func needAdd(filePath string) (bool, error) {
|
||||||
|
7
ctl/models/go.mod
Normal file
7
ctl/models/go.mod
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
module github.com/halfrost/LeetCode-Go/ctl/models
|
||||||
|
|
||||||
|
go 1.19
|
||||||
|
|
||||||
|
replace github.com/halfrost/LeetCode-Go/ctl/models => ../util
|
||||||
|
|
||||||
|
require github.com/halfrost/LeetCode-Go/ctl/util v0.0.0-20220910225043-e3bb5aff34d0
|
2
ctl/models/go.sum
Normal file
2
ctl/models/go.sum
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
github.com/halfrost/LeetCode-Go/ctl/util v0.0.0-20220910225043-e3bb5aff34d0 h1:WAOAj59szR52uAnEQljAt7ucpbGGOsy0xgR/NeP4Xbc=
|
||||||
|
github.com/halfrost/LeetCode-Go/ctl/util v0.0.0-20220910225043-e3bb5aff34d0/go.mod h1:+cA8KYcbGxP2Itd3NG+QJVGL/MEZISKlei0tvgDeEag=
|
@ -1,4 +1,4 @@
|
|||||||
package main
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
@ -1,4 +1,4 @@
|
|||||||
package main
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
@ -1,10 +1,12 @@
|
|||||||
package main
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/halfrost/LeetCode-Go/ctl/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Graphql define
|
// Graphql define
|
||||||
@ -152,15 +154,15 @@ func standardizedTitle(orig string, frontendQuestionID int32) string {
|
|||||||
func GenerateTagMdRows(solutionIds []int, metaMap map[int]TagList, mdrows []Mdrow, internal bool) []TagList {
|
func GenerateTagMdRows(solutionIds []int, metaMap map[int]TagList, mdrows []Mdrow, internal bool) []TagList {
|
||||||
tl := []TagList{}
|
tl := []TagList{}
|
||||||
for _, row := range mdrows {
|
for _, row := range mdrows {
|
||||||
if BinarySearch(solutionIds, int(row.FrontendQuestionID)) != -1 {
|
if util.BinarySearch(solutionIds, int(row.FrontendQuestionID)) != -1 {
|
||||||
tmp := TagList{}
|
tmp := TagList{}
|
||||||
tmp.FrontendQuestionID = row.FrontendQuestionID
|
tmp.FrontendQuestionID = row.FrontendQuestionID
|
||||||
tmp.QuestionTitle = strings.TrimSpace(row.QuestionTitle)
|
tmp.QuestionTitle = strings.TrimSpace(row.QuestionTitle)
|
||||||
s7 := standardizedTitle(row.QuestionTitle, row.FrontendQuestionID)
|
s7 := standardizedTitle(row.QuestionTitle, row.FrontendQuestionID)
|
||||||
if internal {
|
if internal {
|
||||||
tmp.SolutionPath = fmt.Sprintf("[Go]({{< relref \"/ChapterFour/%v/%v.md\" >}})", GetChpaterFourFileNum(int(row.FrontendQuestionID)), fmt.Sprintf("%04d.%v", int(row.FrontendQuestionID), s7))
|
tmp.SolutionPath = fmt.Sprintf("[Go]({{< relref \"/ChapterFour/%v/%v.md\" >}})", util.GetChpaterFourFileNum(int(row.FrontendQuestionID)), fmt.Sprintf("%04d.%v", int(row.FrontendQuestionID), s7))
|
||||||
} else {
|
} else {
|
||||||
tmp.SolutionPath = fmt.Sprintf("[Go](https://books.halfrost.com/leetcode/ChapterFour/%v/%v)", GetChpaterFourFileNum(int(row.FrontendQuestionID)), fmt.Sprintf("%04d.%v", int(row.FrontendQuestionID), s7))
|
tmp.SolutionPath = fmt.Sprintf("[Go](https://books.halfrost.com/leetcode/ChapterFour/%v/%v)", util.GetChpaterFourFileNum(int(row.FrontendQuestionID)), fmt.Sprintf("%04d.%v", int(row.FrontendQuestionID), s7))
|
||||||
}
|
}
|
||||||
tmp.Acceptance = row.Acceptance
|
tmp.Acceptance = row.Acceptance
|
||||||
tmp.Difficulty = row.Difficulty
|
tmp.Difficulty = row.Difficulty
|
@ -1,4 +1,4 @@
|
|||||||
package main
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
15
ctl/pdf.go
15
ctl/pdf.go
@ -10,6 +10,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/halfrost/LeetCode-Go/ctl/util"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ func generatePDF() {
|
|||||||
// 先删除 pre-next
|
// 先删除 pre-next
|
||||||
delPreNext()
|
delPreNext()
|
||||||
|
|
||||||
chapterFourFileOrder, _ := LoadChapterFourDir()
|
chapterFourFileOrder, _ := util.LoadChapterFourDir()
|
||||||
totalSolutions = len(chapterFourFileOrder)
|
totalSolutions = len(chapterFourFileOrder)
|
||||||
midVersion = totalSolutions / 100
|
midVersion = totalSolutions / 100
|
||||||
lastVersion = totalSolutions % 100
|
lastVersion = totalSolutions % 100
|
||||||
@ -79,7 +80,7 @@ func generatePDF() {
|
|||||||
tmp, err = loadChapter(chapterThreeFileOrder, "./pdftemp", "ChapterThree")
|
tmp, err = loadChapter(chapterThreeFileOrder, "./pdftemp", "ChapterThree")
|
||||||
pdf = append(pdf, tmp...)
|
pdf = append(pdf, tmp...)
|
||||||
// PDF 第四章
|
// PDF 第四章
|
||||||
tmp, err = LoadFile("./pdftemp/ChapterFour/_index.md")
|
tmp, err = util.LoadFile("./pdftemp/ChapterFour/_index.md")
|
||||||
pdf = append(pdf, tmp...)
|
pdf = append(pdf, tmp...)
|
||||||
tmp, err = loadChapter(chapterFourFileOrder, "../website/content", "ChapterFour")
|
tmp, err = loadChapter(chapterFourFileOrder, "../website/content", "ChapterFour")
|
||||||
pdf = append(pdf, tmp...)
|
pdf = append(pdf, tmp...)
|
||||||
@ -87,10 +88,10 @@ func generatePDF() {
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
// 生成 PDF
|
// 生成 PDF
|
||||||
WriteFile(fmt.Sprintf("../PDF v%v.%v.%v.md", majorVersion, midVersion, lastVersion), pdf)
|
util.WriteFile(fmt.Sprintf("../PDF v%v.%v.%v.md", majorVersion, midVersion, lastVersion), pdf)
|
||||||
// 还原现场
|
// 还原现场
|
||||||
addPreNext()
|
addPreNext()
|
||||||
DestoryDir("./pdftemp")
|
util.DestoryDir("./pdftemp")
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadChapter(order []string, path, chapter string) ([]byte, error) {
|
func loadChapter(order []string, path, chapter string) ([]byte, error) {
|
||||||
@ -109,10 +110,10 @@ func loadChapter(order []string, path, chapter string) ([]byte, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
tmp, err = LoadFile(fmt.Sprintf("%v/%v/%v/%v.md", path, chapter, GetChpaterFourFileNum(num), v))
|
tmp, err = util.LoadFile(fmt.Sprintf("%v/%v/%v/%v.md", path, chapter, util.GetChpaterFourFileNum(num), v))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
tmp, err = LoadFile(fmt.Sprintf("%v/%v/%v.md", path, chapter, v))
|
tmp, err = util.LoadFile(fmt.Sprintf("%v/%v/%v.md", path, chapter, v))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -146,7 +147,7 @@ func prepare(path string) {
|
|||||||
}
|
}
|
||||||
// 生成外部链接的 ChapterTwo
|
// 生成外部链接的 ChapterTwo
|
||||||
buildChapterTwo(false)
|
buildChapterTwo(false)
|
||||||
CopyFile("./pdftemp/ChapterTwo/_index.md", "../website/content/ChapterTwo/_index.md")
|
util.CopyFile("./pdftemp/ChapterTwo/_index.md", "../website/content/ChapterTwo/_index.md")
|
||||||
|
|
||||||
for _, v := range chapterTwoFileOrder {
|
for _, v := range chapterTwoFileOrder {
|
||||||
removeHeader(fmt.Sprintf("./pdftemp/ChapterTwo/%v.md", v), fmt.Sprintf("./pdftemp/ChapterTwo/%v.md", v), 5)
|
removeHeader(fmt.Sprintf("./pdftemp/ChapterTwo/%v.md", v), fmt.Sprintf("./pdftemp/ChapterTwo/%v.md", v), 5)
|
||||||
|
@ -11,6 +11,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
m "github.com/halfrost/LeetCode-Go/ctl/models"
|
||||||
|
"github.com/halfrost/LeetCode-Go/ctl/util"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -78,13 +80,13 @@ func newBuildMenu() *cobra.Command {
|
|||||||
|
|
||||||
func buildREADME() {
|
func buildREADME() {
|
||||||
var (
|
var (
|
||||||
problems []StatStatusPairs
|
problems []m.StatStatusPairs
|
||||||
lpa LeetCodeProblemAll
|
lpa m.LeetCodeProblemAll
|
||||||
info UserInfo
|
info m.UserInfo
|
||||||
)
|
)
|
||||||
// 请求所有题目信息
|
// 请求所有题目信息
|
||||||
body := getProblemAllList()
|
body := getProblemAllList()
|
||||||
problemsMap, optimizingIds := map[int]StatStatusPairs{}, []int{}
|
problemsMap, optimizingIds := map[int]m.StatStatusPairs{}, []int{}
|
||||||
err := json.Unmarshal(body, &lpa)
|
err := json.Unmarshal(body, &lpa)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
@ -94,30 +96,30 @@ func buildREADME() {
|
|||||||
|
|
||||||
// 拼凑 README 需要渲染的数据
|
// 拼凑 README 需要渲染的数据
|
||||||
problems = lpa.StatStatusPairs
|
problems = lpa.StatStatusPairs
|
||||||
info = ConvertUserInfoModel(lpa)
|
info = m.ConvertUserInfoModel(lpa)
|
||||||
for _, v := range problems {
|
for _, v := range problems {
|
||||||
problemsMap[int(v.Stat.FrontendQuestionID)] = v
|
problemsMap[int(v.Stat.FrontendQuestionID)] = v
|
||||||
}
|
}
|
||||||
mdrows := ConvertMdModelFromSsp(problems)
|
mdrows := m.ConvertMdModelFromSsp(problems)
|
||||||
sort.Sort(SortByQuestionID(mdrows))
|
sort.Sort(m.SortByQuestionID(mdrows))
|
||||||
solutionIds, _, try := LoadSolutionsDir()
|
solutionIds, _, try := util.LoadSolutionsDir()
|
||||||
GenerateMdRows(solutionIds, mdrows)
|
m.GenerateMdRows(solutionIds, mdrows)
|
||||||
info.EasyTotal, info.MediumTotal, info.HardTotal, info.OptimizingEasy, info.OptimizingMedium, info.OptimizingHard, optimizingIds = statisticalData(problemsMap, solutionIds)
|
info.EasyTotal, info.MediumTotal, info.HardTotal, info.OptimizingEasy, info.OptimizingMedium, info.OptimizingHard, optimizingIds = statisticalData(problemsMap, solutionIds)
|
||||||
omdrows := ConvertMdModelFromIds(problemsMap, optimizingIds)
|
omdrows := m.ConvertMdModelFromIds(problemsMap, optimizingIds)
|
||||||
sort.Sort(SortByQuestionID(omdrows))
|
sort.Sort(m.SortByQuestionID(omdrows))
|
||||||
|
|
||||||
// 按照模板渲染 README
|
// 按照模板渲染 README
|
||||||
res, err := renderReadme("./template/template.markdown", len(solutionIds), try, Mdrows{Mdrows: mdrows}, Mdrows{Mdrows: omdrows}, info)
|
res, err := renderReadme("./template/template.markdown", len(solutionIds), try, m.Mdrows{Mdrows: mdrows}, m.Mdrows{Mdrows: omdrows}, info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
WriteFile("../README.md", res)
|
util.WriteFile("../README.md", res)
|
||||||
fmt.Println("write file successful")
|
fmt.Println("write file successful")
|
||||||
//makeReadmeFile(mds)
|
//makeReadmeFile(mds)
|
||||||
}
|
}
|
||||||
|
|
||||||
func renderReadme(filePath string, total, try int, mdrows, omdrows Mdrows, user UserInfo) ([]byte, error) {
|
func renderReadme(filePath string, total, try int, mdrows, omdrows m.Mdrows, user m.UserInfo) ([]byte, error) {
|
||||||
f, err := os.OpenFile(filePath, os.O_RDONLY, 0644)
|
f, err := os.OpenFile(filePath, os.O_RDONLY, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -165,8 +167,8 @@ func renderReadme(filePath string, total, try int, mdrows, omdrows Mdrows, user
|
|||||||
// false 渲染的链接是外部 HTTPS 链接,用于生成 PDF
|
// false 渲染的链接是外部 HTTPS 链接,用于生成 PDF
|
||||||
func buildChapterTwo(internal bool) {
|
func buildChapterTwo(internal bool) {
|
||||||
var (
|
var (
|
||||||
gr GraphQLResp
|
gr m.GraphQLResp
|
||||||
questions []Question
|
questions []m.Question
|
||||||
count int
|
count int
|
||||||
)
|
)
|
||||||
for index, tag := range chapterTwoSlug {
|
for index, tag := range chapterTwoSlug {
|
||||||
@ -178,25 +180,25 @@ func buildChapterTwo(internal bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
questions = gr.Data.TopicTag.Questions
|
questions = gr.Data.TopicTag.Questions
|
||||||
mdrows := ConvertMdModelFromQuestions(questions)
|
mdrows := m.ConvertMdModelFromQuestions(questions)
|
||||||
sort.Sort(SortByQuestionID(mdrows))
|
sort.Sort(m.SortByQuestionID(mdrows))
|
||||||
solutionIds, _, _ := LoadSolutionsDir()
|
solutionIds, _, _ := util.LoadSolutionsDir()
|
||||||
tl, err := loadMetaData(fmt.Sprintf("./meta/%v", chapterTwoFileName[index]))
|
tl, err := loadMetaData(fmt.Sprintf("./meta/%v", chapterTwoFileName[index]))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("err = %v\n", err)
|
fmt.Printf("err = %v\n", err)
|
||||||
}
|
}
|
||||||
tls := GenerateTagMdRows(solutionIds, tl, mdrows, internal)
|
tls := m.GenerateTagMdRows(solutionIds, tl, mdrows, internal)
|
||||||
//fmt.Printf("tls = %v\n", tls)
|
//fmt.Printf("tls = %v\n", tls)
|
||||||
// 按照模板渲染 README
|
// 按照模板渲染 README
|
||||||
res, err := renderChapterTwo(fmt.Sprintf("./template/%v.md", chapterTwoFileName[index]), TagLists{TagLists: tls})
|
res, err := renderChapterTwo(fmt.Sprintf("./template/%v.md", chapterTwoFileName[index]), m.TagLists{TagLists: tls})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if internal {
|
if internal {
|
||||||
WriteFile(fmt.Sprintf("../website/content/ChapterTwo/%v.md", chapterTwoFileName[index]), res)
|
util.WriteFile(fmt.Sprintf("../website/content/ChapterTwo/%v.md", chapterTwoFileName[index]), res)
|
||||||
} else {
|
} else {
|
||||||
WriteFile(fmt.Sprintf("./pdftemp/ChapterTwo/%v.md", chapterTwoFileName[index]), res)
|
util.WriteFile(fmt.Sprintf("./pdftemp/ChapterTwo/%v.md", chapterTwoFileName[index]), res)
|
||||||
}
|
}
|
||||||
|
|
||||||
count++
|
count++
|
||||||
@ -204,13 +206,13 @@ func buildChapterTwo(internal bool) {
|
|||||||
fmt.Printf("write %v files successful", count)
|
fmt.Printf("write %v files successful", count)
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadMetaData(filePath string) (map[int]TagList, error) {
|
func loadMetaData(filePath string) (map[int]m.TagList, error) {
|
||||||
f, err := os.OpenFile(filePath, os.O_RDONLY, 0644)
|
f, err := os.OpenFile(filePath, os.O_RDONLY, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
reader, metaMap := bufio.NewReader(f), map[int]TagList{}
|
reader, metaMap := bufio.NewReader(f), map[int]m.TagList{}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
line, _, err := reader.ReadLine()
|
line, _, err := reader.ReadLine()
|
||||||
@ -223,7 +225,7 @@ func loadMetaData(filePath string) (map[int]TagList, error) {
|
|||||||
s := strings.Split(string(line), "|")
|
s := strings.Split(string(line), "|")
|
||||||
v, _ := strconv.Atoi(strings.Split(s[1], ".")[0])
|
v, _ := strconv.Atoi(strings.Split(s[1], ".")[0])
|
||||||
// v[0] 是题号,s[4] time, s[5] space, s[6] favorite
|
// v[0] 是题号,s[4] time, s[5] space, s[6] favorite
|
||||||
metaMap[v] = TagList{
|
metaMap[v] = m.TagList{
|
||||||
FrontendQuestionID: int32(v),
|
FrontendQuestionID: int32(v),
|
||||||
Acceptance: "",
|
Acceptance: "",
|
||||||
Difficulty: "",
|
Difficulty: "",
|
||||||
@ -234,7 +236,7 @@ func loadMetaData(filePath string) (map[int]TagList, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func renderChapterTwo(filePath string, tls TagLists) ([]byte, error) {
|
func renderChapterTwo(filePath string, tls m.TagLists) ([]byte, error) {
|
||||||
f, err := os.OpenFile(filePath, os.O_RDONLY, 0644)
|
f, err := os.OpenFile(filePath, os.O_RDONLY, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -270,18 +272,18 @@ func buildBookMenu() {
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
WriteFile("../website/content/menu/index.md", res)
|
util.WriteFile("../website/content/menu/index.md", res)
|
||||||
fmt.Println("generate Menu successful")
|
fmt.Println("generate Menu successful")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 拷贝 leetcode 目录下的题解 README 文件至第四章对应文件夹中
|
// 拷贝 leetcode 目录下的题解 README 文件至第四章对应文件夹中
|
||||||
func copyLackFile() {
|
func copyLackFile() {
|
||||||
solutionIds, soName, _ := LoadSolutionsDir()
|
solutionIds, soName, _ := util.LoadSolutionsDir()
|
||||||
_, ch4Ids := LoadChapterFourDir()
|
_, ch4Ids := util.LoadChapterFourDir()
|
||||||
|
|
||||||
needCopy := []string{}
|
needCopy := []string{}
|
||||||
for i := 0; i < len(solutionIds); i++ {
|
for i := 0; i < len(solutionIds); i++ {
|
||||||
if BinarySearch(ch4Ids, solutionIds[i]) == -1 {
|
if util.BinarySearch(ch4Ids, solutionIds[i]) == -1 {
|
||||||
needCopy = append(needCopy, soName[i])
|
needCopy = append(needCopy, soName[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -293,12 +295,12 @@ func copyLackFile() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
err = os.MkdirAll(fmt.Sprintf("../website/content/ChapterFour/%v", GetChpaterFourFileNum(tmp)), os.ModePerm)
|
err = os.MkdirAll(fmt.Sprintf("../website/content/ChapterFour/%v", util.GetChpaterFourFileNum(tmp)), os.ModePerm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
CopyFile(fmt.Sprintf("../website/content/ChapterFour/%v/%v.md", GetChpaterFourFileNum(tmp), needCopy[i]), fmt.Sprintf("../leetcode/%v/README.md", needCopy[i]))
|
util.CopyFile(fmt.Sprintf("../website/content/ChapterFour/%v/%v.md", util.GetChpaterFourFileNum(tmp), needCopy[i]), fmt.Sprintf("../leetcode/%v/README.md", needCopy[i]))
|
||||||
CopyFile(fmt.Sprintf("../website/content/ChapterFour/%v/_index.md", GetChpaterFourFileNum(tmp)), "./template/collapseSection.md")
|
util.CopyFile(fmt.Sprintf("../website/content/ChapterFour/%v/_index.md", util.GetChpaterFourFileNum(tmp)), "./template/collapseSection.md")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2,16 +2,19 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
|
m "github.com/halfrost/LeetCode-Go/ctl/models"
|
||||||
|
"github.com/halfrost/LeetCode-Go/ctl/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func statisticalData(problemsMap map[int]StatStatusPairs, solutionIds []int) (easyTotal, mediumTotal, hardTotal, optimizingEasy, optimizingMedium, optimizingHard int32, optimizingIds []int) {
|
func statisticalData(problemsMap map[int]m.StatStatusPairs, solutionIds []int) (easyTotal, mediumTotal, hardTotal, optimizingEasy, optimizingMedium, optimizingHard int32, optimizingIds []int) {
|
||||||
easyTotal, mediumTotal, hardTotal, optimizingEasy, optimizingMedium, optimizingHard, optimizingIds = 0, 0, 0, 0, 0, 0, []int{}
|
easyTotal, mediumTotal, hardTotal, optimizingEasy, optimizingMedium, optimizingHard, optimizingIds = 0, 0, 0, 0, 0, 0, []int{}
|
||||||
for _, v := range problemsMap {
|
for _, v := range problemsMap {
|
||||||
switch DifficultyMap[v.Difficulty.Level] {
|
switch m.DifficultyMap[v.Difficulty.Level] {
|
||||||
case "Easy":
|
case "Easy":
|
||||||
{
|
{
|
||||||
easyTotal++
|
easyTotal++
|
||||||
if v.Status == "ac" && BinarySearch(solutionIds, int(v.Stat.FrontendQuestionID)) == -1 {
|
if v.Status == "ac" && util.BinarySearch(solutionIds, int(v.Stat.FrontendQuestionID)) == -1 {
|
||||||
optimizingEasy++
|
optimizingEasy++
|
||||||
optimizingIds = append(optimizingIds, int(v.Stat.FrontendQuestionID))
|
optimizingIds = append(optimizingIds, int(v.Stat.FrontendQuestionID))
|
||||||
}
|
}
|
||||||
@ -19,7 +22,7 @@ func statisticalData(problemsMap map[int]StatStatusPairs, solutionIds []int) (ea
|
|||||||
case "Medium":
|
case "Medium":
|
||||||
{
|
{
|
||||||
mediumTotal++
|
mediumTotal++
|
||||||
if v.Status == "ac" && BinarySearch(solutionIds, int(v.Stat.FrontendQuestionID)) == -1 {
|
if v.Status == "ac" && util.BinarySearch(solutionIds, int(v.Stat.FrontendQuestionID)) == -1 {
|
||||||
optimizingMedium++
|
optimizingMedium++
|
||||||
optimizingIds = append(optimizingIds, int(v.Stat.FrontendQuestionID))
|
optimizingIds = append(optimizingIds, int(v.Stat.FrontendQuestionID))
|
||||||
}
|
}
|
||||||
@ -27,7 +30,7 @@ func statisticalData(problemsMap map[int]StatStatusPairs, solutionIds []int) (ea
|
|||||||
case "Hard":
|
case "Hard":
|
||||||
{
|
{
|
||||||
hardTotal++
|
hardTotal++
|
||||||
if v.Status == "ac" && BinarySearch(solutionIds, int(v.Stat.FrontendQuestionID)) == -1 {
|
if v.Status == "ac" && util.BinarySearch(solutionIds, int(v.Stat.FrontendQuestionID)) == -1 {
|
||||||
optimizingHard++
|
optimizingHard++
|
||||||
optimizingIds = append(optimizingIds, int(v.Stat.FrontendQuestionID))
|
optimizingIds = append(optimizingIds, int(v.Stat.FrontendQuestionID))
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,12 @@ import (
|
|||||||
"html/template"
|
"html/template"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
m "github.com/halfrost/LeetCode-Go/ctl/models"
|
||||||
|
"github.com/halfrost/LeetCode-Go/ctl/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func makeReadmeFile(mdrows Mdrows) {
|
func makeReadmeFile(mdrows m.Mdrows) {
|
||||||
file := "./README.md"
|
file := "./README.md"
|
||||||
os.Remove(file)
|
os.Remove(file)
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
@ -18,7 +21,7 @@ func makeReadmeFile(mdrows Mdrows) {
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
// 保存 README.md 文件
|
// 保存 README.md 文件
|
||||||
WriteFile(file, b.Bytes())
|
util.WriteFile(file, b.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
func readTMPL(path string) string {
|
func readTMPL(path string) string {
|
||||||
|
3
ctl/util/go.mod
Normal file
3
ctl/util/go.mod
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module github.com/halfrost/LeetCode-Go/ctl/util
|
||||||
|
|
||||||
|
go 1.19
|
@ -1,4 +1,4 @@
|
|||||||
package main
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
6
go.mod
6
go.mod
@ -6,8 +6,14 @@ replace github.com/halfrost/LeetCode-Go/structures => ./structures
|
|||||||
|
|
||||||
replace github.com/halfrost/LeetCode-Go/template => ./template
|
replace github.com/halfrost/LeetCode-Go/template => ./template
|
||||||
|
|
||||||
|
replace github.com/halfrost/LeetCode-Go/ctl/util => ./ctl/util
|
||||||
|
|
||||||
|
replace github.com/halfrost/LeetCode-Go/ctl/models => ./ctl/models
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/BurntSushi/toml v1.2.0
|
github.com/BurntSushi/toml v1.2.0
|
||||||
|
github.com/halfrost/LeetCode-Go/ctl/models v0.0.0-20220910225043-e3bb5aff34d0
|
||||||
|
github.com/halfrost/LeetCode-Go/ctl/util v0.0.0-20220910225043-e3bb5aff34d0
|
||||||
github.com/halfrost/LeetCode-Go/structures v0.0.0-20220910233101-aa0e2c897b18
|
github.com/halfrost/LeetCode-Go/structures v0.0.0-20220910233101-aa0e2c897b18
|
||||||
github.com/halfrost/LeetCode-Go/template v0.0.0-20220910233504-e2a72e6212ce
|
github.com/halfrost/LeetCode-Go/template v0.0.0-20220910233504-e2a72e6212ce
|
||||||
github.com/mozillazg/request v0.8.0
|
github.com/mozillazg/request v0.8.0
|
||||||
|
@ -132,7 +132,7 @@ func (c *CLRUCache) worker() {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case el, ok := <-c.movePairs:
|
case el, ok := <-c.movePairs:
|
||||||
if ok == false {
|
if !ok {
|
||||||
goto clean
|
goto clean
|
||||||
}
|
}
|
||||||
if c.doMove(el) && c.list.Len() > c.cap {
|
if c.doMove(el) && c.list.Len() > c.cap {
|
||||||
|
Reference in New Issue
Block a user