From 3a33ba26c3a6713326aa5c2b9283eaa088a5b119 Mon Sep 17 00:00:00 2001 From: Karavaev Date: Mon, 1 Sep 2025 17:02:47 +0300 Subject: [PATCH] Homework_Kotlin#4 --- .../kotlin/ru/otus/homework/NaturalList.kt | 36 ++++++++++++++++--- .../ru/otus/homework/mapswap/mapSwap.kt | 2 +- .../ru/otus/homework/persons/persons.kt | 4 +-- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/ru/otus/homework/NaturalList.kt b/src/main/kotlin/ru/otus/homework/NaturalList.kt index a8a41b1..e48e3c0 100644 --- a/src/main/kotlin/ru/otus/homework/NaturalList.kt +++ b/src/main/kotlin/ru/otus/homework/NaturalList.kt @@ -35,14 +35,26 @@ class NaturalList(n: Int) : List { * Вернуть под-список этого списка, включая [fromIndex] и НЕ включая [toIndex] */ override fun subList(fromIndex: Int, toIndex: Int): List { - TODO("Not yet implemented") + var pos = fromIndex + val sList = List(toIndex - fromIndex) { this.get(pos++) } + return sList } /** * Returns true if list contains all numbers in the collection */ override fun containsAll(elements: Collection): Boolean { - TODO("Not yet implemented") + var checkFlag: Boolean = false + for (i in 0 until elements.size) { + checkFlag = false + for (j in 0 until this.size) { + if (this.elementAt(j) == elements.elementAt(i)) { + checkFlag = true; break + } + } + if (!checkFlag) break + } + return checkFlag } override fun toString(): String { @@ -53,13 +65,29 @@ class NaturalList(n: Int) : List { * Функция должна возвращать true, если сравнивается с другой реализацией списка тех же чисел * Например, NaturalList(5) должен быть равен listOf(1,2,3,4,5) */ - override fun equals(other: Any?): Boolean = false + override fun equals(other: Any?): Boolean { + if (this === other) return true + val iter = this.listIterator() + val otherList = other as List + val otherIter = otherList.listIterator() + while (iter.hasNext() && otherIter.hasNext()) { + if (iter.next() != otherIter.next()) return false + } + + return !(iter.hasNext() || otherIter.hasNext()) + } /** * Функция должна возвращать тот же hash-code, что и список другой реализации тех же чисел * Например, NaturalList(5).hashCode() должен быть равен listOf(1,2,3,4,5).hashCode() */ - override fun hashCode(): Int = -1 + override fun hashCode(): Int { + var hashCode = 1 + for (e in this) { + hashCode = 31 * hashCode + (if (e == null) 0 else e.hashCode()) + } + return hashCode + } } private class NaturalIterator(private val n: Int) : Iterator { diff --git a/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt b/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt index 913be37..19856f2 100644 --- a/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt +++ b/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt @@ -3,4 +3,4 @@ package ru.otus.homework.mapswap /** * Меняет местами ключи и значения */ -fun Map.swap(): Map = TODO("Доделать swap") \ No newline at end of file +fun Map.swap(): Map = entries.associate { (key, value) -> value to key } diff --git a/src/main/kotlin/ru/otus/homework/persons/persons.kt b/src/main/kotlin/ru/otus/homework/persons/persons.kt index fc1265d..2c4cb0b 100644 --- a/src/main/kotlin/ru/otus/homework/persons/persons.kt +++ b/src/main/kotlin/ru/otus/homework/persons/persons.kt @@ -3,11 +3,11 @@ package ru.otus.homework.persons /** * Отсортировать список персон по возрасту в порядке убывания */ -fun List.sortByAge(): List = TODO("Доделать sortByAge") +fun List.sortByAge(): List = sortedByDescending { it.age } /** * Отсортировать список персон по фамилии * - Фамилии сортируются по алфавиту в порядке возрастания * - Если фамилии совпадают, персоны сортируются по имени в порядке возрастания */ -fun List.sortByName(): List = TODO("Доделать sortBySurname") \ No newline at end of file +fun List.sortByName(): List = sortedWith(compareBy({it.surname}, {it.name}))