Практика: Массивы, слайсы и карты
Онлайн редактор кода для Go
Здесь вы можете попробовать свои силы в программировании на языке Go. Для этого мы предоставляем вам онлайн редактор кода, в котором вы можете написать свой код и запустить его.
❗️ При обновлении страницы код пропадёт, по этому, сохраните свой код куда-нибудь, если он важный.
Задание 1: Уникальные элементы с сохранением порядка
Задание 1: Очистка дубликатов
Создай слайс с повторяющимися элементами. Напиши функцию, которая возвращает новый слайс без дубликатов, сохраняя порядок первого появления элементов. Выведи исходный и очищенный слайс + количество уникальных элементов.
💡 Подсказка
Используй map для отслеживания уже встреченных элементов.
Проходи по исходному слайсу и добавляй в результат только те элементы, которых ещё нет в map.
Сохрани порядок — добавляй элементы в том порядке, в котором они впервые появляются.
После решения основного теста проверь на дополнительных примерах.
Задание 2: Contains Duplicate (Есть ли дубликаты)
Задание 2: Contains Duplicate (L)
Дан слайс целых чисел nums. Выведи true, если в нём есть хотя бы один дубликат, иначе false.
💡 Подсказка
Самый простой способ — использовать map или множество (map[T]struct).
Проходи по слайсу и проверяй, встречалось ли число раньше.
Если слайс пустой или из одного элемента — сразу false.
Проверь свой код на дополнительных примерах после решения основного.
Задание 3: Сортировка выбором с визуализацией
Задание 3: Сортировка выбором
Создай слайс чисел. Реализуй сортировку выбором: на каждом шаге находи минимальный элемент в неотсортированной части и меняй его местами с первым неотсортированным. После каждого прохода выводи текущий слайс в виде баров из звёздочек.
💡 Подсказка
На каждом проходе (от 0 до len-1) ищи минимальный элемент в оставшейся части и меняй местами.
Для визуализации: для каждого числа выводи соответствующее количество звёздочек (*).
Выводи состояние после каждого прохода и финальный отсортированный слайс.
Проверь на дополнительных примерах.
Задание 4: Объединение карт с приоритетом
Задание 4: Объединение карт
Создай две карты map[string]int. Напиши функцию, которая объединяет их в одну: если ключ есть в обеих — берётся значение из второй карты. Выведи все три карты.
💡 Подсказка
Создай новую карту.
Сначала скопируй все элементы из первой карты.
Затем пройди по второй карте и добавь/перезапиши значения — они имеют приоритет.
Выведи все три карты для наглядности (можно в цикле for range).
Задание 5: Простое множество (Set)
Задание 5: Множество на основе map
Реализуй простое множество целых чисел на основе map[int]struct{}. Добавь операции: добавление, удаление, проверка наличия и вывод всех элементов (в любом порядке).
💡 Подсказка
Используй тип map[int]struct — struct занимает 0 байт.
Добавление: m[value] = struct
Удаление: delete(m, value)
Проверка: _, ok := m[value]
Для вывода собери ключи в слайс.
Задание 6: Мини-LRU кэш
Задание 6: LRU-кэш на слайсе и карте
Реализуй простой LRU-кэш фиксированного размера (4 элемента). При добавлении: если элемент уже есть — перемести в начало, если кэш полон — удали самый старый. Используй слайс для порядка и map для быстрого поиска.
💡 Подсказка
Используй слайс для хранения порядка (недавно использованные в начале).
Map[string]int хранит индекс элемента в слайсе для быстрого поиска.
При добавлении существующего — удали старое положение и добавь в начало.
При переполнении — удали последний элемент из слайса и из map.
Задание 7: Инверсия топ-листа
Задание 7: Инверсия топ-листа
Захардкодь карту 'игра → рейтинг'. Напиши функцию, которая инвертирует её: рейтинг → список игр с таким рейтингом. Выведи топ-лист по убыванию рейтинга (от самого высокого к низкому).
💡 Подсказка
Создай новую карту, где ключ — рейтинг (int), значение — слайс строк с названиями игр.
Проходи по исходной карте и добавляй каждую игру в соответствующий список рейтинга.
Для вывода по убыванию собери все рейтинги в слайс, отсортируй по убыванию и выводи от большего к меньшему.
Выдели лидеров с максимальным рейтингом (можно отдельной строкой).
Задание 8: Roman to Integer (Римское число в десятичное)
Задание 8: Roman to Integer (L)
Дана строка s — римское число (гарантируется корректность). Преобразуй его в обычное целое число (int) и выведи результат с пояснением.
💡 Подсказка
Римские цифры: I=1, V=5, X=10, L=50, C=100, D=500, M=1000.
Вычитание происходит, когда меньшая цифра стоит перед большей (IV=4, IX=9, XL=40 и т.д.).
Проходи по строке слева направо: добавляй значение текущей цифры, но если текущая меньше следующей — вычитай её.
В конце добавь значение последней цифры.
Можно использовать map[rune]int для значений символов.
Проверь свой код на дополнительных примерах после решения основного.
Дополнительные материалы
- Попробуй реализовать операции над слайсами (фильтр, мап, редукция) самостоятельно
- Поиграйся с ёмкостью (cap) при append — наблюдай, как она растёт
- Экспериментируй с размером кэша в LRU
Слайсы и карты — основные инструменты в Go. Освой их глубоко — и ты будешь писать эффективный и чистый код.
Структуры, методы и интерфейсы.