Go []rune: разворот строки UTF-8 без порчи кириллицы

Перевёртыш на рунах

Кириллица устроена иначе, чем латиница: каждый её символ занимает в памяти несколько байтов, и наивная попытка пройтись по строке с конца, опираясь на позиции байтов, неизбежно разрежет букву пополам и превратит текст в мусор. Чтобы обращаться с текстом корректно, нужно мыслить не байтами, а целыми символами — теми самыми неделимыми единицами, которые на практике называют рунами.

Задача состоит в том, чтобы взять произвольную строку, введённую пользователем, и получить её зеркальное отражение: последний символ становится первым, предпоследний — вторым, и так до самого начала. При этом каждый многобайтный символ должен остаться нетронутым — буква «я» не теряет ни одного из своих байтов и не сливается с соседом.

Когда зеркальная копия построена, её естественно сравнить с оригиналом. Совпадение означает, что строка читается одинаково в обоих направлениях — это свойство, которое издавна привлекает внимание и рождает симметричные слова и фразы на самых разных языках. Сравнение проводится честно: регистр не приводится к единому виду, пробелы не выбрасываются, строки берутся такими, какими их написал пользователь.

В итоге программа выводит развёрнутую строку и сообщает, совпала ли она с исходной, — два простых факта, которые вместе дают полное представление о симметрии введённого текста.

Что нужно сделать

Реализуйте функцию RuneMirror(text string) []string. Преобразуйте строку в []rune, разверните руны, соберите строку обратно и верните срез из двух строк: развёрнутый текст и yes, если он в точности равен исходному, иначе no. Регистр, пробелы и знаки препинания не изменяются.

Ввод и вывод

Функция получает одну строку и возвращает []string{развёрнутаяСтрока, признак}. Читать stdin и печатать результат не нужно.

Пример

RuneMirror("топот") возвращает []string{"топот", "yes"}, а RuneMirror("Go🙂") — []string{"🙂oG", "no"}.

Пример

Ввод
["топот"]
Вывод
["топот","yes"]
РешениеGo

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи