Back to Freecodecamp

Challenge 244: Rook and Bishop Attack

curriculum/challenges/english/blocks/daily-coding-challenges-javascript/69b5b2be76ec8135a7fbe973.md

latest2.3 KB
Original Source

--description--

Given a string for the location of a rook on a chess board, and another for the location of a bishop, determine if one piece can attack another.

A standard chessboard is 8x8, with columns labeled A through H (left to right) and rows labeled 1 through 8 (bottom to top). It looks like this:

A8B8C8D8E8F8G8H8
A7B7C7D7E7F7G7H7
A6B6C6D6E6F6G6H6
A5B5C5D5E5F5G5H5
A4B4C4D4E4F4G4H4
A3B3C3D3E3F3G3H3
A2B2C2D2E2F2G2H2
A1B1C1D1E1F1G1H1
  • Rooks can move as many squares as they want in a horizontal or vertical direction.
  • Bishops can move as many squares as they want in any diagonal direction.
  • One piece can attack another if it can move to the location of that piece.

Return:

  • "rook" if the rook can attack the bishop.
  • "bishop" if the bishop can attack the rook.
  • "neither" if neither piece can attack one another.

--hints--

rookBishopAttack("A1", "A5") should return "rook".

js
assert.equal(rookBishopAttack("A1", "A5"), "rook");

rookBishopAttack("C3", "F6") should return "bishop".

js
assert.equal(rookBishopAttack("C3", "F6"), "bishop");

rookBishopAttack("D4", "D7") should return "rook".

js
assert.equal(rookBishopAttack("D4", "D7"), "rook");

rookBishopAttack("B7", "H1") should return "bishop".

js
assert.equal(rookBishopAttack("B7", "H1"), "bishop");

rookBishopAttack("B3", "C5") should return "neither".

js
assert.equal(rookBishopAttack("B3", "C5"), "neither");

rookBishopAttack("G3", "E8") should return "neither".

js
assert.equal(rookBishopAttack("G3", "E8"), "neither");

--seed--

--seed-contents--

js
function rookBishopAttack(rook, bishop) {

  return rook;
}

--solutions--

js
function rookBishopAttack(rook, bishop) {
  const colDiff = Math.abs(rook.charCodeAt(0) - bishop.charCodeAt(0));
  const rowDiff = Math.abs(rook[1] - bishop[1]);

  if (rook[0] === bishop[0] || rook[1] === bishop[1]) return "rook";
  if (colDiff === rowDiff) return "bishop";
  return "neither";
}