Загрузка данных
// Task1.kt
fun rectangleArea(width: Double, height: Double = width): Double = width * height
fun circleArea(radius: Double, pi: Double = Math.PI): Double = pi * radius * radius
fun triangleArea(a: Double, b: Double, c: Double): Double {
val p = (a + b + c) / 2.0
return Math.sqrt(p * (p - a) * (p - b) * (p - c))
}
fun totalPerimeter(vararg sides: Double): Double = sides.sum()
fun main() {
println(rectangleArea(5.0, 10.0))
println(rectangleArea(width = 4.0))
println(circleArea(3.0))
println(circleArea(radius = 3.0, pi = 3.14))
println(triangleArea(3.0, 4.0, 5.0))
println(triangleArea(a = 3.0, b = 4.0, c = 5.0))
println(totalPerimeter(2.0, 3.0, 4.0))
println(totalPerimeter(sides = doubleArrayOf(5.0, 5.0, 10.0, 10.0)))
}
// Task2.kt
typealias Operation = (Double, Double) -> Double
fun calculate(a: Double, b: Double, operation: Operation): Double = operation(a, b)
fun main() {
val operations: Map<String, Operation> = mapOf(
"+" to { a, b -> a + b },
"-" to { a, b -> a - b },
"*" to { a, b -> a * b },
"/" to { a, b -> if (b == 0.0) Double.NaN else a / b },
"%" to { a, b -> a % b },
"^" to { a, b -> Math.pow(a, b) },
"max" to { a, b -> maxOf(a, b) }
)
val a = readln().toDouble()
val opSymbol = readln()
val b = readln().toDouble()
val selectedOperation = operations[opSymbol]
if (selectedOperation != null) {
println(calculate(a, b, selectedOperation))
} else {
println("Ошибка")
}
}
// Task3.kt
fun String.isEmailValid(): Boolean = this.contains('@') && this.indexOf('.') > this.indexOf('@')
fun String.maskPassword(): String {
if (this.length <= 2) return "*".repeat(this.length)
return "${this.first()}${"*".repeat(this.length - 2)}${this.last()}"
}
fun String.wordCount(): Int = if (this.isBlank()) 0 else this.trim().split("\\s+".toRegex()).size
fun Int.isEven(): Boolean = this % 2 == 0
fun Int.hoursToMinutes(): Int = this * 60
infix fun Int.timesRepeat(action: () -> Unit) {
for (i in 0 until this) action()
}
fun <T> List<T>.secondOrNull(): T? = if (this.size >= 2) this[1] else null
fun <T> List<T>.thirdOrNull(): T? = if (this.size >= 3) this[2] else null
fun main() {
println("test@mail.ru".isEmailValid())
println("secret123".maskPassword())
println("Kotlin is awesome".wordCount())
println(4.isEven())
println(2.hoursToMinutes())
3 timesRepeat { println("Привет!") }
val list = listOf("Apple", "Banana", "Cherry")
println(list.secondOrNull())
println(list.thirdOrNull())
}
// Task4.kt
data class User(val name: String, var email: String?, var age: Int, var isActive: Boolean = false)
data class Config(var host: String, var port: Int, var timeout: Int = 30)
fun main() {
val user = User(name = "Александр", email = null, age = 17)
user.email?.let { println(it) }
user.apply { email = "user@mail.ru"; isActive = true }
println(user)
val config = Config("localhost", 8080).apply { port = 3000; timeout = 60 }.also { println(it) }
println(config)
val processed = " Kotlin is Awesome ".run { trim().uppercase() }.let { "Результат: $it, длина: ${it.length}" }
println(processed)
val numbers = listOf(10, 20, 30)
val (sum, average, max) = with(numbers) { Triple(this.sum(), this.average(), this.maxOrNull() ?: 0) }
println("$sum, $average, $max")
val nullableList: List<Int>? = listOf(1, 2, 3)
nullableList?.let { println(it.sum()) }
}
// Task5.kt
data class Task(val id: Int, val title: String, val priority: String = "medium", var isDone: Boolean = false)
fun Task.format(): String {
val status = if (isDone) "✓" else " "
return "[$status] #$id $title ($priority)"
}
fun List<Task>.completedCount(): Int = this.count { it.isDone }
fun List<Task>.pendingCount(): Int = this.count { !it.isDone }
class TodoListManager {
private val tasks = mutableListOf<Task>()
private var nextId = 1
fun addTask(title: String, priority: String = "medium") {
tasks.add(Task(id = nextId++, title = title, priority = priority))
}
fun markDone(id: Int) {
tasks.find { it.id == id }?.apply { isDone = true }
}
fun removeTask(id: Int) {
tasks.removeIf { it.id == id }
}
fun filterTasks(predicate: (Task) -> Boolean): List<Task> = tasks.filter(predicate)
fun printTasks(list: List<Task>) { list.forEach { println(it.format()) } }
}
fun main() {
val manager = TodoListManager()
manager.addTask("Купить молоко", "low")
manager.addTask("Сделать ДЗ", "high")
manager.addTask("Помыть машину", "medium")
manager.addTask("Сдать курсовую", "high")
manager.addTask("Купить продукты", "medium")
manager.printTasks(manager.filterTasks { true })
manager.markDone(2)
manager.markDone(4)
manager.removeTask(1)
manager.printTasks(manager.filterTasks { it.priority == "high" })
val all = manager.filterTasks { true }
println("Всего: ${all.size}, Выполнено: ${all.completedCount()}, В процессе: ${all.pendingCount()}")
}
// Bonus.kt
data class ServerConfig(var host: String = "localhost", var port: Int = 8080, var ssl: Boolean = false, var retries: Int = 3)
fun serverConfig(block: ServerConfig.() -> Unit): ServerConfig {
return ServerConfig().apply(block).also {
println("Сервер настроен: host=${it.host}, port=${it.port}")
}
}
fun main() {
val config = serverConfig {
host = "api.example.com"
port = 443
ssl = true
retries = 5
}
println(config)
}