基于索引逐个计数的字符

huangapple go评论70阅读模式
英文:

counting up with characters based on index

问题

我的当前代码:

var basicChars = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
func GetFromIndex(index int) string {
    length := len(basicChars)

    size := 0 // size是最终字符串中字符的数量
    for {
        if float64(index) > math.Pow(float64(length), float64(size))-2 {
            size++
        } else {
            break
        }
    }

    str := make([]rune, size)

    for i := 0; i < size; i++ {
        str[i] = basicChars[index%length]
    }

    return string(str)
}

我试图使用字母而不是数字进行计数。

我知道可以使用for循环,但没有很好的方法来保存状态或无限增加。

英文:

My current code:

var basicChars = []rune(&quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&quot;)
func GetFromIndex(index int) string {
	length := len(basicChars)

	size := 0 // size is the amount of characters in the final string
	for {
		if float64(index) &gt; math.Pow(float64(length), float64(size))-2 {
			size++
		} else {
			break
		}
	}

	str := make([]rune, size)

	for i := 0; i &lt; size; i++ {
		str[i] = basicChars[index%length]
	}

	return string(str)
}

I am trying to count up with letters instead of numbers.

I know I can use for loops but there is no good way of saving state or going up indefinitely

答案1

得分: 1

根据你的描述,GetFromIndex(122)应该返回a8,而不是bb。

要么我没有理解正确的情景,要么我们缺少信息。

-编辑-

我不确定这是否是最好的方法:

  • 第一个字符每次移动
  • 第二个字符-> 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 :=""

    // 第一个字符是简单的模数
    res += string(basicChars[index%len])

    for {

        pow = pow * len
        // 索引是否足够大?
        if index < pow+sumPow{
            break
        }

        // 移除没有推动轮子的第一个循环
        start := index - sumPow

        // 需要进行完整转动的循环数
        fullCycles := pow * len

        if start>=fullCycles {
            nbrOfUselessCycles := start / fullCycles
            start = start - fullCycles * nbrOfUselessCycles
        }

        index := (start / pow) -1

        // 这是最后一个
        if (index == -1) {
            res += string(basicChars[len-1])    
        }else {
            res += string(basicChars[index])
        }

        sumPow += pow
    }

    return res
}
英文:

based on your description GetFromIndex(122) should return a8, not bb

either I didn't get the correct scenario or we are missing informations

-eddit-

I'm not sure it's the best way to do it

  • the first character will moove every time
  • the 2nd -> 3 times
  • the 3rd -> 9 times ...

I substract the useless cycles

  • the 2nd -> each 3 * len(array)
  • the 3rd -> each 9 * len(array)

and get their position in the array

func TestA(t *testing.T) {
	for i:=0; i&lt;=30; i++ {
		fmt.Printf(&quot;%s i:{%d} \n&quot;,GetFromIndexBis(i),i)
	}

}
func GetFromIndex(index int) string {
	var basicChars = []rune(&quot;abc&quot;)
	len := len(basicChars)
	pow := 1
	sumPow := 0
	res :=&quot;&quot;	
	
	// the first is a simple modulo
	res += string(basicChars[index%len])
	
	for {
		
		pow = pow * len
		// is the index big enought ?
		if index &lt; 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&gt;=fullCycles {
			nbrOfUselessCycles := start / fullCycles
			start = start - fullCycles * nbrOfUselessCycles
		}

		index := (start / pow) -1

		// it&#39;s the last one
		if (index == -1) {
			res += string(basicChars[len-1])	
		}else {
			res += string(basicChars[index])
		}
		
		sumPow += pow
	}
	
	return res
}

huangapple
  • 本文由 发表于 2022年10月5日 16:08:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/73957502.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定