Skip to content
This repository was archived by the owner on Dec 14, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file removed hw02_unpack_string/.sync
Empty file.
3 changes: 1 addition & 2 deletions hw02_unpack_string/go.mod
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
module github.com/fixme_my_friend/hw02_unpack_string
module github.com/DenSul/OtusGolang/hw02_unpack_string

go 1.16

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/stretchr/testify v1.7.0
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
)
7 changes: 0 additions & 7 deletions hw02_unpack_string/go.sum
Original file line number Diff line number Diff line change
@@ -1,20 +1,13 @@
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.5.0 h1:DMOzIV76tmoDNE9pX6RSN0aDtCYeCg5VueieJaAo1uw=
github.com/stretchr/testify v1.5.0/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
55 changes: 51 additions & 4 deletions hw02_unpack_string/unpack.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,59 @@
package hw02unpackstring
package main
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

После такого переименования пакет станет недоступным для импорта.

Если идея была проверить работоспособность функции, то для этого лучше использовать тесты


import (
"errors"
"strconv"
"strings"
"unicode"
)

var ErrInvalidString = errors.New("invalid string")

func Unpack(_ string) (string, error) {
// Place your code here.
return "", nil
func isValidStr(runesArray []rune) bool {
var previousIsDigit bool
for key, char := range runesArray {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю проверки перенести в один общий цикл, чтобы не перебирать строку дважды

currentIsDigit := unicode.IsDigit(char)
if key == 0 {
if currentIsDigit {
return false
}
previousIsDigit = currentIsDigit
continue
}

if currentIsDigit && previousIsDigit {
return false
}

previousIsDigit = currentIsDigit
}

return true
}

func Unpack(s string) (string, error) {
stringBuilder := strings.Builder{}
runesArray := []rune(s)
if !isValidStr(runesArray) {
return "", ErrInvalidString
}

var buf string
for key, char := range runesArray {
currentSymbol := string(char)
if unicode.IsDigit(char) && buf != "" && buf != "\\" {
countRepeat, _ := strconv.Atoi(currentSymbol)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ошибки важно обрабатывать

stringBuilder.WriteString(strings.Repeat(buf, countRepeat))
continue
}

if len(runesArray) > key+1 && unicode.IsDigit(runesArray[key+1]) {
buf = string(char)
continue
}

stringBuilder.WriteRune(char)
}

return stringBuilder.String(), nil
}
2 changes: 1 addition & 1 deletion hw02_unpack_string/unpack_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package hw02unpackstring
package main
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не хватает новых юнит-тестов


import (
"errors"
Expand Down