Compare commits

..

5 Commits
dev ... master

2 changed files with 5 additions and 12 deletions

View File

@ -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

View File

@ -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) {