Compare commits
5 Commits
Author | SHA1 | Date |
---|---|---|
|
2bc41aa412 | |
|
ae1aef1ad6 | |
|
65dca5de6e | |
|
c45e5c6e0e | |
|
62fdebec71 |
14
unpack.go
14
unpack.go
|
@ -45,8 +45,7 @@ func Unpack(str string) (string, error) {
|
||||||
if unicode.IsDigit(char) {
|
if unicode.IsDigit(char) {
|
||||||
currentState = number
|
currentState = number
|
||||||
numOfRepeat, _ = strconv.Atoi(string(char))
|
numOfRepeat, _ = strconv.Atoi(string(char))
|
||||||
n := strconv.Itoa(numOfRepeat)
|
repStr, err := repeatRune(runeArray[i-1], numOfRepeat)
|
||||||
repStr, err := repeatRune(runeArray[i-len(n)], numOfRepeat)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Если функция repeatRune возвращает ошибку, удаляем последний символ из результата.
|
// Если функция repeatRune возвращает ошибку, удаляем последний символ из результата.
|
||||||
res := result.String()
|
res := result.String()
|
||||||
|
@ -61,12 +60,10 @@ func Unpack(str string) (string, error) {
|
||||||
currentState = start
|
currentState = start
|
||||||
}
|
}
|
||||||
case number:
|
case number:
|
||||||
if char == '\\' {
|
if unicode.IsDigit(char) {
|
||||||
currentState = escape
|
var n = strconv.Itoa(numOfRepeat)
|
||||||
} else if unicode.IsDigit(char) {
|
numOfRepeat, _ = strconv.Atoi(n + string(char))
|
||||||
var n = strconv.Itoa(numOfRepeat) + string(char)
|
repStr, err := repeatRune(runeArray[i-2], numOfRepeat)
|
||||||
numOfRepeat, _ = strconv.Atoi(n)
|
|
||||||
repStr, err := repeatRune(runeArray[i-len(n)], numOfRepeat)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Если функция repeatRune возвращает ошибку, удаляем последний символ из результата.
|
// Если функция repeatRune возвращает ошибку, удаляем последний символ из результата.
|
||||||
res := result.String()
|
res := result.String()
|
||||||
|
@ -74,7 +71,6 @@ func Unpack(str string) (string, error) {
|
||||||
result.WriteString(res[0 : len(res)-1])
|
result.WriteString(res[0 : len(res)-1])
|
||||||
}
|
}
|
||||||
result.WriteString(repStr)
|
result.WriteString(repStr)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
result.WriteRune(char)
|
result.WriteRune(char)
|
||||||
currentState = start
|
currentState = start
|
||||||
|
|
|
@ -26,8 +26,6 @@ func TestUnpack(t *testing.T) {
|
||||||
{input: `qwe\45`, expected: `qwe44444`},
|
{input: `qwe\45`, expected: `qwe44444`},
|
||||||
{input: `qwe\\5`, expected: `qwe\\\\\`},
|
{input: `qwe\\5`, expected: `qwe\\\\\`},
|
||||||
{input: `qwe\\\3`, expected: `qwe\3`},
|
{input: `qwe\\\3`, expected: `qwe\3`},
|
||||||
{input: `qwe2\1`, expected: `qwee1`},
|
|
||||||
{input: `qwe2\\`, expected: `qwee\`},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range tests {
|
for _, tc := range tests {
|
||||||
|
@ -58,7 +56,6 @@ func TestStringContainsNumber(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
{input: "aaa10b", expected: "aaaaaaaaaaaab"},
|
{input: "aaa10b", expected: "aaaaaaaaaaaab"},
|
||||||
{input: "a12b4", expected: "aaaaaaaaaaaabbbb"},
|
{input: "a12b4", expected: "aaaaaaaaaaaabbbb"},
|
||||||
{input: "a100", expected: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
||||||
}
|
}
|
||||||
for _, tc := range testStrings {
|
for _, tc := range testStrings {
|
||||||
t.Run(tc.input, func(t *testing.T) {
|
t.Run(tc.input, func(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue