1

Hidden Test case 4

I am at task 2 of Google foobar test. The task is to find the smallest number of moves to reach at the destination node from the start node using Knight's move. Code is running fine and giving intended output. but there is a hidden test case number 4 that is failing and I can't figure out why.

from itertools import product
def solution(src, dest):
    puzzle = [[0,  1,  2,  3,  4,  5,  6,  7],
         [8,  9,  10, 11, 12, 13, 14, 15],
         [16, 17, 18, 19, 20, 21, 22, 23],
         [24, 25, 26, 27, 28, 29, 30, 31],
         [32, 33, 34, 35, 36, 37, 38, 39],
         [40, 41, 42, 43, 44, 45, 46, 47],
         [48, 49, 50, 51, 52, 53, 54, 55],
         [56, 57, 58, 59, 60, 61, 62, 63]]
    if (src not in range(0,64) or dest not in range(0,64)) :
        raise Exception('out of range')
    step = 1
    row_start = 0
    r_e = 7
    str_r = 0
    str_c = 0
    while src:
        if r_s <= src <= r_e:
            for i in range(0, 8):
                if puzzle[str_r][i] == src:
                    str_c = i
                    break
            break
        str_r += 1
        r_s += 8
        r_e += 8
    moves = list(product([str_r - 1, str_r + 1], [str_c - 2, str_c + 2])) + list(product([str_r - 2, str_r + 2],[str_c - 1, str_c + 1]))
    m_s = [(x,y) for x,y in moves if x >= 0 and y >= 0 and x < 8 and y < 8]
    for i, j in m_s:
        if puzzle[i][j] == dest:
            move_counter = step
            return move_counter
    while True:
        step += 1
        List_steps = []
        for i, j in m_s:
            r_s = 0
            r_e = 7
            str_r = 0
            str_c = 0
            while True:
                if r_s <= puzzle[i][j] <= r_e:
                    for x in range(0, 8):
                        if puzzle[str_r][x] == puzzle[i][j]:
                            str_c = x
                            break
                    break
                str_r += 1
                r_s += 8
                r_e += 8
            moves = list(product([str_r - 1, str_r + 1], [str_c - 2, str_c + 2])) + list(product([str_r - 2, str_r + 2],[str_c - 1, str_c + 1]))
            m_z = [(x,y) for x,y in moves if x >= 0 and y >= 0 and x < 8 and y < 8]
            for m, n in m_z:
                if puzzle[m][n] == dest:
                    return step
            move_counter = 'Not Found'
            List_steps += m_z
        if move_counter == 'Not Found':
            m_s = list(set(List_steps))
            continue

if __name__ == '__main__':
    start = int(input("Input Source :"))
    end = int(input("Input Destination :"))
    print(solution(start, end))

Problem

Suggest me anything that you think should I change to pass this test case. I have been stuck on this from last several days

1201ProgramAlarm
  • 32,384
  • 7
  • 42
  • 56
ALI AHMAD
  • 33
  • 3
  • Does this answer your question? [Find bug in my Knight's Move Python Program](https://stackoverflow.com/questions/66004332/find-bug-in-my-knights-move-python-program) – Arne Apr 30 '21 at 21:28

0 Answers0