(define (set-move-tables)

; index vector with source square to access possible destination squares.

(set! knight-table
  (list->vector '(
    (10 17) ; 0
    (16 11 18) ; 1
    (17 8 12 19) ; 2
    (18 9 13 20) ; 3
    (19 10 14 21) ; 4
    (20 11 15 22) ; 5
    (21 12 23) ; 6
    (22 13) ; 7
    (2 18 25) ; 8
    (24 3 19 26) ; 9
    (25 16 0 4 20 27) ; 10
    (26 17 1 5 21 28) ; 11
    (27 18 2 6 22 29) ; 12
    (28 19 3 7 23 30) ; 13
    (29 20 4 31) ; 14
    (30 21 5) ; 15
    (1 10 26 33) ; 16
    (32 0 2 11 27 34) ; 17
    (33 24 8 1 3 12 28 35) ; 18
    (34 25 9 2 4 13 29 36) ; 19
    (35 26 10 3 5 14 30 37) ; 20
    (36 27 11 4 6 15 31 38) ; 21
    (37 28 12 5 7 39) ; 22
    (38 29 13 6) ; 23
    (9 18 34 41) ; 24
    (40 8 10 19 35 42) ; 25
    (41 32 16 9 11 20 36 43) ; 26
    (42 33 17 10 12 21 37 44) ; 27
    (43 34 18 11 13 22 38 45) ; 28
    (44 35 19 12 14 23 39 46) ; 29
    (45 36 20 13 15 47) ; 30
    (46 37 21 14) ; 31
    (17 26 42 49) ; 32
    (48 16 18 27 43 50) ; 33
    (49 40 24 17 19 28 44 51) ; 34
    (50 41 25 18 20 29 45 52) ; 35
    (51 42 26 19 21 30 46 53) ; 36
    (52 43 27 20 22 31 47 54) ; 37
    (53 44 28 21 23 55) ; 38
    (54 45 29 22) ; 39
    (25 34 50 57) ; 40
    (56 24 26 35 51 58) ; 41
    (57 48 32 25 27 36 52 59) ; 42
    (58 49 33 26 28 37 53 60) ; 43
    (59 50 34 27 29 38 54 61) ; 44
    (60 51 35 28 30 39 55 62) ; 45
    (61 52 36 29 31 63) ; 46
    (62 53 37 30) ; 47
    (33 42 58) ; 48
    (32 34 43 59) ; 49
    (56 40 33 35 44 60) ; 50
    (57 41 34 36 45 61) ; 51
    (58 42 35 37 46 62) ; 52
    (59 43 36 38 47 63) ; 53
    (60 44 37 39) ; 54
    (61 45 38) ; 55
    (41 50) ; 56
    (40 42 51) ; 57
    (48 41 43 52) ; 58
    (49 42 44 53) ; 59
    (50 43 45 54) ; 60
    (51 44 46 55) ; 61
    (52 45 47) ; 62
    (53 46) ; 63
  )))

(set! king-table
  (list->vector '(
    (9 1 8) ; 0
    (10 2 0 8 9) ; 1
    (11 3 1 9 10) ; 2
    (12 4 2 10 11) ; 3
    (13 5 3 11 12) ; 4
    (14 6 4 12 13) ; 5
    (15 7 5 13 14) ; 6
    (6 14 15) ; 7
    (17 9 1 0 16) ; 8
    (18 10 2 1 0 8 16 17) ; 9
    (19 11 3 2 1 9 17 18) ; 10
    (20 12 4 3 2 10 18 19) ; 11
    (21 13 5 4 3 11 19 20) ; 12
    (22 14 6 5 4 12 20 21) ; 13
    (23 15 7 6 5 13 21 22) ; 14
    (7 6 14 22 23) ; 15
    (25 17 9 8 24) ; 16
    (26 18 10 9 8 16 24 25) ; 17
    (27 19 11 10 9 17 25 26) ; 18
    (28 20 12 11 10 18 26 27) ; 19
    (29 21 13 12 11 19 27 28) ; 20
    (30 22 14 13 12 20 28 29) ; 21
    (31 23 15 14 13 21 29 30) ; 22
    (15 14 22 30 31) ; 23
    (33 25 17 16 32) ; 24
    (34 26 18 17 16 24 32 33) ; 25
    (35 27 19 18 17 25 33 34) ; 26
    (36 28 20 19 18 26 34 35) ; 27
    (37 29 21 20 19 27 35 36) ; 28
    (38 30 22 21 20 28 36 37) ; 29
    (39 31 23 22 21 29 37 38) ; 30
    (23 22 30 38 39) ; 31
    (41 33 25 24 40) ; 32
    (42 34 26 25 24 32 40 41) ; 33
    (43 35 27 26 25 33 41 42) ; 34
    (44 36 28 27 26 34 42 43) ; 35
    (45 37 29 28 27 35 43 44) ; 36
    (46 38 30 29 28 36 44 45) ; 37
    (47 39 31 30 29 37 45 46) ; 38
    (31 30 38 46 47) ; 39
    (49 41 33 32 48) ; 40
    (50 42 34 33 32 40 48 49) ; 41
    (51 43 35 34 33 41 49 50) ; 42
    (52 44 36 35 34 42 50 51) ; 43
    (53 45 37 36 35 43 51 52) ; 44
    (54 46 38 37 36 44 52 53) ; 45
    (55 47 39 38 37 45 53 54) ; 46
    (39 38 46 54 55) ; 47
    (57 49 41 40 56) ; 48
    (58 50 42 41 40 48 56 57) ; 49
    (59 51 43 42 41 49 57 58) ; 50
    (60 52 44 43 42 50 58 59) ; 51
    (61 53 45 44 43 51 59 60) ; 52
    (62 54 46 45 44 52 60 61) ; 53
    (63 55 47 46 45 53 61 62) ; 54
    (47 46 54 62 63) ; 55
    (57 49 48) ; 56
    (58 50 49 48 56) ; 57
    (59 51 50 49 57) ; 58
    (60 52 51 50 58) ; 59
    (61 53 52 51 59) ; 60
    (62 54 53 52 60) ; 61
    (63 55 54 53 61) ; 62
    (55 54 62) ; 63
  )))

(set! bishop-table
  (list->vector '(
    ( ; 0
      ()
      (9 18 27 36 45 54 63)
      ()
      ())
    ( ; 1
      ()
      (10 19 28 37 46 55)
      (8)
      ())
    ( ; 2
      ()
      (11 20 29 38 47)
      (9 16)
      ())
    ( ; 3
      ()
      (12 21 30 39)
      (10 17 24)
      ())
    ( ; 4
      ()
      (13 22 31)
      (11 18 25 32)
      ())
    ( ; 5
      ()
      (14 23)
      (12 19 26 33 40)
      ())
    ( ; 6
      ()
      (15)
      (13 20 27 34 41 48)
      ())
    ( ; 7
      ()
      ()
      (14 21 28 35 42 49 56)
      ())
    ( ; 8
      (1)
      (17 26 35 44 53 62)
      ()
      ())
    ( ; 9
      (2)
      (9 18 27 36 45 54 63)
      (16)
      (0))
    ( ; 10
      (3)
      (19 28 37 46 55)
      (17 24)
      (1))
    ( ; 11
      (4)
      (20 29 38 47)
      (18 25 32)
      (2))
    ( ; 12
      (5)
      (21 30 39)
      (19 26 33 40)
      (3))
    ( ; 13
      (6)
      (22 31)
      (20 27 34 41 48)
      (4))
    ( ; 14
      (7)
      (23)
      (21 28 35 42 49 56)
      (5))
    ( ; 15
      ()
      ()
      (22 29 36 43 50 57)
      (6))
    ( ; 16
      (9 2)
      (25 34 43 52 61)
      ()
      ())
    ( ; 17
      (10 3)
      (26 35 44 53 62)
      (24)
      (8))
    ( ; 18
      (11 4)
      (27 36 45 54 63)
      (25 32)
      (9 0))
    ( ; 19
      (12 5)
      (28 37 46 55)
      (26 33 40)
      (10 1))
    ( ; 20
      (13 6)
      (29 38 47)
      (27 34 41 48)
      (11 2))
    ( ; 21
      (14 7)
      (30 39)
      (28 35 42 49 56)
      (12 3))
    ( ; 22
      (15)
      (31)
      (29 36 43 50 57)
      (13 4))
    ( ; 23
      ()
      ()
      (30 37 44 51 58)
      (14 5))
    ( ; 24
      (17 10 3)
      (33 42 51 60)
      ()
      ())
    ( ; 25
      (18 11 4)
      (34 43 52 61)
      (32)
      (16))
    ( ; 26
      (19 12 5)
      (35 44 53 62)
      (33 40)
      (17 8))
    ( ; 27
      (20 13 6)
      (36 45 54 63)
      (34 41 48)
      (18 9 0))
    ( ; 28
      (21 14 7)
      (37 46 55)
      (35 42 49 56)
      (19 10 1))
    ( ; 29
      (22 15)
      (38 47)
      (36 43 50 57)
      (20 11 2))
    ( ; 30
      (23)
      (39)
      (37 44 51 58)
      (21 12 3))
    ( ; 31
      ()
      ()
      (38 45 52 59)
      (22 13 4))
    ( ; 32
      (25 18 11 4)
      (41 50 59)
      ()
      ())
    ( ; 33
      (26 19 12 5)
      (42 51 60)
      (40)
      (24))
    ( ; 34
      (27 20 13 6)
      (43 52 61)
      (41 48)
      (25 16))
    ( ; 35
      (28 21 14 7)
      (44 53 62)
      (42 49 56)
      (26 17 8))
    ( ; 36
      (29 22 15)
      (45 54 63)
      (43 50 57)
      (27 18 9 0))
    ( ; 37
      (30 23)
      (46 55)
      (44 51 58)
      (28 19 10 1))
    ( ; 38
      (31)
      (47)
      (45 52 59)
      (29 20 11 2))
    ( ; 39
      ()
      ()
      (46 53 60)
      (30 21 12 3))
    ( ; 40
      (33 26 19 12 5)
      (49 58)
      ()
      ())
    ( ; 41
      (34 27 20 13 6)
      (50 59)
      (48)
      (32))
    ( ; 42
      (35 28 21 14 7)
      (51 60)
      (49 56)
      (33 24))
    ( ; 43
      (36 29 22 15)
      (52 61)
      (50 57)
      (34 25 16))
    ( ; 44
      (37 30 23)
      (53 62)
      (51 58)
      (35 26 17 8))
    ( ; 45
      (38 31)
      (54 63)
      (52 59)
      (36 27 18 9 0))
    ( ; 46
      (39)
      (55)
      (53 60)
      (37 28 19 10 1))
    ( ; 47
      ()
      ()
      (54 61)
      (38 29 20 11 2))
    ( ; 48
      (41 34 27 20 13 6)
      (57)
      ()
      ())
    ( ; 49
      (42 35 28 21 14 7)
      (58)
      (56)
      (40))
    ( ; 50
      (43 36 29 22 15)
      (59)
      (57)
      (41 32))
    ( ; 51
      (44 37 30 23)
      (60)
      (58)
      (42 33 24))
    ( ; 52
      (45 38 31)
      (61)
      (59)
      (43 34 25 16))
    ( ; 53
      (46 39)
      (62)
      (60)
      (44 35 26 17 8))
    ( ; 54
      (47)
      (63)
      (61)
      (45 36 27 18 9 0))
    ( ; 55
      ()
      ()
      (62)
      (46 37 28 19 10 1))
    ( ; 56
      (49 42 35 28 21 14 7)
      ()
      ()
      ())
    ( ; 57
      (50 43 36 29 22 15)
      ()
      ()
      (48))
    ( ; 58
      (51 44 37 30 23)
      ()
      ()
      (49 40))
    ( ; 59
      (52 45 38 31)
      ()
      ()
      (50 41 32))
    ( ; 60
      (53 46 39)
      ()
      ()
      (51 42 33 24))
    ( ; 61
      (54 47)
      ()
      ()
      (52 43 34 25 16))
    ( ; 62
      (55)
      ()
      ()
      (53 44 35 26 17 8))
    ( ; 63
      ()
      ()
      ()
      (54 45 36 27 18 9 0))
  )))

(set! rook-table
  (list->vector '(
    ( ; 0
      ()
      (1 2 3 4 5 6 7)
      (8 16 24 32 40 48 56)
      ())
    ( ; 1
      ()
      (2 3 4 5 6 7)
      (9 17 25 33 41 49 57)
      (0))
    ( ; 2
      ()
      (3 4 5 6 7)
      (10 18 26 34 42 50 58)
      (1 0))
    ( ; 3
      ()
      (4 5 6 7)
      (11 19 27 35 43 51 59)
      (2 1 0))
    ( ; 4
      ()
      (5 6 7)
      (12 20 28 36 44 52 60)
      (3 2 1 0))
    ( ; 5
      ()
      (6 7)
      (13 21 29 37 45 53 61)
      (4 3 2 1 0))
    ( ; 6
      ()
      (7)
      (14 22 30 38 46 54 62)
      (5 4 3 2 1 0))
    ( ; 7
      ()
      ()
      (15 23 31 39 47 55 63)
      (6 5 4 3 2 1 0))
    ( ; 8
      (0)
      (9 10 11 12 13 14 15)
      (16 24 32 40 48 56)
      ())
    ( ; 9
      (1)
      (10 11 12 13 14 15)
      (17 25 33 41 49 57)
      (8))
    ( ; 10
      (2)
      (11 12 13 14 15)
      (18 26 34 42 50 58)
      (9 8))
    ( ; 11
      (3)
      (12 13 14 15)
      (19 27 35 43 51 59)
      (10 9 8))
    ( ; 12
      (4)
      (13 14 15)
      (20 28 36 44 52 60)
      (11 10 9 8))
    ( ; 13
      (5)
      (14 15)
      (21 29 37 45 53 61)
      (12 11 10 9 8))
    ( ; 14
      (6)
      (15)
      (22 30 38 46 54 62)
      (13 12 11 10 9 8))
    ( ; 15
      (7)
      ()
      (23 31 39 47 55 63)
      (14 13 12 11 10 9 8))
    ( ; 16
      (8 0)
      (17 18 19 20 21 22 23)
      (24 32 40 48 56)
      ())
    ( ; 17
      (9 1)
      (18 19 20 21 22 23)
      (25 33 41 49 57)
      (16))
    ( ; 18
      (10 2)
      (19 20 21 22 23)
      (26 34 42 50 58)
      (17 16))
    ( ; 19
      (11 3)
      (20 21 22 23)
      (27 35 43 51 59)
      (18 17 16))
    ( ; 20
      (12 4)
      (21 22 23)
      (28 36 44 52 60)
      (19 18 17 16))
    ( ; 21
      (13 5)
      (22 23)
      (29 37 45 53 61)
      (20 19 18 17 16))
    ( ; 22
      (14 6)
      (23)
      (30 38 46 54 62)
      (21 20 19 18 17 16))
    ( ; 23
      (15 7)
      ()
      (31 39 47 55 63)
      (22 21 20 19 18 17 16))
    ( ; 24
      (16 8 0)
      (25 26 27 28 29 30 31)
      (32 40 48 56)
      ())
    ( ; 25
      (17 9 1)
      (26 27 28 29 30 31)
      (33 41 49 57)
      (24))
    ( ; 26
      (18 10 2)
      (27 28 29 30 31)
      (34 42 50 58)
      (25 24))
    ( ; 27
      (19 11 3)
      (28 29 30 31)
      (35 43 51 59)
      (26 25 24))
    ( ; 28
      (20 12 4)
      (29 30 31)
      (36 44 52 60)
      (27 26 25 24))
    ( ; 29
      (21 13 5)
      (30 31)
      (37 45 53 61)
      (28 27 26 25 24))
    ( ; 30
      (22 14 6)
      (31)
      (38 46 54 62)
      (29 28 27 26 25 24))
    ( ; 31
      (23 15 7)
      ()
      (39 47 55 63)
      (30 29 28 27 26 25 24))
    ( ; 32
      (24 16 8 0)
      (33 34 35 36 37 38 39)
      (40 48 56)
      ())
    ( ; 33
      (25 17 9 1)
      (34 35 36 37 38 39)
      (41 49 57)
      (32))
    ( ; 34
      (26 18 10 2)
      (35 36 37 38 39)
      (42 50 58)
      (33 32))
    ( ; 35
      (27 19 11 3)
      (36 37 38 39)
      (43 51 59)
      (34 33 32))
    ( ; 36
      (28 20 12 4)
      (37 38 39)
      (44 52 60)
      (35 34 33 32))
    ( ; 37
      (29 21 13 5)
      (38 39)
      (45 53 61)
      (36 35 34 33 32))
    ( ; 38
      (30 22 14 6)
      (39)
      (46 54 62)
      (37 36 35 34 33 32))
    ( ; 39
      (31 23 15 7)
      ()
      (47 55 63)
      (38 37 36 35 34 33 32))
    ( ; 40
      (32 24 16 8 0)
      (41 42 43 44 45 46 47)
      (48 56)
      ())
    ( ; 41
      (33 25 17 9 1)
      (42 43 44 45 46 47)
      (49 57)
      (40))
    ( ; 42
      (34 26 18 10 2)
      (43 44 45 46 47)
      (50 58)
      (41 40))
    ( ; 43
      (35 27 19 11 3)
      (44 45 46 47)
      (51 59)
      (42 41 40))
    ( ; 44
      (36 28 20 12 4)
      (45 46 47)
      (52 60)
      (43 42 41 40))
    ( ; 45
      (37 29 21 13 5)
      (46 47)
      (53 61)
      (44 43 42 41 40))
    ( ; 46
      (38 30 22 14 6)
      (47)
      (54 62)
      (45 44 43 42 41 40))
    ( ; 47
      (39 31 23 15 7)
      ()
      (55 63)
      (46 45 44 43 42 41 40))
    ( ; 48
      (40 32 24 16 8 0)
      (49 50 51 52 53 54 55)
      (56)
      ())
    ( ; 49
      (41 33 25 17 9 1)
      (50 51 52 53 54 55)
      (57)
      (48))
    ( ; 50
      (42 34 26 18 10 2)
      (51 52 53 54 55)
      (58)
      (49 48))
    ( ; 51
      (43 35 27 19 11 3)
      (52 53 54 55)
      (59)
      (50 49 48))
    ( ; 52
      (44 36 28 20 12 4)
      (53 54 55)
      (60)
      (51 50 49 48))
    ( ; 53
      (45 37 29 21 13 5)
      (54 55)
      (61)
      (52 51 50 49 48))
    ( ; 54
      (46 38 30 22 14 6)
      (55)
      (62)
      (53 52 51 50 49 48))
    ( ; 55
      (47 39 31 23 15 7)
      ()
      (63)
      (54 53 52 51 50 49 48))
    ( ; 56
      (48 40 32 24 16 8 0)
      (57 58 59 60 61 62 63)
      ()
      ())
    ( ; 57
      (49 41 33 25 17 9 1)
      (58 59 60 61 62 63)
      ()
      (56))
    ( ; 58
      (50 42 34 26 18 10 2)
      (59 60 61 62 63)
      ()
      (57 56))
    ( ; 59
      (51 43 35 27 19 11 3)
      (60 61 62 63)
      ()
      (58 57 56))
    ( ; 60
      (52 44 36 28 20 12 4)
      (61 62 63)
      ()
      (59 58 57 56))
    ( ; 61
      (53 45 37 29 21 13 5)
      (62 63)
      ()
      (60 59 58 57 56))
    ( ; 62
      (54 46 38 30 22 14 6)
      (63)
      ()
      (61 60 59 58 57 56))
    ( ; 63
      (55 47 39 31 23 15 7)
      ()
      ()
      (62 61 60 59 58 57 56))
  )))
)