From 8a0a19197523f9fa3a19ff0fb47bb7da9a6aeea2 Mon Sep 17 00:00:00 2001 From: NikitaLipatov Date: Fri, 28 Dec 2018 19:25:01 +0300 Subject: [PATCH] 03 & 04 exercises (#96) --- 03_recursion/kotlin/01_countdown.kt | 11 +++++++++++ 03_recursion/kotlin/02_greet.kt | 12 ++++++++++++ 03_recursion/kotlin/03_factorial.kt | 6 ++++++ 04_quicksort/kotlin/01_loop_sum.kt | 7 +++++++ 04_quicksort/kotlin/02_recursive_sum.kt | 6 ++++++ 04_quicksort/kotlin/03_recursive_count.kt | 6 ++++++ 04_quicksort/kotlin/04_recursive_max.kt | 9 +++++++++ 04_quicksort/kotlin/05_quicksort.kt | 12 ++++++++++++ 8 files changed, 69 insertions(+) create mode 100644 03_recursion/kotlin/01_countdown.kt create mode 100644 03_recursion/kotlin/02_greet.kt create mode 100644 03_recursion/kotlin/03_factorial.kt create mode 100644 04_quicksort/kotlin/01_loop_sum.kt create mode 100644 04_quicksort/kotlin/02_recursive_sum.kt create mode 100644 04_quicksort/kotlin/03_recursive_count.kt create mode 100644 04_quicksort/kotlin/04_recursive_max.kt create mode 100644 04_quicksort/kotlin/05_quicksort.kt diff --git a/03_recursion/kotlin/01_countdown.kt b/03_recursion/kotlin/01_countdown.kt new file mode 100644 index 0000000..f7ba289 --- /dev/null +++ b/03_recursion/kotlin/01_countdown.kt @@ -0,0 +1,11 @@ +private fun countdown(i: Int) { + println(i) + when { + // base case + i <= 0 -> return + // recursive case + else -> countdown(i - 1) + } +} + +fun main(args: Array) = countdown(5) \ No newline at end of file diff --git a/03_recursion/kotlin/02_greet.kt b/03_recursion/kotlin/02_greet.kt new file mode 100644 index 0000000..6f271c8 --- /dev/null +++ b/03_recursion/kotlin/02_greet.kt @@ -0,0 +1,12 @@ +private fun greet2(name: String) = println("how are you, $name?") + +private fun bye() = println("ok bye!") + +private fun greet(name: String) { + println("hello, $name!") + greet2(name) + println("getting ready to say bye...") + bye() +} + +fun main(args: Array) = greet("adit") \ No newline at end of file diff --git a/03_recursion/kotlin/03_factorial.kt b/03_recursion/kotlin/03_factorial.kt new file mode 100644 index 0000000..3aaa1d2 --- /dev/null +++ b/03_recursion/kotlin/03_factorial.kt @@ -0,0 +1,6 @@ +private fun fact(x: Int): Int = when (x) { + 1 -> 1 + else -> x * fact(x - 1) +} + +fun main(args: Array) = println(fact(5)) \ No newline at end of file diff --git a/04_quicksort/kotlin/01_loop_sum.kt b/04_quicksort/kotlin/01_loop_sum.kt new file mode 100644 index 0000000..c27cdc2 --- /dev/null +++ b/04_quicksort/kotlin/01_loop_sum.kt @@ -0,0 +1,7 @@ +private fun sum(arr: Array): Int { + var total = 0 + for (x in arr) total += x + return total +} + +fun main(args: Array) = println(sum(arrayOf(1, 2, 3, 4))) \ No newline at end of file diff --git a/04_quicksort/kotlin/02_recursive_sum.kt b/04_quicksort/kotlin/02_recursive_sum.kt new file mode 100644 index 0000000..69ec6ed --- /dev/null +++ b/04_quicksort/kotlin/02_recursive_sum.kt @@ -0,0 +1,6 @@ +private fun sum(arr: IntArray): Int = when { + arr.isEmpty() -> 0 + else -> arr[0] + sum(arr.copyOfRange(1, arr.size)) +} + +fun main(args: Array) = println(sum(intArrayOf(1, 2, 3, 4))) \ No newline at end of file diff --git a/04_quicksort/kotlin/03_recursive_count.kt b/04_quicksort/kotlin/03_recursive_count.kt new file mode 100644 index 0000000..ad45c35 --- /dev/null +++ b/04_quicksort/kotlin/03_recursive_count.kt @@ -0,0 +1,6 @@ +private fun count(list: List): Int = when { + list.isEmpty() -> 0 + else -> 1 + count(list.subList(1, list.size)) +} + +fun main(args: Array) = println(count(listOf(1, 2, 3, 4, 5))) diff --git a/04_quicksort/kotlin/04_recursive_max.kt b/04_quicksort/kotlin/04_recursive_max.kt new file mode 100644 index 0000000..ab88752 --- /dev/null +++ b/04_quicksort/kotlin/04_recursive_max.kt @@ -0,0 +1,9 @@ +private fun max(list: IntArray): Int = when { + list.size == 2 -> if (list[0] > list[1]) list[0] else list[1] + else -> { + val subMax = max(list.copyOfRange(1, list.size)) + if (list[0] > subMax) list[0] else subMax + } +} + +fun main(args: Array) = println(max(intArrayOf(1, 5, 10, 25, 16, 1))) // 25 diff --git a/04_quicksort/kotlin/05_quicksort.kt b/04_quicksort/kotlin/05_quicksort.kt new file mode 100644 index 0000000..3a0c76b --- /dev/null +++ b/04_quicksort/kotlin/05_quicksort.kt @@ -0,0 +1,12 @@ +fun quickSort(list: List): List { + // base case, arrays with 0 or 1 element are already "sorted" + if (list.size <= 1) return list + // recursive case + val pivot = list[list.size / 2] + val equal = list.filter { it == pivot } + val less = list.filter { it < pivot } + val greater = list.filter { it > pivot } + return quickSort(less) + equal + quickSort(greater) +} + +fun main(args: Array) = println(quickSort(listOf(10, 5, 2, 3))) // [2, 3, 5, 10]