You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.2 KiB
50 lines
1.2 KiB
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"gopkg.in/alecthomas/kingpin.v2"
|
|
"bytes"
|
|
)
|
|
|
|
func main() {
|
|
charCountPointer:= kingpin.Arg("char-count", "Number of characters to generate").Required().Int()
|
|
kingpin.Parse()
|
|
|
|
var charCount int=*charCountPointer
|
|
var ans bytes.Buffer
|
|
var tempCombi string
|
|
var combiArr [4]int
|
|
charsetCaps := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
charsetSmall := "abcdefgjijklmnopqrustuvwxyz"
|
|
charsetNum := "0123456789"
|
|
|
|
for ans.Len()<charCount {
|
|
tempCombi=string(charsetCaps[combiArr[0]]) + string(charsetSmall[combiArr[1]]) + string(charsetSmall[combiArr[2]]) + string(charsetNum[combiArr[3]])
|
|
if ans.Len()+len(tempCombi) < charCount {
|
|
ans.WriteString(tempCombi)
|
|
} else {
|
|
ans.WriteString(tempCombi[:charCount-ans.Len()])
|
|
}
|
|
|
|
addCombi(combiArr[:])
|
|
}
|
|
|
|
fmt.Println(ans.String())
|
|
}
|
|
|
|
func addCombi(combiArr []int) {
|
|
combiMax := [4]int{26, 26, 26, 10}
|
|
|
|
combiArr[len(combiArr)-1]+=1
|
|
|
|
for i:= len(combiArr)-1; i>0; i-- {
|
|
if combiArr[i] >= combiMax[i] {
|
|
combiArr[i] = 0
|
|
combiArr[i-1] += 1
|
|
}
|
|
}
|
|
|
|
if combiArr[0] >= combiMax[0] {
|
|
combiArr[0] = 0
|
|
}
|
|
}
|