The problem
Create a operate that repeats every character by the quantity of it’s index worth of the unique string.
Examples:
accum("abcd") -> "A-Bb-Ccc-Dddd"
accum("RqaEzty") -> "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy"
accum("cwAt") -> "C-Ww-Aaa-Tttt"
The parameter of accum
is a string that features solely letters from a..z
and A..Z
.
The answer in Golang
Possibility 1:
package deal answer
import "strings"
func Accum(s string) string {
phrases := make([]string, len(s))
for i, c := vary s {
phrases[i] = strings.Title(strings.Repeat(strings.ToLower(string(c)), i+1))
}
return strings.Be a part of(phrases, "-")
}
Possibility 2:
package deal answer
import "unicode"
func Accum(s string) string {
res := ""
for i, r := vary s {
if i != 0 {
res += "-"
}
res += string(unicode.ToTitle(r))
for j := 0; j < i; j++ {
res += string(unicode.ToLower(r))
}
}
return res
}
Possibility 3:
package deal answer
import "strings"
func Accum(s string) string {
var b strings.Builder
for i, v := vary s {
b.WriteString(strings.ToUpper(string(v)))
b.WriteString(strings.Repeat(strings.ToLower(string(v)), i))
if (i < len(s) - 1) {
b.WriteString("-")
}
}
return b.String()
}
Check instances to validate our answer
package deal take a look at
import (
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
. "our/answer"
"math/rand"
"time"
"bytes"
)
func dotest(s string, exp string) {
var ans = Accum(s)
Count on(ans).To(Equal(exp))
}
func accumOCE(s string) string {
a := bytes.ToLower([]byte(s))
var res []byte
for i := 0; i < len(a); i++ {
t := bytes.Title(bytes.Repeat(a[i:i+1], i + 1))
res = append(res, t...)
res = append(res, "-"...)
}
return string(res[:len(res) -1])
}
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
func randStringBytes(n int) string {
b := make([]byte, n)
for i := vary b {
b[i] = letterBytes[rand.Intn(len(letterBytes))]
}
return string(b)
}
func random(min, max int) int {
return rand.Intn(max - min) + min
}
func randomdotest() {
rand.Seed(time.Now().UTC().UnixNano())
for i := 0; i < 50 ; i++ {
n := random(5, 12)
s := randStringBytes(n)
sol := accumOCE(s)
dotest(s, sol)
}
}
var _ = Describe("Check Instance", func() {
It("ought to deal with fundamental instances", func() {
dotest("ZpglnRxqenU", "Z-Pp-Ggg-Llll-Nnnnn-Rrrrrr-Xxxxxxx-Qqqqqqqq-Eeeeeeeee-Nnnnnnnnnn-Uuuuuuuuuuu")
dotest("NyffsGeyylB", "N-Yy-Fff-Ffff-Sssss-Gggggg-Eeeeeee-Yyyyyyyy-Yyyyyyyyy-Llllllllll-Bbbbbbbbbbb")
dotest("MjtkuBovqrU", "M-Jj-Ttt-Kkkk-Uuuuu-Bbbbbb-Ooooooo-Vvvvvvvv-Qqqqqqqqq-Rrrrrrrrrr-Uuuuuuuuuuu")
dotest("EvidjUnokmM", "E-Vv-Iii-Dddd-Jjjjj-Uuuuuu-Nnnnnnn-Oooooooo-Kkkkkkkkk-Mmmmmmmmmm-Mmmmmmmmmmm")
dotest("HbideVbxncC", "H-Bb-Iii-Dddd-Eeeee-Vvvvvv-Bbbbbbb-Xxxxxxxx-Nnnnnnnnn-Cccccccccc-Ccccccccccc")
dotest("VwhvtHtrxfE", "V-Ww-Hhh-Vvvv-Ttttt-Hhhhhh-Ttttttt-Rrrrrrrr-Xxxxxxxxx-Ffffffffff-Eeeeeeeeeee")
dotest("KurgiKmkphY", "Ok-Uu-Rrr-Gggg-Iiiii-Kkkkkk-Mmmmmmm-Kkkkkkkk-Ppppppppp-Hhhhhhhhhh-Yyyyyyyyyyy")
dotest("NctlfBlnmfH", "N-Cc-Ttt-Llll-Fffff-Bbbbbb-Lllllll-Nnnnnnnn-Mmmmmmmmm-Ffffffffff-Hhhhhhhhhhh")
dotest("WegunHvbdmV", "W-Ee-Ggg-Uuuu-Nnnnn-Hhhhhh-Vvvvvvv-Bbbbbbbb-Ddddddddd-Mmmmmmmmmm-Vvvvvvvvvvv")
dotest("VoywwSpqidE", "V-Oo-Yyy-Wwww-Wwwww-Ssssss-Ppppppp-Qqqqqqqq-Iiiiiiiii-Dddddddddd-Eeeeeeeeeee")
dotest("VbaixFpxdcO", "V-Bb-Aaa-Iiii-Xxxxx-Ffffff-Ppppppp-Xxxxxxxx-Ddddddddd-Cccccccccc-Ooooooooooo")
dotest("OlyqvYwkuzF", "O-Ll-Yyy-Qqqq-Vvvvv-Yyyyyy-Wwwwwww-Kkkkkkkk-Uuuuuuuuu-Zzzzzzzzzz-Fffffffffff")
dotest("JrhfdMtchiH", "J-Rr-Hhh-Ffff-Ddddd-Mmmmmm-Ttttttt-Cccccccc-Hhhhhhhhh-Iiiiiiiiii-Hhhhhhhhhhh")
dotest("JiwpcSwslvW", "J-Ii-Www-Pppp-Ccccc-Ssssss-Wwwwwww-Ssssssss-Lllllllll-Vvvvvvvvvv-Wwwwwwwwwww")
dotest("EagpiEvmabJ", "E-Aa-Ggg-Pppp-Iiiii-Eeeeee-Vvvvvvv-Mmmmmmmm-Aaaaaaaaa-Bbbbbbbbbb-Jjjjjjjjjjj")
dotest("RznlcEmuxxP", "R-Zz-Nnn-Llll-Ccccc-Eeeeee-Mmmmmmm-Uuuuuuuu-Xxxxxxxxx-Xxxxxxxxxx-Ppppppppppp")
dotest("OrggaExarzP", "O-Rr-Ggg-Gggg-Aaaaa-Eeeeee-Xxxxxxx-Aaaaaaaa-Rrrrrrrrr-Zzzzzzzzzz-Ppppppppppp")
dotest("DriraMtedfB", "D-Rr-Iii-Rrrr-Aaaaa-Mmmmmm-Ttttttt-Eeeeeeee-Ddddddddd-Ffffffffff-Bbbbbbbbbbb")
dotest("BjxseRxgtjT", "B-Jj-Xxx-Ssss-Eeeee-Rrrrrr-Xxxxxxx-Gggggggg-Ttttttttt-Jjjjjjjjjj-Ttttttttttt")
dotest("EquhxOswchE", "E-Qq-Uuu-Hhhh-Xxxxx-Oooooo-Sssssss-Wwwwwwww-Ccccccccc-Hhhhhhhhhh-Eeeeeeeeeee")
})
It("ought to deal with random instances", func() {
randomdotest()
})
})