Skip to content

Instantly share code, notes, and snippets.

@dbond762
Created August 25, 2018 14:03
Show Gist options
  • Save dbond762/0c339883116d1c40c2a72dec3e846bd0 to your computer and use it in GitHub Desktop.
Save dbond762/0c339883116d1c40c2a72dec3e846bd0 to your computer and use it in GitHub Desktop.
Линия Фронта
package main
import "fmt"
// Смотрим для каждого поля его соседа справа и слева.
// Если они разные - то между ними линия фронта.
// Также смотрим все крайние поля карты и прибавляем к периметру той стороны, которая держит поле.
// После к периметрам обеих сторон добавляем линию фронта.
func task120(area [][]byte) (frontLine, perimeterR, perimeterF int) {
var (
r byte = 'R'
f byte = 'F'
n = len(area)
m = len(area[0])
)
for i := 0; i < n; i++ {
for j := 0; j < m; j++ {
// Разные блоки if нужны, что бы не пропустить некоторые границы.
// У поля с обеих сторон может быть фронт
// или оно может быть в углу карты и иметь две границы с картой.
if i != n-1 && area[i][j] != area[i+1][j] {
frontLine++
}
if j != m-1 && area[i][j] != area[i][j+1] {
frontLine++
}
if i == 0 || i == n-1 {
switch area[i][j] {
case r:
perimeterR++
case f:
perimeterF++
}
}
if j == 0 || j == m-1 {
switch area[i][j] {
case r:
perimeterR++
case f:
perimeterF++
}
}
}
}
perimeterR += frontLine
perimeterF += frontLine
return
}
func main() {
fmt.Println(task120([][]byte{
{'R', 'R'},
{'R', 'F'},
}))
fmt.Println(task120([][]byte{
{'R', 'R', 'R', 'R'},
{'R', 'F', 'F', 'R'},
{'R', 'R', 'R', 'R'},
}))
}
@dbond762
Copy link
Author

@dbond762
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment