Do you reach many, do you reach one?
def knight_jump(knight, start, end):
An ordinary chess knight on a two-dimensional board of squares can make an “L-move” into up toneight possible neighbours. However, we can generalize the entire chessboard into k dimensions from just the puny two. A natural extension of the knight's move to keep moves symmetric with
respect to these dimensions is to define the possible moves as some k-tuple of strictly decreasing nonnegative integer offsets. Each one of these k offsets must be used for exactly one dimension of your choice during the move, either as a positive or a negative version.
For example, the three-dimensional (4,3,1)-knight makes its way by first moving four steps along any one of the three dimensions, then three steps along any other dimension, and then one step along the remaining dimension, whichever dimensions that was. These steps are considered to be performed together as a single jump that does not visit or is blocked by any of the intermediate squares. Given the start and end positions as k-tuples of integer coordinates, determine whether the knight can get from start to end in a single jump.
A quick combinatorial calculation reveals that exactly k! * 2k possible neighbours are reachable in a single move, ignoring moves that would jump outside the board. In this notation, the ordinary chess knight is a (2,1)-knight that reaches 2! * 22 = 2 * 4 = 8 neighbours in one jump. A 6-dimensional knight could reach a whopping 6! * 26 = 46080 different neighbours in one jump! Since the number of moves emanating from each position to its neighbours grows exponentially with respect to k, pretty much everything ends up being close to almost everything else in high-dimensional spaces. (Density in general is known to have both advantages and disadvantages in all walks of life.)
Extracted text: knight start end Expected result (2, 1) (12, 10) (11, 12) True (7, 5, 1) (15, 11, 16) (8, 12, 11) True (9, 7, 6, 5, (19, 12, 14, 11, 20) (24, 3, 20, 11, 13) False 1)