Advertisement
Guest User

Untitled

a guest
Dec 10th, 2020
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.18 KB | None | 0 0
  1. fun main() {
  2.   var input = generateSequence { readLine() }
  3.     .map { it.toCharArray().toMutableList() }
  4.     .toList()
  5.  
  6.   val dx = listOf(1, -1, 0, 0, -1, -1, 1, 1)
  7.   val dy = listOf(0, 0, 1, -1, -1, 1, -1, 1)
  8.   while (true) {
  9.     val next = input.map { it.toMutableList() }
  10.     var changed = false
  11.     for (i in input.indices) {
  12.       for (j in input[i].indices) {
  13.         var occupied = 0
  14.         for (k in dx.indices) {
  15.           var x = i + dx[k]
  16.           var y = j + dy[k]
  17.           try {
  18.             while (true) {
  19.               if (input[x][y] == '#') {
  20.                 occupied++
  21.                 break
  22.               } else if(input[x][y] == 'L') {
  23.                 break
  24.               }
  25.               x += dx[k]
  26.               y += dy[k]
  27.             }
  28.           } catch (e: Exception) {}
  29.         }
  30.  
  31.         if (input[i][j] == 'L' && occupied == 0) {
  32.           changed = true
  33.           next[i][j] = '#'
  34.         } else if (input[i][j] == '#' && occupied >= 5) {
  35.           changed = true
  36.           next[i][j] = 'L'
  37.         }
  38.       }
  39.     }
  40.  
  41.     input = next
  42.     if (!changed) break
  43.   }
  44.  
  45.   input.map { row -> row.count { it == '#' } }.sum().let(::println)
  46. }
  47.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement