Строки, байты и руны: модель UTF-8 в Go
Содержание курса
Перевёртыш на рунах
Кириллица устроена иначе, чем латиница: каждый её символ занимает в памяти несколько байтов, и наивная попытка пройтись по строке с конца, опираясь на позиции байтов, неизбежно разрежет букву пополам и превратит текст в мусор. Чтобы обращаться с текстом корректно, нужно мыслить не байтами, а целыми символами — теми самыми неделимыми единицами, которые на практике называют рунами.
Задача состоит в том, чтобы взять произвольную строку, введённую пользователем, и получить её зеркальное отражение: последний символ становится первым, предпоследний — вторым, и так до самого начала. При этом каждый многобайтный символ должен остаться нетронутым — буква «я» не теряет ни одного из своих байтов и не сливается с соседом.
Когда зеркальная копия построена, её естественно сравнить с оригиналом. Совпадение означает, что строка читается одинаково в обоих направлениях — это свойство, которое издавна привлекает внимание и рождает симметричные слова и фразы на самых разных языках. Сравнение проводится честно: регистр не приводится к единому виду, пробелы не выбрасываются, строки берутся такими, какими их написал пользователь.
В итоге программа выводит развёрнутую строку и сообщает, совпала ли она с исходной, — два простых факта, которые вместе дают полное представление о симметрии введённого текста.
Что нужно сделать
Реализуйте функцию RuneMirror(text string) []string. Преобразуйте строку в []rune, разверните руны, соберите строку обратно и верните срез из двух строк: развёрнутый текст и yes, если он в точности равен исходному, иначе no. Регистр, пробелы и знаки препинания не изменяются.
Ввод и вывод
Функция получает одну строку и возвращает []string{развёрнутаяСтрока, признак}. Читать stdin и печатать результат не нужно.
Пример
RuneMirror("топот") возвращает []string{"топот", "yes"}, а RuneMirror("Go🙂") — []string{"🙂oG", "no"}.
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
["топот"]
Ожидаемый вывод["топот","yes"]
Как проверяется решение
Функция из package main вызывается автоматически. Возвращайте результат, main() и печать ответа не нужны. Значения JSON сравниваются без учёта порядка ключей объекта.
Отправьте решение, чтобы увидеть результаты тестов.
