Практика: Массивы, слайсы и карты
Онлайн редактор кода для Go
Здесь вы можете попробовать свои силы в программировании на языке Go. Для этого мы предоставляем вам онлайн редактор кода, в котором вы можете написать свой код и запустить его.
❗️ При обновлении страницы код пропадёт, по этому, сохраните свой код куда-нибудь, если он важный.
Задание 1 — Удаление дубликатов с сохранением порядка
Задание 1: Удаление дубликатов (порядок важен)
⏱️ Примерное время: 15-20 минутДан слайс строк. Верни новый слайс без дубликатов, сохраняя порядок первого появления элементов.
Требования:
- используй
map[string]struct{}как множество для отслеживания уже встреченных элементов - проходи по исходному слайсу один раз
- добавляй в результат только элементы, которых ещё нет в map
- сохраняй порядок первого появления
- выведи исходный слайс, результат и количество уникальных элементов
Пример вывода:
Исходный: [go rust go python rust zig]
Уникальные: [go rust python zig]
Количество: 4
Задание 2 — Простой LRU-кэш (ограниченный размер)
Задание 2: Простой LRU-кэш на слайсе и map
⏱️ Примерное время: 25-35 минутРеализуй кэш фиксированного размера (capacity = 4). При добавлении: если элемент уже есть — перемести в начало, если места нет — удали самый старый (последний).
Требования:
- используй слайс
[]stringдля порядка (слева — самые свежие) - используй
map[string]intдля хранения индекса элемента в слайсе - функция
Add(key string):- если ключ уже есть → перемести в начало слайса
- если места нет → удали последний элемент из слайса и map
- добавь новый в начало
- после каждой операции выводи текущее состояние кэша
- capacity = 4 (можно захардкодить)
Пример вывода:
Добавили A → [A]
Добавили B → [B A]
Добавили C → [C B A]
Добавили D → [D C B A]
Добавили E → [E D C B] ← A вытеснен
Задание 3 — Сортировка выбором с визуализацией
Задание 3: Сортировка выбором + визуализация
⏱️ Примерное время: 20-30 минутРеализуй сортировку выбором на слайсе чисел. После каждого прохода выводи текущее состояние в виде баров из звёздочек (*).
Требования:
- функция
SelectionSort(arr []int) - на каждом проходе:
- найти минимум в неотсортированной части
- поменять местами с первым неотсортированным
- вывести текущее состояние в виде баров: каждое число — столько звёздочек
- после сортировки вывести финальный результат
Пример визуализации (для [5,3,8,1]):
***** *** ******** *
***** *** ******** *
* *** ******** ***** ← поменяли 1 и 5
* *** ***** ********
* *** ***** ********
* *** ***** ******** ← финал
Подсказка: используй вложенные циклы + fmt.Printf("*") в цикле
Задание 4 — Частотный словарь (word frequency)
Задание 4: Частотный словарь слов
⏱️ Примерное время: 15-20 минутДана строка. Посчитай, сколько раз встречается каждое слово (регистр не важен, слова разделены пробелами).
Требования:
- используй
strings.Fieldsиstrings.ToLower - используй
map[string]int - выведи слова и их частоту (в любом порядке)
- если слово встречается 1 раз — всё равно выводи
Пример вывода:
go: 2
is: 2
great: 1
and: 1
fast: 1
Задание 5 — Инверсия карты (рейтинг → игры)
Задание 5: Инверсия топ-листа
⏱️ Примерное время: 20-25 минутДана карта map[string]int — ключ → значение. Построй обратную: значение → слайс ключей. Выведи по убыванию значения.
Требования:
- создай
map[int][]string - проходи по исходной карте и добавляй значение в соответствующий слайс
- собери все ключи в слайс, отсортируй по убыванию
- выведи в формате:
рейтинг: [ключ1, ключ2, ...]
Пример вывода:
97: [GTA V, Red Dead 2]
95: [The Witcher 3, Portal 2]
Задание 6 — Мини-LRU кэш с выводом состояния
Задание 6: Мини-LRU кэш (итоговое)
⏱️ Примерное время: 30-45 минутРеализуй LRU-кэш ёмкостью 4. После каждой операции выводи текущее состояние: [самый свежий ... самый старый]
Требования:
- ёмкость = 4
- используй слайс
[]stringдля порядка - используй
map[string]intдля хранения индекса в слайсе - функция
Add(key string):- если есть → перемести в начало
- если нет места → удали последний
- добавь в начало
- после каждой операции выводи кэш:
[самый свежий ... самый старый]
Пример вывода:
Add A → [A]
Add B → [B A]
...
Add E → [E D C B] ← A вытеснен
Слайсы и карты — это 80% повседневной работы в Go.
Освой append, срезание, map-ok-идиому и delete — и ты уже пишешь настоящий Go-код.