Combine utf8reverse and utf8spacecollapse into single umbrella utf8 task.

This commit is contained in:
Arseny Balobanov 2020-02-26 23:26:57 +03:00
parent dd45f7e32c
commit d3d949d6f4
9 changed files with 13 additions and 62 deletions

5
utf8/README.md Normal file
View file

@ -0,0 +1,5 @@
# utf8*
Задача объединяет несколько задач на строки и unicode.
Задача считается решённой, если все подзадачи решены.

View file

@ -1,6 +1,6 @@
# utf8reverse
Реализуйте функцию `utf8reverse.Reverse`.
Реализуйте функцию `reverse.Reverse`.
Функция принимает на вход юникодную строку и должна возвращать строку,
состоящую из тех же юникодных рун, но записанных в обратном порядке.
@ -12,5 +12,5 @@
Как запустить все тесты:
```
go test -v ./utf8reverse/...
go test -v ./utf8/reverse/...
```

View file

@ -1,6 +1,6 @@
// +build !solution
package utf8reverse
package reverse
func Reverse(input string) string {
return ""

View file

@ -1,4 +1,4 @@
package utf8reverse
package reverse
import (
"fmt"

View file

@ -1,6 +1,6 @@
# utf8spacecollapse
Реализуйте функцию `utf8spacecollapse.CollapseSpaces`.
Реализуйте функцию `spacecollapse.CollapseSpaces`.
Функция принимает на вход юникодную строку и должна возвращать строку,
состоящую из тех же символов, но где все подряд идущие группы пробельных символов заменены на ' ' (один обычный пробел).
@ -9,5 +9,5 @@
Как запустить все тесты:
```
go test -v ./utf8spacecollapse/...
go test -v ./utf8/spacecollapse/...
```

View file

@ -1,6 +1,6 @@
// +build !solution
package utf8spacecollapse
package spacecollapse
func CollapseSpaces(input string) string {
return ""

View file

@ -1,4 +1,4 @@
package utf8spacecollapse
package spacecollapse
import (
"fmt"

View file

@ -1,24 +0,0 @@
// +build solution
package utf8reverse
import (
"unicode/utf8"
)
func Reverse(input string) string {
rs := []rune{}
sz := 0
for len(input) > 0 {
r, n := utf8.DecodeRuneInString(input)
rs = append(rs, r)
sz += utf8.RuneLen(r)
input = input[n:]
}
bs := make([]byte, sz)
for i, j := 0, 0; i < len(rs); i++ {
n := utf8.EncodeRune(bs[j:], rs[len(rs)-i-1])
j += n
}
return string(bs)
}

View file

@ -1,30 +0,0 @@
// +build solution
package utf8spacecollapse
import (
"unicode"
"unicode/utf8"
)
func CollapseSpaces(input string) string {
res := make([]byte, len(input))
pos := 0
lastWasSpace := false
for len(input) > 0 {
r, n := utf8.DecodeRuneInString(input)
input = input[n:]
if unicode.IsSpace(r) {
if lastWasSpace {
continue
}
res[pos] = ' '
pos++
lastWasSpace = true
} else {
pos += utf8.EncodeRune(res[pos:], r)
lastWasSpace = false
}
}
return string(res[:pos])
}