Привет, я самостоятельно изучаю 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
Последнее редактирование: