Created
August 25, 2018 14:03
-
-
Save dbond762/0c339883116d1c40c2a72dec3e846bd0 to your computer and use it in GitHub Desktop.
Линия Фронта
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'}, | |
})) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://play.golang.org/p/MsVaKEI4YqI