javascript - 是否有可能采用 FEN aka forsyth-edward 符号并将其从黑色翻转为 play and win to white

标签 javascript python chess chessboard.js fen

假设我们有一个国际象棋分局,分局是一个黑棋获胜的问题。很多时候,国际象棋拼图网站希望避免混淆,因为必须一直指示轮到谁走,所以他们宁愿把所有的拼图都设置为白色下棋获胜或黑色下棋获胜。在我有一个 1000 分的数组或数据库的情况下,我可以通过一个函数或算法来运行它,该函数或算法将吐出除了要玩的白色之外完全相同的位置的分赢了?

我试过设置编辑棋盘,让所有黑色棋子变成白色棋子,白色棋子变成黑色棋子,但遇到了棋盘颠倒的问题,棋子只朝一个方向移动。

开始分让黑棋获胜。

7k/8/7K/8/ppp5/8/PPP5/8 b - - 0 1

我想从运行中到达:

function flipfen(fen) {
    return (fen*(algorithm)) 
};

˚console.log(flipfen(7k/8/7K/8/ppp5/8/PPP5/8 b - - 0 1))

和期望的结果:

8/5ppp/8/5PPP/8/k7/8/K7 w - - 0 1

也许我可以使用正则表达式?它看起来像第二分(在这种情况下,不确定它是否适用于所有情况,只是另一种倒过来稍作改动?)`

8/5ppp/8/5PPP/8/k7/8/K7 w - - 0 1

最佳答案

我试着想出所有可能的有效 FEN。

  • 反转字母大小写
  • 颠倒行序
  • 切换谁要移动
  • 交换王权
  • 镜像en passant square

function flipFEN(FEN) {
  const invertCase = (char) => {
    if (char == char.toLowerCase())
      return char.toUpperCase();
    return char.toLowerCase();
  }
  
  let position = FEN.split(" ")[0].split("/");
  position = position.map((row) => {
    return row.split("").map(invertCase).join("");
  });
  position = position.reverse().join("/");

  let turn = FEN.split(" ")[1];
  turn = turn == "w" ? "b" : "w";
  
  let castle = FEN.split(" ")[2];
  if (castle != "-") {
    castle = castle.split("").map(invertCase);
    castle.sort();
    castle = castle.join("");
  }
  
  let ep = FEN.split(" ")[3];
  if (ep != "-") {
    ep = ep.split("");
    ep[1] = ep[1] == "6" ? "3" : "6";
    ep = ep.join("");
  }
  
  const rest = FEN.split(" ").slice(4);
  
  return [position, turn, castle, ep, ...rest].join(" ");
}

console.log(flipFEN("r1bq1r2/pp2n3/4N2k/3pPppP/1b1n2Q1/2N5/PP3PP1/R1B1K2R w KQ g6 0 15"));

// > "r1b1k2r/pp3pp1/2n5/1B1N2q1/3PpPPp/4n2K/PP2N3/R1BQ1R2 b kq g3 0 15"

关于javascript - 是否有可能采用 FEN aka forsyth-edward 符号并将其从黑色翻转为 play and win to white,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57032270/

相关文章:

计算一定深度的 Minimax Tree 中的移动分数

python - 在 Django 中限制暴力登录攻击

c - 无法理解 Valgrind 的错误消息

javascript - 使用 css break word 或其他东西对带有 html 标签的文本进行子字符串化?

javascript - 如何修复类型错误: undefined is not an object (evaluating 'state.routes' )

python - 如何让 cmap 智能匹配列表以达到指标目的?

python - sqlalchemy,如果它不存在则创建一个 sqlite 数据库

python - OpenCV Pawn 棋子没有检测到?

javascript - 如何将 Firebase 存储镜像与 Google Cloud Vision API 一起使用?

javascript - 如何重新实现 'var that = this' 以使用 Object.prototype.bind() 保存范围引用?