Advertisement
saurav_kalsoor

Shifting Compartments - KOTLIN

Sep 28th, 2022
581
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Author : Saurav Kalsoor
  2. // Shifting Compartments - KOTLIN
  3.  
  4.  
  5. import java.util.*
  6.  
  7. var sc = Scanner(System.`in`)
  8.  
  9. fun main() {
  10.     val n = sc.nextInt()
  11.     val q = sc.nextInt()
  12.     val str = sc.next()
  13.     val l = ArrayList<Int>()
  14.     val r = ArrayList<Int>()
  15.     val k = ArrayList<Int>()
  16.  
  17.     for (i in 0 until q) {
  18.         l.add(sc.nextInt())
  19.         r.add(sc.nextInt())
  20.         k.add(sc.nextInt())
  21.     }
  22.     println(shiftingCompartments(n, q, str, l, r, k))
  23. }
  24.  
  25. fun shiftingCompartments(n: Int, q: Int, s: String, l: ArrayList<Int>, r: ArrayList<Int>, k: ArrayList<Int>): String? {
  26.     val str = s.toCharArray()
  27.     for (i in 0 until q) {
  28.         cycle(str, l[i], r[i], k[i])
  29.     }
  30.     return String(str)
  31. }
  32.  
  33. fun myReverse(str: CharArray, i: Int, j: Int) {
  34.     var i = i
  35.     var j = j
  36.     while (i < j) {
  37.         val temp = str[i]
  38.         str[i] = str[j]
  39.         str[j] = temp
  40.         i++
  41.         j--
  42.     }
  43. }
  44.  
  45. fun cycle(str: CharArray, l: Int, r: Int, k: Int) {
  46.     var k = k
  47.     val n = r - l + 1
  48.     k %= n
  49.     myReverse(str, l, l + n - k - 1)
  50.     myReverse(str, l + n - k, r)
  51.     myReverse(str, l, r)
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement