A chess library for Gleam
1const tables = {
2 "pawn": `#(
3 #(000, 000, 000, 000, 000, 000, 000, 000),
4 #(-007, 007, -003, -013, 005, -016, 010, -008),
5 #(005, -012, -007, 022, -008, -005, -015, -008),
6 #(013, 000, -013, 001, 011, -002, -013, 005),
7 #(-004, -023, 006, 020, 040, 017, 004, -008),
8 #(-009, -015, 011, 015, 032, 022, 005, -022),
9 #(003, 003, 010, 019, 016, 019, 007, -005),
10 #(000, 000, 000, 000, 000, 000, 000, 000),
11)`,
12
13 "knight": `#(
14 #(-201, -083, -056, -026, -026, -056, -083, -201),
15 #(-067, -027, 004, 037, 037, 004, -027, -067),
16 #(-009, 022, 058, 053, 053, 058, 022, -009),
17 #(-034, 013, 044, 051, 051, 044, 013, -034),
18 #(-035, 008, 040, 049, 049, 040, 008, -035),
19 #(-061, -017, 006, 012, 012, 006, -017, -061),
20 #(-077, -041, -027, -015, -015, -027, -041, -077),
21 #(-175, -092, -074, -073, -073, -074, -092, -175),
22)`,
23
24 "bishop": `#(
25 #(-048, 001, -014, -023, -023, -014, 001, -048),
26 #(-017, -014, 005, 000, 000, 005, -014, -017),
27 #(-016, 006, 001, 011, 011, 001, 006, -016),
28 #(-012, 029, 022, 031, 031, 022, 029, -012),
29 #(-005, 011, 025, 039, 039, 025, 011, -005),
30 #(-007, 021, -005, 017, 017, -005, 021, -007),
31 #(-015, 008, 019, 004, 004, 019, 008, -015),
32 #(-053, -005, -008, -023, -023, -008, -005, -053),
33)`,
34
35 "rook": `#(
36 #(-017, -019, -001, 009, 009, -001, -019, -017),
37 #(-002, 012, 016, 018, 018, 016, 012, -002),
38 #(-022, -002, 006, 012, 012, 006, -002, -022),
39 #(-027, -015, -004, 003, 003, -004, -015, -027),
40 #(-013, -005, -004, -006, -006, -004, -005, -013),
41 #(-025, -011, -001, 003, 003, -001, -011, -025),
42 #(-021, -013, -008, 006, 006, -008, -013, -021),
43 #(-031, -020, -014, -005, -005, -014, -020, -031),
44)`,
45
46 "queen": `#(
47 #(-002, -002, 001, -002, -002, 001, -002, -002),
48 #(-005, 006, 010, 008, 008, 010, 006, -005),
49 #(-004, 010, 006, 008, 008, 006, 010, -004),
50 #(000, 014, 012, 005, 005, 012, 014, 000),
51 #(004, 005, 009, 008, 008, 009, 005, 004),
52 #(-003, 006, 013, 007, 007, 013, 006, -003),
53 #(-003, 005, 008, 012, 012, 008, 005, -003),
54 #(003, -005, -005, 004, 004, -005, -005, 003),
55)`,
56
57 "king": `#(
58 #(059, 089, 045, -001, -001, 045, 089, 059),
59 #(088, 120, 065, 033, 033, 065, 120, 088),
60 #(123, 145, 081, 031, 031, 081, 145, 123),
61 #(154, 179, 105, 070, 070, 105, 179, 154),
62 #(164, 190, 138, 098, 098, 138, 190, 164),
63 #(195, 258, 169, 120, 120, 169, 258, 195),
64 #(278, 303, 234, 179, 179, 234, 303, 278),
65 #(271, 327, 271, 198, 198, 271, 327, 271),
66)`,
67
68 "pawn_endgame": `#(
69 #(000, 000, 000, 000, 000, 000, 000, 000),
70 #(000, -011, 012, 021, 025, 019, 004, 007),
71 #(028, 020, 021, 028, 030, 007, 006, 013),
72 #(010, 005, 004, -005, -005, -005, 014, 009),
73 #(006, -002, -008, -004, -013, -012, -010, -009),
74 #(-010, -010, -010, 004, 004, 003, -006, -004),
75 #(-010, -006, 010, 000, 014, 007, -005, -019),
76 #(000, 000, 000, 000, 000, 000, 000, 000),
77)`,
78
79 "knight_endgame": `#(
80 #(-100, -088, -056, -017, -017, -056, -088, -100),
81 #(-069, -050, -051, 012, 012, -051, -050, -069),
82 #(-051, -044, -016, 017, 017, -016, -044, -051),
83 #(-045, -016, 009, 039, 039, 009, -016, -045),
84 #(-035, -002, 013, 028, 028, 013, -002, -035),
85 #(-040, -027, -008, 029, 029, -008, -027, -040),
86 #(-067, -054, -018, 008, 008, -018, -054, -067),
87 #(-096, -065, -049, -021, -021, -049, -065, -096),
88)`,
89
90 "bishop_endgame": `#(
91 #(-046, -042, -037, -024, -024, -037, -042, -046),
92 #(-031, -020, -001, 001, 001, -001, -020, -031),
93 #(-030, 006, 004, 006, 006, 004, 006, -030),
94 #(-017, -001, -014, 015, 015, -014, -001, -017),
95 #(-020, -006, 000, 017, 017, 000, -006, -020),
96 #(-016, -001, -002, 010, 010, -002, -001, -016),
97 #(-037, -013, -017, 001, 001, -017, -013, -037),
98 #(-057, -030, -037, -012, -012, -037, -030, -057),
99)`,
100
101 "rook_endgame": `#(
102 #(018, 000, 019, 013, 013, 019, 000, 018),
103 #(004, 005, 020, -005, -005, 020, 005, 004),
104 #(006, 001, -007, 010, 010, -007, 001, 006),
105 #(-005, 008, 007, -006, -006, 007, 008, -005),
106 #(-006, 001, -009, 007, 007, -009, 001, -006),
107 #(006, -008, -002, -006, -006, -002, -008, 006),
108 #(-012, -009, -001, -002, -002, -001, -009, -012),
109 #(-009, -013, -010, -009, -009, -010, -013, -009),
110)`,
111
112 "queen_endgame": `#(
113 #(-075, -052, -043, -036, -036, -043, -052, -075),
114 #(-050, -027, -024, -008, -008, -024, -027, -050),
115 #(-038, -018, -012, 001, 001, -012, -018, -038),
116 #(-029, -006, 009, 021, 021, 009, -006, -029),
117 #(-023, -003, 013, 024, 024, 013, -003, -023),
118 #(-039, -018, -009, 003, 003, -009, -018, -039),
119 #(-055, -031, -022, -004, -004, -022, -031, -055),
120 #(-069, -057, -047, -026, -026, -047, -057, -069),
121)`,
122
123 "king_endgame": `#(
124 #(011, 059, 073, 078, 078, 073, 059, 011),
125 #(047, 121, 116, 131, 131, 116, 121, 047),
126 #(092, 172, 184, 191, 191, 184, 172, 092),
127 #(096, 166, 199, 199, 199, 199, 166, 096),
128 #(103, 156, 172, 172, 172, 172, 156, 103),
129 #(088, 130, 169, 175, 175, 169, 130, 088),
130 #(053, 100, 133, 135, 135, 133, 100, 053),
131 #(001, 045, 085, 076, 076, 085, 045, 001),
132)`,
133}
134
135let out = "";
136
137for (let [name, table] of Object.entries(tables)) {
138 if (!table.startsWith("#(\n")) throw undefined;
139 if (!table.endsWith("\n)")) throw undefined;
140
141 table = table.slice(3, table.length - 2);
142
143 const rows = table.split("\n").reverse();
144
145 const reverseTable = `#(
146${rows.join("\n")}
147)`;
148
149 out += `const ${name} = ${reverseTable}\n\n`;
150}
151
152console.log(out);