Combine utf8reverse and utf8spacecollapse into single umbrella utf8 task.
This commit is contained in:
parent
dd45f7e32c
commit
d3d949d6f4
9 changed files with 13 additions and 62 deletions
5
utf8/README.md
Normal file
5
utf8/README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# utf8*
|
||||
|
||||
Задача объединяет несколько задач на строки и unicode.
|
||||
|
||||
Задача считается решённой, если все подзадачи решены.
|
|
@ -1,6 +1,6 @@
|
|||
# utf8reverse
|
||||
|
||||
Реализуйте функцию `utf8reverse.Reverse`.
|
||||
Реализуйте функцию `reverse.Reverse`.
|
||||
|
||||
Функция принимает на вход юникодную строку и должна возвращать строку,
|
||||
состоящую из тех же юникодных рун, но записанных в обратном порядке.
|
||||
|
@ -12,5 +12,5 @@
|
|||
|
||||
Как запустить все тесты:
|
||||
```
|
||||
go test -v ./utf8reverse/...
|
||||
go test -v ./utf8/reverse/...
|
||||
```
|
|
@ -1,6 +1,6 @@
|
|||
// +build !solution
|
||||
|
||||
package utf8reverse
|
||||
package reverse
|
||||
|
||||
func Reverse(input string) string {
|
||||
return ""
|
|
@ -1,4 +1,4 @@
|
|||
package utf8reverse
|
||||
package reverse
|
||||
|
||||
import (
|
||||
"fmt"
|
|
@ -1,6 +1,6 @@
|
|||
# utf8spacecollapse
|
||||
|
||||
Реализуйте функцию `utf8spacecollapse.CollapseSpaces`.
|
||||
Реализуйте функцию `spacecollapse.CollapseSpaces`.
|
||||
|
||||
Функция принимает на вход юникодную строку и должна возвращать строку,
|
||||
состоящую из тех же символов, но где все подряд идущие группы пробельных символов заменены на ' ' (один обычный пробел).
|
||||
|
@ -9,5 +9,5 @@
|
|||
|
||||
Как запустить все тесты:
|
||||
```
|
||||
go test -v ./utf8spacecollapse/...
|
||||
go test -v ./utf8/spacecollapse/...
|
||||
```
|
|
@ -1,6 +1,6 @@
|
|||
// +build !solution
|
||||
|
||||
package utf8spacecollapse
|
||||
package spacecollapse
|
||||
|
||||
func CollapseSpaces(input string) string {
|
||||
return ""
|
|
@ -1,4 +1,4 @@
|
|||
package utf8spacecollapse
|
||||
package spacecollapse
|
||||
|
||||
import (
|
||||
"fmt"
|
|
@ -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)
|
||||
}
|
|
@ -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])
|
||||
}
|
Loading…
Reference in a new issue