All challenges
Medium 0 solved 0% acceptance

Two Nonattacking Knights

Count safe placements of two knights for each square board size.

Problem

For each board size k from 1 through n, count unordered pairs of distinct squares on a k by k board where two knights cannot attack each other. A knight moves two squares in one axis and one in the other.

. x . x .
x . . . x
. . K . .
x . . . x
. x . x .

K marks a knight and x its possible destinations, when those squares lie on the board. Swapping the two knights does not create another placement.

Implement two_knights(n).

Input

n: The largest board size to consider.

Output

Return n counts in order, for board sizes 1 through n.

Constraints

1 ≤ n ≤ 10,000. Counts fit signed 64-bit integers.

Examples

Example 1
Input:
n = 3

Expected output:
expected = [0, 6, 28]
Input:
long long n = 3;

Expected output:
std::vector<long long> expected = {0, 6, 28};
Input:
long n = 3;

Expected output:
long[] expected = new long[] {0, 6, 28};

Explanation

A 1 × 1 board cannot hold two knights. A 2 × 2 board has six pairs and no attacks. A 3 × 3 board has 36 pairs, of which eight attack, leaving 28.

Example 2
Input:
n = 1

Expected output:
expected = [0]
Input:
long long n = 1;

Expected output:
std::vector<long long> expected = {0};
Input:
long n = 1;

Expected output:
long[] expected = new long[] {0};

Explanation

Two distinct squares are required, but the board has only one.

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.