exercism/go/chessboard/chessboard.go
2022-08-24 14:28:45 +02:00

56 lines
1.3 KiB
Go

package chessboard
// Declare a type named Rank which stores if a square is occupied by a piece - this will be a slice of bools
// Declare a type named Chessboard contains a map of eight Ranks, accessed with values from "A" to "H"
type Rank []bool
type Chessboard map[string]Rank
// CountInRank returns how many squares are occupied in the chessboard,
// within the given rank
func CountInRank(cb Chessboard, rank string) int {
sum := 0
file, ok := cb[rank]
if !ok {
return 0
}
for _, f := range file {
if f {
sum += 1
}
}
return sum
}
// CountInFile returns how many squares are occupied in the chessboard,
// within the given file
func CountInFile(cb Chessboard, file int) int {
if file < 1 || file > 8 {
return 0
}
sum := 0
for _, rank := range cb {
if rank[file-1] {
sum += 1
}
}
return sum
}
// CountAll should count how many squares are present in the chessboard
func CountAll(cb Chessboard) int {
sum := 0
for _, rank := range cb {
sum += len(rank)
}
return sum
}
// CountOccupied returns how many squares are occupied in the chessboard
func CountOccupied(cb Chessboard) int {
sum := 0
for name := range cb {
sum += CountInRank(cb, name)
}
return sum
}