Часть 1. Домашнее задание

Страничка курса: https://maxcom.github.io/scala-course-2022/

Немного о коллекциях

(минимум необходимый для выполнения ДЗ).

Подробно устройство коллекций рассмотрим на втором занятии.

Seq[T] – общий тип для коллекций, имеющих определенный порядок

ArrayBuffer[T] – на базе массива, аналог ArrayList из Java

Vector[T] – неизменяемый аналог ArrayList

List[T] пока не используем.


val buffer = ArrayBuffer[Int](1, 2, 3)
// тип указывать не обязательно

buffer += 4 // добавление элемента
// в Scala можно переопределять операторы
					

buffer(1) // получение элемента
// exception при выходе за границу

buffer.get(1) // получение элемента
// возвращает Option
					

У стандартных коллекций много полезных функций

Справка на Vector: scaladoc.

Пример: разделение Vector на две части

val v = Vector(1, 2, 3, 4)

val (first, second) = v.splitAt(v.length / 2)

// first == Vector(1,2)
// second == Vector(3,4)
					

Задание 1: merge sort

Реализуем сортировку слиянием
для Vector[Int]

Описание алгоритма: на wikipedia

Неплохая визуализация
(надо выбрать "merge sort")

Задание 2: top-n sort

Ищем N самых меньших значений, не выполняя полной сортировки. Повторяющиеся значения не теряем.

Один проход по вектору, собираем N результатов по ходу движения.

Используем всё что найдем в стандартной библиотеке.

Решение должно давать те же результаты что и


topn(input: Vector[Int], n: Int) = input.sorted.take(n)
					

только без полной пересортировки

Задание 3: уникальный merge sort

Модифицируем merge sort так, чтобы он выдавал только уникальные значения.

Дубли убираем в при merge.

Как выкладывать ДЗ

  • Регистрируемся на gitlab.com
  • Создаем один приватный проект на все 3 задачи,
    называем scala-2022-task1 ("Create blank project").
    "Initialize repository with a README" должен быть включен
Вытаскиваем репозитарий и делаем в нем ветку work

git clone git@gitlab.com:yourname/scala-2022-task1.git
cd scala-2022-task1
git checkout -b work
					

В ветку помещаем код решения, коммитим и git push

В git только исходники!

Добавляем права на репозитарий проверяющим (роль maintainer).
Список будет опубликован в telegram.

Создаем merge request на master,
assignee на maximvalyanskiy

Сами не принимайте merge request!

Напоминаю:

  • К семинару должен быть результат.
  • Сможете сделать раньше -- мы раньше проверим.
  • Страничка курса:
    https://maxcom.github.io/scala-course-2022/