shad-go/utf8/reverse
2021-02-18 13:37:40 +03:00
..
README.md Update utf8 task 2021-02-18 13:37:40 +03:00
reverse.go Combine utf8reverse and utf8spacecollapse into single umbrella utf8 task. 2020-02-26 23:26:57 +03:00
reverse_test.go Update utf8 task 2021-02-18 13:37:40 +03:00

utf8reverse

Реализуйте функцию reverse.Reverse.

Функция принимает на вход юникодную строку и должна возвращать строку, состоящую из тех же юникодных рун, но записанных в обратном порядке.

Если строка содержит последовательность байт, не образующую корректный utf8, нужно развернуть эту последовательность как отдельные байты.

Обратите внимание в тестах, что некоторые графемы распадаются при обращении строки. Данный эффект связан с тем, что в юникоде некоторые руны умеют комбинироваться в одну графему.

Ваша реализация должна быть достаточно эффективна. На нашем бенчмарке в тестовой системе она должна работать не хуже авторского решения. В частности, код должен делать не больше двух аллокаций. Эту функцию можно написать с одной аллокацией, но придётся использовать пакет unsafe. Работу с unsafe мы будем разбирать дальше в курсе.

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/...