24 lines
723 B
Go
24 lines
723 B
Go
package core
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"go-nkode/util"
|
|
)
|
|
|
|
func SelectKeyByAttrIdx(interfaceUser []int, passcodeIdxs []int, keypadSize KeypadDimension) ([]int, error) {
|
|
selectedKeys := make([]int, len(passcodeIdxs))
|
|
for idx := range passcodeIdxs {
|
|
attrIdx := util.IndexOf[int](interfaceUser, passcodeIdxs[idx])
|
|
if attrIdx == -1 {
|
|
return nil, errors.New(fmt.Sprintf("index: %d out of range 0-%d", passcodeIdxs[idx], keypadSize.TotalAttrs()-1))
|
|
}
|
|
keyNumb := attrIdx / keypadSize.AttrsPerKey
|
|
if keyNumb >= keypadSize.NumbOfKeys {
|
|
return nil, errors.New(fmt.Sprintf("index key number: %d out of range 0-%d", keyNumb, keypadSize.NumbOfKeys-1))
|
|
}
|
|
selectedKeys[idx] = keyNumb
|
|
}
|
|
return selectedKeys, nil
|
|
}
|