Implemented not repeating combinations.
This commit is contained in:
parent
53291a3fa5
commit
af7fd31a47
1 changed files with 44 additions and 13 deletions
55
pin/pin.go
55
pin/pin.go
|
@ -14,15 +14,10 @@ var(
|
|||
arg0 string
|
||||
delim rune = '\n'
|
||||
status int = 0
|
||||
nVal int
|
||||
chrs []rune
|
||||
)
|
||||
|
||||
|
||||
func
|
||||
usage() {
|
||||
fmt.Fprintf(os.Stderr, "usage: %s [n_utf8_chars] [len]\n", arg0)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func
|
||||
Pow(x, p int) int {
|
||||
ret := 1
|
||||
|
@ -46,8 +41,27 @@ func
|
|||
printPins(s []rune, l int) {
|
||||
n := Pow(len(s), l)
|
||||
for i:=0 ; i<n ; i++ {
|
||||
pin := GetPin(s, l, i)
|
||||
if Fits([]rune(pin)) {
|
||||
fmt.Println(GetPin(s, l, i))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func
|
||||
Fits(s []rune) bool {
|
||||
a := make([]int, len(chrs))
|
||||
for i, v1 := range chrs {
|
||||
for _, v2 := range s {
|
||||
if v1 == v2 {
|
||||
a[i]++
|
||||
if a[i] > nVal {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func
|
||||
|
@ -58,14 +72,31 @@ Run(args []string) int {
|
|||
"Add combinations with less number of chars starting with arg.")
|
||||
flagSet.BoolVar(&Lflag, "L", false,
|
||||
"Set less number to 1. Overrides l flag.")
|
||||
flagSet.IntVar(&nVal, "n", 1, "Max repeats of the rune." )
|
||||
flagSet.Parse(args[1:])
|
||||
args = flagSet.Args()
|
||||
if len(args) < 2 {
|
||||
usage()
|
||||
flagSet.Usage = func() {
|
||||
fmt.Fprintf(os.Stderr, "Usage of %s: %s [options] <tmpl_chars> [len]\n", arg0)
|
||||
flagSet.PrintDefaults()
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
var(
|
||||
err error
|
||||
n int
|
||||
)
|
||||
|
||||
if len(args) == 0 {
|
||||
flagSet.Usage()
|
||||
}
|
||||
|
||||
chrs = []rune(args[0])
|
||||
if len(args) == 2 {
|
||||
n, err = strconv.Atoi(args[1])
|
||||
} else if len(args) == 1 {
|
||||
n = len(chrs)
|
||||
}
|
||||
|
||||
chrs := []rune(args[0])
|
||||
n, err := strconv.Atoi(args[1])
|
||||
if err!=nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -76,7 +107,7 @@ Run(args []string) int {
|
|||
|
||||
if lval != 0 {
|
||||
if lval > n {
|
||||
usage()
|
||||
flagSet.Usage()
|
||||
}
|
||||
for i := lval ; i<=n ; i++ {
|
||||
printPins(chrs, i)
|
||||
|
|
Loading…
Reference in a new issue