From 4c0cb1b1679e244fbbf00db41ee05b58a19a05bf Mon Sep 17 00:00:00 2001 From: Alekseev-i Date: Mon, 21 Oct 2024 23:59:34 +0300 Subject: [PATCH] Homework --- .../kotlin/ru/otus/homework/NaturalList.kt | 37 +++++++++++++++++-- .../ru/otus/homework/mapswap/mapSwap.kt | 6 ++- .../ru/otus/homework/persons/persons.kt | 7 +++- 3 files changed, 43 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..ae14521 100644 --- a/src/main/kotlin/ru/otus/homework/NaturalList.kt +++ b/src/main/kotlin/ru/otus/homework/NaturalList.kt @@ -35,14 +35,25 @@ class NaturalList(n: Int) : List { * Вернуть под-список этого списка, включая [fromIndex] и НЕ включая [toIndex] */ override fun subList(fromIndex: Int, toIndex: Int): List { - TODO("Not yet implemented") + val result: MutableList = mutableListOf() + for(i in fromIndex ..< toIndex){ + result.add(this[i]) + } + return result.toList() } /** * Returns true if list contains all numbers in the collection */ override fun containsAll(elements: Collection): Boolean { - TODO("Not yet implemented") + var result: Boolean = true + for( i in elements ) { + if(!this.contains(i)) { + result = false + break + } + } + return result } override fun toString(): String { @@ -53,13 +64,31 @@ 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 { + var result: Boolean = false + if ( other != null && other is List<*> && this.size == (other as List<*>).size) { + result = true + for(i in 0 ..< this.size) { + if(this[i] != (other as List<*>)[i]){ + result = false + break + } + } + } + return result + } /** * Функция должна возвращать тот же 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 + (e?.hashCode() ?: 0) + } + 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..ed9b097 100644 --- a/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt +++ b/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt @@ -3,4 +3,8 @@ package ru.otus.homework.mapswap /** * Меняет местами ключи и значения */ -fun Map.swap(): Map = TODO("Доделать swap") \ No newline at end of file +fun Map.swap(): Map{ + val mapTemp: MutableMap = mutableMapOf() + for(i in this){ mapTemp[i.value] = i.key } + return mapTemp.toMap() +} \ No newline at end of file diff --git a/src/main/kotlin/ru/otus/homework/persons/persons.kt b/src/main/kotlin/ru/otus/homework/persons/persons.kt index fc1265d..779ba76 100644 --- a/src/main/kotlin/ru/otus/homework/persons/persons.kt +++ b/src/main/kotlin/ru/otus/homework/persons/persons.kt @@ -3,11 +3,14 @@ package ru.otus.homework.persons /** * Отсортировать список персон по возрасту в порядке убывания */ -fun List.sortByAge(): List = TODO("Доделать sortByAge") +fun List.sortByAge(): List = this.sortedByDescending { it.age } /** * Отсортировать список персон по фамилии * - Фамилии сортируются по алфавиту в порядке возрастания * - Если фамилии совпадают, персоны сортируются по имени в порядке возрастания */ -fun List.sortByName(): List = TODO("Доделать sortBySurname") \ No newline at end of file +fun List.sortByName(): List = this.sortedWith( + compareBy( + { it.surname }, + { it.name } ))