1 回答
TA贡献1886条经验 获得超2个赞
根据您的描述 GetFromIndex(122) 应该返回 a8,而不是 bb
要么我没有得到正确的场景,要么我们缺少信息
-编辑-
我不确定这是最好的方法
第一个角色每次都会移动
第 2 -> 3 次
第 3 次 -> 9 次 ...
我减去无用的循环
第二个 -> 每个 3 * len(array)
第三个 -> 每个 9 * len(array)
并获得他们在数组中的位置
func TestA(t *testing.T) {
for i:=0; i<=30; i++ {
fmt.Printf("%s i:{%d} \n",GetFromIndexBis(i),i)
}
}
func GetFromIndex(index int) string {
var basicChars = []rune("abc")
len := len(basicChars)
pow := 1
sumPow := 0
res :=""
// the first is a simple modulo
res += string(basicChars[index%len])
for {
pow = pow * len
// is the index big enought ?
if index < pow+sumPow{
break
}
// remove the first cycles where nothing pushed the wheels
start := index - sumPow
// number of cycle we need to make a full turn
fullCycles := pow * len
if start>=fullCycles {
nbrOfUselessCycles := start / fullCycles
start = start - fullCycles * nbrOfUselessCycles
}
index := (start / pow) -1
// it's the last one
if (index == -1) {
res += string(basicChars[len-1])
}else {
res += string(basicChars[index])
}
sumPow += pow
}
return res
}
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报