Решение
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()
}