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
/* Input: `r1bk3r/p2pBpNp/n4n2/1p1NP2P/6P1/3P4/P1P1K3/q5b1`
Output: `
|♜| |♝|♚| | | |♜|
|♟︎| | |♟︎|♗|♟︎|♘|♟︎|
|♞| | | | |♞| | |
| |♟︎| |♘|♙| | |♙|
| | | | | | |♙| |
| | | |♙| | | | |
|♙| |♙| |♔| | | |
|♛| | | | | |♝| |`
*/
export let fenToASCIIboard = async function (fenString) {
// https://en.wikipedia.org/wiki/Chess_symbols_in_Unicode
const charToPiece = {
K: "♔",
Q: "♕",
R: "♖",
B: "♗",
N: "♘",
P: "♙",
k: "♚",
q: "♛",
r: "♜",
b: "♝",
n: "♞",
p: "♟︎",
};
// https://codegolf.stackexchange.com/a/78330
const fenToBoard = (a) =>
a.split`/`.map(
(x) =>
[
,
...x.replace(/\d/g, (t) => " ".repeat(t)),
`
`,
].join`|`
).join``;
return fenToBoard(fenString)
.split("")
.map((c) => charToPiece[c] || c)
.join("");
};