Update utf8 task

This commit is contained in:
Fedor Korotkiy 2021-02-18 13:57:48 +03:00
parent 201caf1971
commit 549ee264a9
4 changed files with 6 additions and 6 deletions

View file

@ -5,8 +5,8 @@
Функция принимает на вход юникодную строку и должна возвращать строку,
состоящую из тех же юникодных рун, но записанных в обратном порядке.
Если строка содержит последовательность байт, не образующую корректный utf8, нужно развернуть
эту последовательность как отдельные байты.
Каждый байт входной строки, который не образует корректную utf8 последовательность, нужно
заменить на unicode replacement character.
Обратите внимание в тестах, что некоторые графемы распадаются при обращении строки.
Данный эффект связан с тем, что в юникоде некоторые руны умеют комбинироваться в одну графему.

View file

@ -37,7 +37,7 @@ func TestReverse(t *testing.T) {
{input: "🇩🇪", output: "🇪🇩"},
// NB: Флаг распался. :)
{input: "🏳️‍🌈", output: "🌈‍️🏳"},
{input: "\xff\x00\xff\x00", output: "\x00\xff\x00\xff"},
{input: "\xff\x00\xff\x00", output: "\x00\xef\xbf\xbd\x00\xef\xbf\xbd"},
} {
t.Run(fmt.Sprintf("#%v: %v", i, tc.input), func(t *testing.T) {
require.Equal(t, tc.output, Reverse(tc.input))

View file

@ -5,8 +5,8 @@
Функция принимает на вход юникодную строку и должна возвращать строку,
состоящую из тех же символов, но где все подряд идущие группы пробельных символов заменены на ' ' (один обычный пробел).
Некорректную utf8 последовательность функция должна оставлять без изменений.
Каждый байт входной строки, который не образует корректную utf8 последовательность, нужно
заменить на unicode replacement character.
## Примеры
Как запустить все тесты:

View file

@ -22,7 +22,7 @@ func TestCollapseSpaces(t *testing.T) {
{input: "\t*", output: " *"},
{input: " \t \t ", output: " "},
{input: " \tx\t ", output: " x "},
{input: "\xff\x00\xff\x00", output: "\xff\x00\xff\x00"},
{input: "\xff\x00 \xff\x00", output: "\xef\xbf\xbd\x00 \xef\xbf\xbd\x00"},
} {
t.Run(fmt.Sprintf("#%v: %v", i, tc.input), func(t *testing.T) {
require.Equal(t, tc.output, CollapseSpaces(tc.input))