2020-02-24 19:54:48 +00:00
|
|
|
|
# utf8reverse
|
|
|
|
|
|
2020-02-26 20:26:57 +00:00
|
|
|
|
Реализуйте функцию `reverse.Reverse`.
|
2020-02-24 19:54:48 +00:00
|
|
|
|
|
|
|
|
|
Функция принимает на вход юникодную строку и должна возвращать строку,
|
2020-02-26 09:17:51 +00:00
|
|
|
|
состоящую из тех же юникодных рун, но записанных в обратном порядке.
|
2020-02-24 19:54:48 +00:00
|
|
|
|
|
2021-02-18 10:57:48 +00:00
|
|
|
|
Каждый байт входной строки, который не образует корректную utf8 последовательность, нужно
|
|
|
|
|
заменить на unicode replacement character.
|
2021-02-18 10:37:40 +00:00
|
|
|
|
|
2020-02-24 19:54:48 +00:00
|
|
|
|
Обратите внимание в тестах, что некоторые графемы распадаются при обращении строки.
|
|
|
|
|
Данный эффект связан с тем, что в юникоде некоторые руны умеют комбинироваться в одну графему.
|
|
|
|
|
|
2021-02-18 10:37:40 +00:00
|
|
|
|
Ваша реализация должна быть достаточно эффективна. На нашем бенчмарке в тестовой системе
|
2021-02-18 10:49:29 +00:00
|
|
|
|
она должна работать не хуже авторского решения. Конкретно, можно делать не больше одной аллокации.
|
2023-02-20 11:34:21 +00:00
|
|
|
|
Это значит, что кроме выходной строки дополнительную память выделять нельзя. (Изучите тип [`strings.Builder`](https://pkg.go.dev/strings#Builder))
|
2021-02-18 10:37:40 +00:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
goos: linux
|
|
|
|
|
goarch: amd64
|
2023-10-02 19:32:41 +00:00
|
|
|
|
pkg: gitlab.com/manytask/itmo-go/private/utf8/reverse
|
2021-02-18 10:37:40 +00:00
|
|
|
|
BenchmarkReverse-4 395078 2763 ns/op 1792 B/op 2 allocs/op
|
|
|
|
|
PASS
|
|
|
|
|
```
|
2020-02-24 19:54:48 +00:00
|
|
|
|
### Примеры
|
|
|
|
|
|
|
|
|
|
Как запустить все тесты:
|
|
|
|
|
```
|
2020-02-26 20:26:57 +00:00
|
|
|
|
go test -v ./utf8/reverse/...
|
2020-02-24 19:54:48 +00:00
|
|
|
|
```
|