Перейти к основному содержимому

Практика: Массивы, слайсы и карты


Онлайн редактор кода для 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-код.