From ccdceee64fb882d26b3cd89bc089b2816753379e Mon Sep 17 00:00:00 2001 From: AlexeyVolkhin Date: Tue, 19 Nov 2024 17:46:44 +0500 Subject: [PATCH] worked --- .../kotlin/ru/otus/homework/NaturalList.kt | 33 +++++++++++++++---- .../ru/otus/homework/mapswap/mapSwap.kt | 2 +- .../ru/otus/homework/persons/persons.kt | 5 +-- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/ru/otus/homework/NaturalList.kt b/src/main/kotlin/ru/otus/homework/NaturalList.kt index a8a41b1..9f6819f 100644 --- a/src/main/kotlin/ru/otus/homework/NaturalList.kt +++ b/src/main/kotlin/ru/otus/homework/NaturalList.kt @@ -1,5 +1,7 @@ package ru.otus.homework +import java.time.LocalTime + /** * Список натуральных чисел от 1 до n * @param n Последнее натуральное число в списке @@ -35,15 +37,20 @@ class NaturalList(n: Int) : List { * Вернуть под-список этого списка, включая [fromIndex] и НЕ включая [toIndex] */ override fun subList(fromIndex: Int, toIndex: Int): List { - TODO("Not yet implemented") + val newList = mutableListOf() + for (i: Int in (fromIndex..): Boolean { - TODO("Not yet implemented") - } + override fun containsAll(elements: Collection): Boolean = + this.toSet().containsAll(elements) + override fun toString(): String { return "NaturalList(1..$size)" @@ -53,13 +60,27 @@ 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 + if (other !is List<*>) return false + if (size != other.size) return false + for (i in indices) { + if (this[i] != other[i]) return false + } + return true + } /** * Функция должна возвращать тот же hash-code, что и список другой реализации тех же чисел * Например, NaturalList(5).hashCode() должен быть равен listOf(1,2,3,4,5).hashCode() */ - override fun hashCode(): Int = -1 + override fun hashCode(): Int { + val time = LocalTime.now().nano.toString() + val elements = this.toSet() + val hash = time + elements + + return hash.toInt() + } } 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..926d1ba 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 = this.map { (k, v) -> v to k }.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..2408f09 100644 --- a/src/main/kotlin/ru/otus/homework/persons/persons.kt +++ b/src/main/kotlin/ru/otus/homework/persons/persons.kt @@ -3,11 +3,12 @@ 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 = + sortedWith(compareBy { it.surname }.thenBy { it.name }) \ No newline at end of file