package queenattack import ( "errors" "math" ) // CanQueenAttack takes two positions one for a // white queen (wq) and one for a black queen (bq) // it returns a boolean value: if an attack can // be made, and an error func CanQueenAttack(wq, bq string) (bool, error) { if len(wq) != 2 || len(bq) != 2 || wq[0] < 'a' || wq[0] > 'z' || wq[1] < '0' || wq[1] > '8' || bq[0] < 'a' || bq[0] > 'z' || bq[1] < '0' || bq[1] > '8' || wq == bq { return false, errors.New("Invalid pieces/placement") } wx, wy := float64(int8(wq[0])), float64(int8(wq[1])) bx, by := float64(int8(bq[0])), float64(int8(bq[1])) if wx == bx || wy == by || math.Abs(wx-bx) == math.Abs(wy-by) { return true, nil } return false, nil }