package
1.6.6
Repository: https://github.com/awesee/leetcode.git
Documentation: pkg.go.dev

# README

// Package readme implements the command readme. package readme

import ( "bytes" "fmt" "path/filepath"

"github.com/awesee/leetcode/internal/base"
"github.com/awesee/leetcode/internal/leetcode"

)

const defaultStr = `

LeetCode

LeetCode Problems' Solutions [力扣话题分类]

Go codecov Go Report Card GitHub contributors license FOSSA Status Join the chat

`

// CmdReadme - readme.CmdReadme var CmdReadme = &base.Command{ Run: runReadme, UsageLine: "readme", Short: "build README.md file", Long: "build README.md file.", Hidden: true, }

var ( buildCmd = "readme" fileName = "README.md" maxID = 0 pageSize = 300 step = 50 num = 6 )

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 <= pageSizei { count-- problems[count].WriteRow(buf, "../problems") } 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, "problems") } } }

func writeNav(buf bytes.Buffer) { // table buf.WriteString("

\n") for i := 0; i < maxID; i += step * num { buf.WriteString("\n") for j := 0; j < num; j++ { buf.WriteString(fmt.Sprintf("\t<th align="center"><a href="%s">[%d-%d]\n", linkStr(i+jstep+step), 1+i+jstep, i+jstep+step)) } buf.WriteString("\n") } buf.WriteString("
\n\n") }

func linkStr(num int) string { if num > maxID-maxID%pageSize-pageSize { return fmt.Sprintf("%s/README.md#%d", base.URL, num) } return fmt.Sprintf("%s/readme/%d-%d.md#%d", base.URL, (num-1)/pageSize*pageSize+1, ((num-1)/pageSize+1)*pageSize, num-step+1) }