30 lines
1.7 KiB
Markdown
30 lines
1.7 KiB
Markdown
# utf8reverse
|
||
|
||
Реализуйте функцию `reverse.Reverse`.
|
||
|
||
Функция принимает на вход юникодную строку и должна возвращать строку,
|
||
состоящую из тех же юникодных рун, но записанных в обратном порядке.
|
||
|
||
Каждый байт входной строки, который не образует корректную utf8 последовательность, нужно
|
||
заменить на unicode replacement character.
|
||
|
||
Обратите внимание в тестах, что некоторые графемы распадаются при обращении строки.
|
||
Данный эффект связан с тем, что в юникоде некоторые руны умеют комбинироваться в одну графему.
|
||
|
||
Ваша реализация должна быть достаточно эффективна. На нашем бенчмарке в тестовой системе
|
||
она должна работать не хуже авторского решения. Конкретно, можно делать не больше одной аллокации.
|
||
Это значит, что кроме выходной строки дополнительную память выделять нельзя. (Изучите тип [`strings.Builder`](https://pkg.go.dev/strings#Builder))
|
||
|
||
```
|
||
goos: linux
|
||
goarch: amd64
|
||
pkg: gitlab.com/slon/shad-go/utf8/reverse
|
||
BenchmarkReverse-4 395078 2763 ns/op 1792 B/op 2 allocs/op
|
||
PASS
|
||
```
|
||
### Примеры
|
||
|
||
Как запустить все тесты:
|
||
```
|
||
go test -v ./utf8/reverse/...
|
||
```
|