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 }