https://coderun.yandex.ru/problem/tetramino Легкая

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun main(args: Array<String>) {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    // Читаем шахматное поле 8x8
    val board = Array(8) { reader.readLine().toCharArray() }

    // Определяем 4 ориентации Т-образного тетрамино
    // Координаты заданы относительно верхнего левого угла минимального прямоугольника, в котором помещается фигура.
    val tetrominoes = listOf(
        // Ориентация 1 (тетра «снизу»: горизонтальная линия сверху, центральная клетка снизу)
        listOf(Pair(0, 0), Pair(0, 1), Pair(0, 2), Pair(1, 1)),
        // Ориентация 2 (тетра «сверху»: горизонтальная линия снизу, центральная клетка сверху)
        listOf(Pair(0, 1), Pair(1, 0), Pair(1, 1), Pair(1, 2)),
        // Ориентация 3 (тетра «слева»: вертикальная линия справа, центральная клетка слева)
        listOf(Pair(0, 1), Pair(1, 0), Pair(1, 1), Pair(2, 1)),
        // Ориентация 4 (тетра «справа»: вертикальная линия слева, центральная клетка справа)
        listOf(Pair(0, 0), Pair(1, 0), Pair(1, 1), Pair(2, 0))
    )

    var count = 0
    // Для каждой ориентации вычисляем допустимые положения
    for (shape in tetrominoes) {
        var maxRow = 0
        var maxCol = 0
        for ((r, c) in shape) {
            if (r > maxRow) maxRow = r
            if (c > maxCol) maxCol = c
        }
        // Размеры прямоугольника, содержащего фигуру
        val height = maxRow + 1
        val width = maxCol + 1

        // Перебираем все возможные позиции так, чтобы прямоугольник полностью помещался на доске 8x8
        for (i in 0..(8 - height)) {
            for (j in 0..(8 - width)) {
                var valid = true
                for ((dr, dc) in shape) {
                    if (board[i + dr][j + dc] != '.') {
                        valid = false
                        break
                    }
                }
                if (valid) count++
            }
        }
    }

    writer.write(count.toString())
    writer.newLine()
    writer.flush()
    reader.close()
    writer.close()
}