Строки, руны и пакеты strings/strconv

Строки, байты и руны: модель UTF-8 в Go

Содержание курса

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

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

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

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

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

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

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

Ввод и вывод

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

Пример

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

О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

Проверяется тестами (1)
  • Тест 1
    Ввод
    ["топот"]
    Ожидаемый вывод
    ["топот","yes"]
Функция RuneMirrorGo · Go 1.27 (Modal)
Как проверяется решение

Функция из package main вызывается автоматически. Возвращайте результат, main() и печать ответа не нужны. Значения JSON сравниваются без учёта порядка ключей объекта.

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