Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PhoneBook #4

Open
wants to merge 33 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
729679d
Решено все, кроме третьего
YoSo22 Sep 7, 2020
e004184
lesson № 2 tack 1
YoSo22 Sep 13, 2020
0fe666d
Lesson 2 task 2
YoSo22 Sep 15, 2020
060385a
Fix Bags lesson 2
YoSo22 Sep 15, 2020
1bf3303
Merge remote-tracking branch 'origin/master' into master
YoSo22 Sep 15, 2020
aa1db58
Merge remote-tracking branch 'origin/master' into master
YoSo22 Sep 15, 2020
2660d9e
Fix lesson 2 1
YoSo22 Sep 15, 2020
feee9f3
Merge remote-tracking branch 'origin/master' into master
YoSo22 Sep 15, 2020
76894e4
Fix lesson 2 2
YoSo22 Sep 15, 2020
98b587a
Fix 3 lesson 2
YoSo22 Sep 16, 2020
1268660
Fix 3 lesson 3
YoSo22 Sep 16, 2020
f7b807f
Fix 4 lesson 3
YoSo22 Oct 1, 2020
3a3ad8d
Fix 4 lesson 3
YoSo22 Oct 1, 2020
089b2a9
Merge remote-tracking branch 'origin/master' into master
YoSo22 Oct 1, 2020
4cd3886
Fix 1 lesson 1 and lesson 4
YoSo22 Oct 2, 2020
0e3b0af
Lesson 2,3,4 bags fix
YoSo22 Nov 12, 2020
a0d0149
Lesson 5 and 2.2
YoSo22 Nov 15, 2020
872f50b
Problems in 2,3,5 fix
YoSo22 Nov 19, 2020
6895894
Исправления вопроссов
YoSo22 Dec 1, 2020
ea7c903
Исправления вопроссов
YoSo22 Dec 1, 2020
b485983
Первые ответы на задачи
YoSo22 Dec 1, 2020
6570163
Первые ответы на задачи
YoSo22 Dec 2, 2020
379169e
Fix problems
YoSo22 Dec 6, 2020
2b67a16
Fix problems 2,3,5,6
YoSo22 Dec 7, 2020
34aa62f
Fix problems 6 dateStrToDigit
YoSo22 Dec 7, 2020
d60bb8c
Task 7 and fix problems in 2,6
YoSo22 Dec 12, 2020
84858da
Доделки перед сессией
YoSo22 Dec 21, 2020
8fbf017
Доделки перед сессией 2
YoSo22 Dec 21, 2020
24a2f78
PhoneBook
YoSo22 Mar 15, 2021
7035046
Delete KotlinAsFirst2020-master (1).zip
YoSo22 Mar 15, 2021
7c5b33e
Update PhoneBook
YoSo22 Mar 15, 2021
80bd2c9
Update PhoneBook addPhone
YoSo22 Mar 15, 2021
c470689
Update addPhone 2
YoSo22 Mar 15, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions src/lesson1/task1/Simple.kt
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ fun main() {
* Пользователь задает время в часах, минутах и секундах, например, 8:20:35.
* Рассчитать время в секундах, прошедшее с начала суток (30035 в данном случае).
*/
fun seconds(hours: Int, minutes: Int, seconds: Int): Int = TODO()
fun seconds(hours: Int, minutes: Int, seconds: Int): Int = (hours * 60 * 60) + (minutes * 60) + seconds

/**
* Тривиальная (1 балл)
Expand All @@ -76,6 +76,7 @@ fun seconds(hours: Int, minutes: Int, seconds: Int): Int = TODO()
*/
fun lengthInMeters(sagenes: Int, arshins: Int, vershoks: Int): Double = TODO()


/**
* Тривиальная (1 балл)
*
Expand All @@ -92,13 +93,15 @@ fun angleInRadian(deg: Int, min: Int, sec: Int): Double = TODO()
*/
fun trackLength(x1: Double, y1: Double, x2: Double, y2: Double): Double = TODO()


/**
* Простая (2 балла)
*
* Пользователь задает целое число, большее 100 (например, 3801).
* Определить третью цифру справа в этом числе (в данном случае 8).
*/
fun thirdDigit(number: Int): Int = TODO()
fun thirdDigit(number: Int): Int = (number / 100) % 10


/**
* Простая (2 балла)
Expand All @@ -107,7 +110,8 @@ fun thirdDigit(number: Int): Int = TODO()
* прибыл на станцию назначения в h2 часов m2 минут того же дня (например в 13:01).
* Определите время поезда в пути в минутах (в данном случае 216).
*/
fun travelMinutes(hoursDepart: Int, minutesDepart: Int, hoursArrive: Int, minutesArrive: Int): Int = TODO()
fun travelMinutes(hoursDepart: Int, minutesDepart: Int, hoursArrive: Int, minutesArrive: Int): Int =
(hoursArrive * 60 + minutesArrive) - (hoursDepart * 60 + minutesDepart)

/**
* Простая (2 балла)
Expand All @@ -124,4 +128,4 @@ fun accountInThreeYears(initial: Int, percent: Int): Double = TODO()
* Пользователь задает целое трехзначное число (например, 478).
* Необходимо вывести число, полученное из заданного перестановкой цифр в обратном порядке (например, 874).
*/
fun numberRevert(number: Int): Int = TODO()
fun numberRevert(number: Int): Int = ((number % 10) * 100) + ((number / 10) % 10) * 10 + number / 100
129 changes: 121 additions & 8 deletions src/lesson12/task1/PhoneBook.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,48 @@ package lesson12.task1
* Класс должен иметь конструктор по умолчанию (без параметров).
*/
class PhoneBook {
var bookList: MutableList<Person> = mutableListOf()
/**
* Добавить человека.
* Возвращает true, если человек был успешно добавлен,
* и false, если человек с таким именем уже был в телефонной книге
* (во втором случае телефонная книга не должна меняться).
*/
fun addHuman(name: String): Boolean = TODO()
fun addHuman(name: String): Boolean {
var check: Boolean? = null
for (i in bookList){
if (i.getName() == name)
check = false
}
return if (check == false)
check
else{
bookList.plusAssign(Person(name, setOf()))
true
}
}

/**
* Убрать человека.
* Возвращает true, если человек был успешно удалён,
* и false, если человек с таким именем отсутствовал в телефонной книге
* (во втором случае телефонная книга не должна меняться).
*/
fun removeHuman(name: String): Boolean = TODO()
fun removeHuman(name: String): Boolean {
var check: Boolean? = false
var del = Person(null.toString(), emptySet())
for(i in bookList){
if(i.getName() == name) {
del = i
check = true
}
}
return if(check == true) {
bookList.minusAssign(del)
true
}
else false
}

/**
* Добавить номер телефона.
Expand All @@ -41,32 +68,118 @@ class PhoneBook {
* либо у него уже был такой номер телефона,
* либо такой номер телефона зарегистрирован за другим человеком.
*/
fun addPhone(name: String, phone: String): Boolean = TODO()
fun addPhone(name: String, phone: String): Boolean {
var bookListBackUp = bookList
var numb = -1
var check: Boolean = false
for(i in bookList){
numb += 1
if(i.getNumberList().contains(phone)) return false
else {
if (i.getName() == name && !i.getNumberList().contains(phone)) {
check = true
bookList[numb] = i.addNumber(phone)
}
}

}
return check
}

/**
* Убрать номер телефона.
* Возвращает true, если номер был успешно удалён,
* и false, если человек с таким именем отсутствовал в телефонной книге
* либо у него не было такого номера телефона.
*/
fun removePhone(name: String, phone: String): Boolean = TODO()
fun removePhone(name: String, phone: String): Boolean {
var check: Boolean = false
var numb = -1
for(i in bookList){
numb += 1
if(i.getName() == name && i.getNumberList().contains(phone)) {
bookList[numb] = i.removeNumber(phone)
check = true
}
}
return check
}

/**
* Вернуть все номера телефона заданного человека.
* Если этого человека нет в книге, вернуть пустой список
*/
fun phones(name: String): Set<String> = TODO()
fun phones(name: String): Set<String> {
var result: Set<String> = setOf()
var check: Boolean = false
for (i in bookList){
if (i.getName() == name)
result = i.getNumberList()
}
return result
}

/**
* Вернуть имя человека по заданному номеру телефона.
* Если такого номера нет в книге, вернуть null.
*/
fun humanByPhone(phone: String): String? = TODO()
fun humanByPhone(phone: String): String? {
var result: String? = null
for(i in bookList){
if(i.getNumberList().contains(phone)) result = i.getName()
}
return result
}



/**
* Две телефонные книги равны, если в них хранится одинаковый набор людей,
* и каждому человеку соответствует одинаковый набор телефонов.
* Порядок людей / порядок телефонов в книге не должен иметь значения.
*/
override fun equals(other: Any?): Boolean = TODO()
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false

other as PhoneBook

if (bookList == other.bookList) return false

return true
}

override fun hashCode(): Int {
return bookList.hashCode()
}

}


data class Person(val person_name: String, var phone_numbers: Set<String>){
private var personname: String = person_name
private var numberList:Set<String> = phone_numbers


// Получить имя
fun getName(): String {
return personname
}

// Получить номер
fun getNumberList(): Set<String> {
return numberList
}

// Добавить номер
fun addNumber(number:String): Person {
var result = Person(person_name = person_name, phone_numbers = phone_numbers + setOf(number))
return result
}

// Удалить номер
fun removeNumber(number: String): Person {
var result = Person(person_name = person_name, phone_numbers = phone_numbers - setOf(number))
return result
}
}
19 changes: 17 additions & 2 deletions src/lesson2/task1/IfElse.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package lesson2.task1

import lesson1.task1.discriminant
import java.lang.Math.min
import kotlin.math.max
import kotlin.math.sqrt

Expand Down Expand Up @@ -68,7 +69,17 @@ fun minBiRoot(a: Double, b: Double, c: Double): Double {
* Мой возраст. Для заданного 0 < n < 200, рассматриваемого как возраст человека,
* вернуть строку вида: «21 год», «32 года», «12 лет».
*/
fun ageDescription(age: Int): String = TODO()
fun ageDescription(age: Int): String {
if ((age % 100 > 4) and (age % 100 < 21)) {
return "$age лет"
}
return when (age % 10) {
1 -> "$age год"
in 2..4 -> "$age года"
in 5..9, 0 -> "$age лет"
else -> " "
}
}

/**
* Простая (2 балла)
Expand Down Expand Up @@ -132,4 +143,8 @@ fun triangleKind(a: Double, b: Double, c: Double): Int = TODO()
* Найти длину пересечения отрезков AB и CD.
* Если пересечения нет, вернуть -1.
*/
fun segmentLength(a: Int, b: Int, c: Int, d: Int): Int = TODO()
fun segmentLength(a: Int, b: Int, c: Int, d: Int): Int {
if (d < a || c > b) return -1
return min(b, d) - max(a, c)
}

51 changes: 49 additions & 2 deletions src/lesson2/task2/Logical.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package lesson2.task2

import lesson1.task1.sqr
import ru.spbstu.kotlin.generate.combinators.shrinkIterable

/**
* Пример
Expand Down Expand Up @@ -36,7 +37,12 @@ fun queenThreatens(x1: Int, y1: Int, x2: Int, y2: Int): Boolean = TODO()
* Дан номер месяца (от 1 до 12 включительно) и год (положительный).
* Вернуть число дней в этом месяце этого года по григорианскому календарю.
*/
fun daysInMonth(month: Int, year: Int): Int = TODO()
fun daysInMonth(month: Int, year: Int): Int =
when (month) {
2 -> if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) 29 else 28
1, 3, 5, 7, 8, 10, 12 -> 31
else -> 30
}

/**
* Простая (2 балла)
Expand All @@ -59,4 +65,45 @@ fun circleInside(
* кирпич 4 х 4 х 4 пройдёт через отверстие 4 х 4.
* Вернуть true, если кирпич пройдёт
*/
fun brickPasses(a: Int, b: Int, c: Int, r: Int, s: Int): Boolean = TODO()
fun brickPasses(a: Int, b: Int, c: Int, r: Int, s: Int): Boolean {
var x1 = 0
var x2 = 0
var t1 = 0
var t2 = 0
if (a <= b) {
if (a <= c) {
if (b <= c) {
x1 = a
x2 = b
} else {
x1 = a
x2 = c
}
} else {
x1 = c
x2 = a
}

} else {
if (b <= c) {
if (c <= a) {
x1 = b
x2 = c
} else {
x1 = b
x2 = a
}
} else {
x1 = c
x2 = b
}
}
if (r >= s) {
t1 = s
t2 = r
} else {
t1 = r
t2 = s
}
return ((x1 <= t1) && (x2 <= t2))
}
Loading