Folders and files Name Name Last commit message
Last commit date
parent directory
View all files
package readme
import (
"bytes"
"fmt"
"path/filepath"
"github.com/openset/leetcode/internal/base"
"github.com/openset/leetcode/internal/leetcode"
)
var CmdReadme = &base.Command{
Run: runReadme,
UsageLine: "readme",
Short: "build README.md file",
Long: "build README.md file.",
}
func runReadme(cmd *base.Command, args []string) {
if len(args) == 1 && args[0] == "page" {
buildCmd = "page"
fileName = "index.md"
leetcode.LockStr = " ♥"
}
if len(args) > 1 {
cmd.Usage()
return
}
var buf bytes.Buffer
buf.WriteString(base.AuthInfo(buildCmd))
buf.WriteString(defaultStr)
writeProblems(&buf)
base.FilePutContents(fileName, buf.Bytes())
}
func writeProblems(buf *bytes.Buffer) {
problems := leetcode.ProblemsAll().StatStatusPairs
count := len(problems)
if count > 0 {
maxId = problems[0].Stat.FrontendQuestionId
writeNav(buf)
// list
buf.WriteString("| # | Title | Solution | Difficulty |\n")
buf.WriteString("| :-: | - | - | :-: |\n")
n := buf.Len()
for i := 1; i < maxId/pageSize; i++ {
for problems[count-1].Stat.FrontendQuestionId <= pageSize*i {
count--
problems[count].WriteRow(buf)
}
fileName := filepath.Join("readme", fmt.Sprintf("%d-%d.md", pageSize*(i-1)+1, pageSize*i))
base.FilePutContents(fileName, buf.Bytes())
buf.Truncate(n)
}
for _, problem := range problems[0:count] {
problem.WriteRow(buf)
}
}
}
func writeNav(buf *bytes.Buffer) {
// table
buf.WriteString("<table><thead>\n")
for i := 0; i < maxId; i += step * num {
buf.WriteString("<tr>\n")
for j := 0; j < num; j++ {
buf.WriteString(fmt.Sprintf("\t<th align=\"center\"><a href=\"%s\">[%d-%d]</a></th>\n", linkStr(i+j*step+step), 1+i+j*step, i+j*step+step))
}
buf.WriteString("</tr>\n")
}
buf.WriteString("</thead></table>\n\n")
}
func linkStr(num int) string {
link := "https://github.com/openset/leetcode/blob/master/ "
if num > maxId-maxId%pageSize-pageSize {
link += fmt.Sprintf("README.md#%d", num)
} else {
link += fmt.Sprintf("readme/%d-%d.md#%d", (num-1)/pageSize*pageSize+1, ((num-1)/pageSize+1)*pageSize, num-step+1)
}
return link
}
var (
buildCmd = "readme"
fileName = "README.md"
maxId = 0
pageSize = 300
step = 50
num = 6
)
var defaultStr = `
# [LeetCode](https://openset.github.io/leetcode )
LeetCode Problems' Solutions
[[话题分类](https://github.com/openset/leetcode/blob/master/tag/README.md )]
[](https://travis-ci.org/openset/leetcode )
[](https://codecov.io/gh/openset/leetcode )
[](https://goreportcard.com/report/github.com/openset/leetcode )
[](https://github.com/openset/leetcode/graphs/contributors )
[](https://github.com/openset/leetcode/blob/master/LICENSE )
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fopenset%2Fleetcode?ref=badge_shield )
[](https://gitter.im/openset/leetcode?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge )
`
You can’t perform that action at this time.