Advertisement
kish-dev

Untitled

Mar 20th, 2022
967
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 3.77 KB | None | 0 0
  1. fun main() {
  2.     val n = readLine()!!.split(' ')[0].toInt()
  3.     val array: Array<Array<Char>> = Array(n) { Array(5) { ' ' } }
  4.  
  5.     for (i in array.indices) {
  6.         array[i][i] = 'a'
  7.     }
  8.  
  9.     var j = 0
  10.     for (i in array.size - 1 downTo 0) {
  11.         array[i][j] = 'a'
  12.         ++j
  13.     }
  14.  
  15.     var j1 = 1
  16.     var j2 = 1
  17.     var j3 = 0
  18.     var j4 = 1
  19.  
  20.  
  21.     for (i in 0..(n - 1) / 2) {
  22.  
  23.         //выше главной диагонали
  24.         for (i1 in 0..array.size - j1 - 1) {
  25.             if (array[i1][j1] == 'a') {
  26.                 continue
  27.             }
  28.             val next = getChar(i1, j1, array)
  29.             array[i1][j1] = next
  30.             j1++
  31.         }
  32.         j1 = i + 1
  33.  
  34.         //ниже главной диагонали
  35.             var k1 = 0
  36.         for (i2 in j2..array.size - 1) {
  37.             if (array[i2][i2 - j2] == 'a') {
  38.                 continue
  39.             }
  40.             val next = getChar(i2, i2 - 1, array)
  41.             array[i2][i2 - j2] = next
  42.         }
  43.         j2++
  44.  
  45.         //выше побочной диагонали
  46.         for (i3 in array.size - 2 downTo 0) {
  47.             if (array[i3][j3] == 'a') {
  48.                 continue
  49.             }
  50.             val next = getChar(i3, j3, array)
  51.             array[i3][j3] = next
  52.             j3++
  53.         }
  54.         j3 = 0
  55.  
  56.         //ниже побочной диагонали
  57.         for (i4 in array.size - i - 1 downTo i + 1) {
  58.             if (array[i4][j4] == 'a') {
  59.                 continue
  60.             }
  61.             val next = getChar(i4, j4, array)
  62.             array[i4][j4] = next
  63.             j4++
  64.         }
  65.         j4 = i + 1
  66.     }
  67.  
  68.  
  69.     for (i in array.indices) {
  70.         for (k in array[i].indices) {
  71.             print(array[i][k])
  72.         }
  73.         println()
  74.     }
  75. }
  76.  
  77. fun getChar(i: Int, j: Int, array: Array<Array<Char>>): Char {
  78.     val left = if (j - 1 >= 0 &&
  79.         i < array.size &&
  80.         i >= 0 &&
  81.         j - 1 < array.size
  82.     ) {
  83.         if (array[i][j - 1].isLetter()) {
  84.             array[i][j - 1]
  85.         } else {
  86.             null
  87.         }
  88.     } else {
  89.         null
  90.     }
  91.  
  92.     val right = if (j + 1 < array[i].size &&
  93.         i < array.size &&
  94.         i >= 0 &&
  95.         j + 1 >= 0
  96.     ) {
  97.         if (array[i][j + 1].isLetter()) {
  98.             array[i][j + 1]
  99.         } else {
  100.             null
  101.         }
  102.     } else {
  103.         null
  104.     }
  105.  
  106.     val bottom = if (i + 1 < array.size &&
  107.         j < array.size &&
  108.         i + 1 >= 0 &&
  109.         j >= 0
  110.     ) {
  111.         if (array[i + 1][j].isLetter()) {
  112.             array[i + 1][j]
  113.         } else {
  114.             null
  115.         }
  116.     } else {
  117.         null
  118.     }
  119.  
  120.     val top = if (i - 1 >= 0 &&
  121.         i - 1 < array.size &&
  122.         j < array.size &&
  123.         j >= 0
  124.     ) {
  125.         if (array[i - 1][j].isLetter()) {
  126.             array[i - 1][j]
  127.         } else {
  128.             null
  129.         }
  130.     } else {
  131.         null
  132.     }
  133.  
  134.     val res = getCharFromNeighbours(
  135.         left = left,
  136.         right = right,
  137.         top = top,
  138.         bottom = bottom
  139.     )
  140.     println("res = $res")
  141.     return res
  142.  
  143. }
  144.  
  145. fun getCharFromNeighbours(left: Char?, right: Char?, top: Char?, bottom: Char?): Char {
  146.     var minChar = left ?: 'z'
  147.     right?.let {
  148.         if (minChar > right && right >= 'a' && right <= 'z') {
  149.             minChar = right
  150.         }
  151.     }
  152.     top?.let {
  153.         if (minChar > top && top >= 'a' && top <= 'z') {
  154.             minChar = top
  155.         }
  156.     }
  157.     bottom?.let {
  158.         if (minChar > bottom && bottom >= 'a' && bottom <= 'z') {
  159.             minChar = bottom
  160.         }
  161.     }
  162.  
  163.     return getNext(minChar)
  164. }
  165.  
  166. fun getNext(char: Char): Char {
  167.     return if (char == 'z') {
  168.         'a'
  169.     } else {
  170.         (char.toInt() + 1).toChar()
  171.     }
  172. }
  173.  
  174.  
  175.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement