Skip to content

Commit 8a0a191

Browse files
NikitaLipatovegonSchiele
authored andcommitted
03 & 04 exercises (egonSchiele#96)
1 parent 2bf2ab5 commit 8a0a191

File tree

8 files changed

+69
-0
lines changed

8 files changed

+69
-0
lines changed

03_recursion/kotlin/01_countdown.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
private fun countdown(i: Int) {
2+
println(i)
3+
when {
4+
// base case
5+
i <= 0 -> return
6+
// recursive case
7+
else -> countdown(i - 1)
8+
}
9+
}
10+
11+
fun main(args: Array<String>) = countdown(5)

03_recursion/kotlin/02_greet.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
private fun greet2(name: String) = println("how are you, $name?")
2+
3+
private fun bye() = println("ok bye!")
4+
5+
private fun greet(name: String) {
6+
println("hello, $name!")
7+
greet2(name)
8+
println("getting ready to say bye...")
9+
bye()
10+
}
11+
12+
fun main(args: Array<String>) = greet("adit")

03_recursion/kotlin/03_factorial.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
private fun fact(x: Int): Int = when (x) {
2+
1 -> 1
3+
else -> x * fact(x - 1)
4+
}
5+
6+
fun main(args: Array<String>) = println(fact(5))

04_quicksort/kotlin/01_loop_sum.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
private fun sum(arr: Array<Int>): Int {
2+
var total = 0
3+
for (x in arr) total += x
4+
return total
5+
}
6+
7+
fun main(args: Array<String>) = println(sum(arrayOf(1, 2, 3, 4)))
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
private fun sum(arr: IntArray): Int = when {
2+
arr.isEmpty() -> 0
3+
else -> arr[0] + sum(arr.copyOfRange(1, arr.size))
4+
}
5+
6+
fun main(args: Array<String>) = println(sum(intArrayOf(1, 2, 3, 4)))
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
private fun count(list: List<Any>): Int = when {
2+
list.isEmpty() -> 0
3+
else -> 1 + count(list.subList(1, list.size))
4+
}
5+
6+
fun main(args: Array<String>) = println(count(listOf(1, 2, 3, 4, 5)))
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
private fun max(list: IntArray): Int = when {
2+
list.size == 2 -> if (list[0] > list[1]) list[0] else list[1]
3+
else -> {
4+
val subMax = max(list.copyOfRange(1, list.size))
5+
if (list[0] > subMax) list[0] else subMax
6+
}
7+
}
8+
9+
fun main(args: Array<String>) = println(max(intArrayOf(1, 5, 10, 25, 16, 1))) // 25

04_quicksort/kotlin/05_quicksort.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
fun quickSort(list: List<Int>): List<Int> {
2+
// base case, arrays with 0 or 1 element are already "sorted"
3+
if (list.size <= 1) return list
4+
// recursive case
5+
val pivot = list[list.size / 2]
6+
val equal = list.filter { it == pivot }
7+
val less = list.filter { it < pivot }
8+
val greater = list.filter { it > pivot }
9+
return quickSort(less) + equal + quickSort(greater)
10+
}
11+
12+
fun main(args: Array<String>) = println(quickSort(listOf(10, 5, 2, 3))) // [2, 3, 5, 10]

0 commit comments

Comments
 (0)