From fd4183f07fc584d843457dd68b423fdb7548ee21 Mon Sep 17 00:00:00 2001 From: Ilfirinon Date: Mon, 21 Oct 2024 18:41:36 +0800 Subject: [PATCH 1/3] Add sortByAge, add sortByName --- .../kotlin/ru/otus/homework/persons/persons.kt | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/ru/otus/homework/persons/persons.kt b/src/main/kotlin/ru/otus/homework/persons/persons.kt index fc1265d..7e20a53 100644 --- a/src/main/kotlin/ru/otus/homework/persons/persons.kt +++ b/src/main/kotlin/ru/otus/homework/persons/persons.kt @@ -1,13 +1,6 @@ package ru.otus.homework.persons -/** - * Отсортировать список персон по возрасту в порядке убывания - */ -fun List.sortByAge(): List = TODO("Доделать sortByAge") - -/** - * Отсортировать список персон по фамилии - * - Фамилии сортируются по алфавиту в порядке возрастания - * - Если фамилии совпадают, персоны сортируются по имени в порядке возрастания - */ -fun List.sortByName(): List = TODO("Доделать sortBySurname") \ No newline at end of file +fun List.sortByAge(): List = +this.sortedByDescending { it.age } +fun List.sortByName(): List = + this.sortedWith(compareBy { it.surname }.thenBy { it.name }) \ No newline at end of file From c32c85ea87cf921b153b959d2d9d332b8f700d01 Mon Sep 17 00:00:00 2001 From: Ilfirinon Date: Mon, 21 Oct 2024 18:46:51 +0800 Subject: [PATCH 2/3] Add mapSwap --- src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt b/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt index 913be37..ad832d7 100644 --- a/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt +++ b/src/main/kotlin/ru/otus/homework/mapswap/mapSwap.kt @@ -3,4 +3,5 @@ package ru.otus.homework.mapswap /** * Меняет местами ключи и значения */ -fun Map.swap(): Map = TODO("Доделать swap") \ No newline at end of file +fun Map.swap(): Map = + this.entries.associateBy({ it.value }, { it.key }) \ No newline at end of file From 8693fe8905bd357d6a6e44f5cdc64b805e26c643 Mon Sep 17 00:00:00 2001 From: Ilfirinon Date: Mon, 21 Oct 2024 19:16:44 +0800 Subject: [PATCH 3/3] Add sublist, add containtsall, add equals, add hashcode --- .../kotlin/ru/otus/homework/NaturalList.kt | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/ru/otus/homework/NaturalList.kt b/src/main/kotlin/ru/otus/homework/NaturalList.kt index a8a41b1..196b4d8 100644 --- a/src/main/kotlin/ru/otus/homework/NaturalList.kt +++ b/src/main/kotlin/ru/otus/homework/NaturalList.kt @@ -35,14 +35,21 @@ class NaturalList(n: Int) : List { * Вернуть под-список этого списка, включая [fromIndex] и НЕ включая [toIndex] */ override fun subList(fromIndex: Int, toIndex: Int): List { - TODO("Not yet implemented") + require(fromIndex in 0..size) { "fromIndex: $fromIndex, size: $size" } + require(toIndex in 0..size) { "toIndex: $toIndex, size: $size" } + require(fromIndex <= toIndex) { "fromIndex: $fromIndex > toIndex: $toIndex" } + return if (fromIndex == toIndex) { + NaturalList(0) + } else { + NaturalList(toIndex - fromIndex).mapIndexed { i, _ -> get(fromIndex + i) } + } } /** * Returns true if list contains all numbers in the collection */ override fun containsAll(elements: Collection): Boolean { - TODO("Not yet implemented") + return elements.all { contains(it) } } override fun toString(): String { @@ -53,14 +60,24 @@ 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 + return (0 until size).all { this[it] == other[it] } + } /** * Функция должна возвращать тот же hash-code, что и список другой реализации тех же чисел * Например, NaturalList(5).hashCode() должен быть равен listOf(1,2,3,4,5).hashCode() */ - override fun hashCode(): Int = -1 -} + override fun hashCode(): Int { + var result = 1 // Начальное значение должно быть 1, а не size + for (element in this) { + result = 31 * result + element + } + return result + } private class NaturalIterator(private val n: Int) : Iterator { private var index = 0 @@ -88,4 +105,5 @@ private class NaturalListIterator(private val n: Int, index: Int = 0) : ListIter throw NoSuchElementException() } override fun previousIndex(): Int = index +} } \ No newline at end of file