summaryrefslogtreecommitdiff
path: root/go/queen-attack/queen_attack.go
blob: 536ae474de86802df216724d6ea579bfebe5346a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package queenattack

import "errors"

func abs(n int) int {
	if n < 0 {
		return -n
	}
	return n
}

func parseLoc(l string) (int, int, error) {
	if len(l) != 2 {
		return 0, 0, errors.New("invalid")
	}
	if l[0] < 'a' || l[0] > 'h' {
		return 0, 0, errors.New("off board")
	}
	if l[1] < '1' || l[1] > '8' {
		return 0, 0, errors.New("off board")
	}
	return int(l[0] - 'a'), int(l[1] - '1'), nil
}

func CanQueenAttack(w, b string) (bool, error) {
	if w == b {
		return false, errors.New("same square")
	}
	wx, wy, err := parseLoc(w)
	if err != nil {
		return false, err
	}
	bx, by, err := parseLoc(b)
	if err != nil {
		return false, err
	}
	return wx == bx || wy == by || abs(wx-bx) == abs(wy-by), nil
}