Привет, я самостоятельно изучаю Go, и с решеним одной из задач я пыхчу уже несколько дней, помогите пожалуйста.
	
	
		
			
	
	
	
		
			
	
Тут я еще как-то смог решить, подскажите пожалуйста, как можно решить эту задачу проще?
	
	
		
			
	
	
	
		
Как видно из примера, заэкранировать можно только цифру или слэш.
Тут я окончательно застрял
		
	
Версия GO: go1.17.6 linux/amd64
ОСь: Ubuntu 20.04.3 LTS
			
			Необходимо написать Go функцию, осуществляющую примитивную распаковку строки,
содержащую повторяющиеся символы/руны, например:
	
	
	
		
В случае, если была передана некорректная строка, функция должна возвращать ошибку.
При необходимости можно выделять дополнительные функции / ошибки.
		содержащую повторяющиеся символы/руны, например:
		Код:
	
	"a4bc2d5e" => "aaaabccddddde"
"abcd" => "abcd"
"3abc" => "" (некорректная строка)
"45" => "" (некорректная строка)
"aaa10b" => "" (некорректная строка)
"aaa0b" => "aab"
"" => ""
"d\n5abc" => "d\n\n\n\n\nabc"При необходимости можно выделять дополнительные функции / ошибки.
https://goplay.space/#hViyhbOXU8u
	
	
	
		
		
		Код:
	
	package hw02unpackstring
import (
    "errors"
    "strings"
    "unicode"
    "unicode/utf8"
)
var ErrInvalidString = errors.New("invalid string")
func Unpack(str string) (string, error) {
    var runeLast rune
    var strUnpacked string
    for i, w := 0, 0; i < len(str); i += w {
        runeValue, width := utf8.DecodeRuneInString(str[i:])
        w = width
        if runeLast == 0 {
            if unicode.IsDigit(runeValue) {
                return "", ErrInvalidString
            }
            runeLast = runeValue
            continue
        }
        if unicode.IsDigit(runeLast) && unicode.IsDigit(runeValue) {
            return "", ErrInvalidString
        }
        if !unicode.IsDigit(runeValue) || !unicode.IsLetter(runeLast) {
            // TODO: Если символ не должен умножаться на число, записывать символ в новую строку в исходном виде
            if unicode.IsLetter(runeLast) && unicode.IsLetter(runeValue) {
                strUnpacked += string(runeLast)
            }
            runeLast = runeValue
            continue
        }
        strUnpacked += strings.Repeat(string(runeLast), int(runeValue-'0'))
        runeLast = runeValue
    }
    if unicode.IsLetter(runeLast) {
        strUnpacked += string(runeLast)
    }
    return strUnpacked, nil
}Тут я еще как-то смог решить, подскажите пожалуйста, как можно решить эту задачу проще?
		Код:
	
	    `qwe\4\5` => "qwe45"
    `qwe\45` => "qwe44444"
    `qwe\\5` => `qwe\\\\\`
    `qw\ne` => "" (некорректная строка)Тут я окончательно застрял
Версия GO: go1.17.6 linux/amd64
ОСь: Ubuntu 20.04.3 LTS
			
				Последнее редактирование: 
				
		
	
										
										
											
	
										
									
								