Проверяйте правила по приоритету: сначала позиция 15, затем кратность 5 и 3, затем обычная английская буква. Для русского алфавита используйте []rune, а не байтовые индексы.
Перебор английского алфавита с заменой символов по заданным правилам
Проверяйте правила по приоритету: сначала позиция 15, затем кратность 5 и 3, затем обычная английская буква. Для русского алфавита используйте []rune, а не байтовые индексы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать программу на Go, которая выводит последовательность символов английского алфавита от 'A' до 'Z' с учётом следующих преобразований:
- Каждый символ печатается на отдельной строке.
- Каждый третий символ заменяется его порядковым номером в алфавите (например, буква 'C' заменяется на число 3).
- Каждый пятый символ заменяется соответствующей русской буквой с тем же порядковым номером (например, пятая буква 'E' выводится как 'Д', так как в русском алфавите 'А'‑'Д' занимают позиции 1‑5).
- Пятнадцатый символ ('O') выводится в виде строки "Привет".
package main
import "fmt"
func main(){
}
Ответ
Проверяйте правила по приоритету: сначала позиция 15, затем кратность 5 и 3, затем обычная английская буква. Для русского алфавита используйте []rune, а не байтовые индексы.
Считаем Ё отдельной седьмой буквой русского алфавита:
func main() {
russian := []rune("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ")
for position := 1; position <= 26; position++ {
switch {
case position == 15: fmt.Println("Привет")
case position%5 == 0: fmt.Println(string(russian[position-1]))
case position%3 == 0: fmt.Println(position)
default: fmt.Println(string(rune('A'+position-1)))
}
}
}
Нужен fmt. В диапазоне A–Z единственное пересечение правил 3 и 5 — позиция 15, её явно обрабатывает специальная ветка.