pastebin

Paste Search Dynamic
Recent pastes
Node.js
  1. process.stdin.resume();
  2. process.stdin.setEncoding('utf8');
  3.  
  4. var a = "";
  5. var reader = require('readline').createInterface({
  6.     input: process.stdin,
  7.     output: process.stdout
  8. });
  9. reader.on('line', (line) => {
  10.     a = line;
  11. });
  12. reader.on('close', () => {
  13.   reversi(a);
  14. });
  15.  
  16.  
  17.  
  18. //リバーシ盤の二次元配列0は空いている場所、1は黒、2は枠、3は白
  19. var ban = [
  20.   [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
  21.   [2, 0, 0, 0, 0, 0, 0, 0, 0, 2],
  22.   [2, 0, 0, 0, 0, 0, 0, 0, 0, 2],
  23.   [2, 0, 0, 0, 0, 0, 0, 0, 0, 2],
  24.   [2, 0, 0, 0, 3, 1, 0, 0, 0, 2],
  25.   [2, 0, 0, 0, 1, 3, 0, 0, 0, 2],
  26.   [2, 0, 0, 0, 0, 0, 0, 0, 0, 2],
  27.   [2, 0, 0, 0, 0, 0, 0, 0, 0, 2],
  28.   [2, 0, 0, 0, 0, 0, 0, 0, 0, 2],
  29.   [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
  30.   ];
  31.  
  32.  //メインプログラム
  33. function reversi(a) {
  34.  
  35.   //標準入力結果を全て数字に変換
  36.  var te1 = a.replace(/a/g, 1).replace(/b/g, 2).replace(/c/g, 3).replace(/d/g, 4).replace(/e/g, 5).replace(/f/g, 6).replace(/g/g, 7).replace(/h/g, 8);
  37.   //二桁ずつに区切る
  38.   var te2 = te1.match(/.{2}/g);
  39.  //数値型になおす
  40.   var te = te2.map(Number);
  41.  
  42.   //ターン数
  43.   teSu = te.length;
  44.   //0は黒のターン1は白のターン
  45.   var turn = 0;
  46.  
  47.  
  48.  
  49.  
  50.  
  51.    //石が置けるかチェックし、おけたらひっくり返し、ループする
  52.     for (let t = 0; t <= teSu; t++) {
  53.       //十の位をx一の位をyに代入
  54.       var x = Math.floor(te[t]/10)%10;
  55.       var y = Math.floor(te[t]/1)%10;
  56.  
  57.       if (turn == 0) {
  58.         console.log("error0");
  59.         if (check(y, x, -1, 0, 1, 3) == 500 || check(y, x, -1, 1, 1, 3) == 500 || check(y, x, 0, 1, 1, 3) == 500 || check(y, x, 1, 1, 1, 3) == 500 || check(y, x, 1, 0, 1, 3) == 500 || check(y, x, 1, -1, 1, 3) == 500 || check(y, x, 0, -1, 1, 3) == 500 || check(y, x, -1, -1, 1, 3) == 500) {
  60.           console.log("error1");
  61.           action(y, x, 1, 3);
  62.           console.log("error2");
  63.           turn = 1;
  64.           console.log("error3");
  65.         } else {
  66.           console.log("error4");
  67.           action(y, x, 3, 1);
  68.           console.log("error5");
  69.           turn = 0;
  70.           console.log("error6");
  71.         }
  72.       } else if (turn == 1) {
  73.         console.log("error7");
  74.         if (check(y, x, -1, 0, 3, 1) == 500 || check(y, x, -1, 1, 3, 1) == 500 || check(y, x, 0, 1, 3, 1) == 500 || check(y, x, 1, 1, 3, 1) == 500 || check(y, x, 1, 0, 3, 1) == 500 || check(y, x, 1, -1, 3, 1) == 500 || check(y, x, 0, -1, 3, 1) == 500 || check(y, x, -1, -1, 3, 1) == 500) {
  75.           console.log("error8");
  76.           action(y, x, 3, 1);
  77.           console.log("error9");
  78.           turn = 0;
  79.           console.log("error10");
  80.         } else {
  81.           console.log("error11");
  82.           action(y, x, 1, 3);
  83.           console.log("error12");
  84.           turn = 1;
  85.           console.log("error13");
  86.         }
  87.       }
  88.       return ban;
  89.     }
  90.    console.log(ban);
  91.  
  92.  
  93.   //石が置けるかチェックする関数、100は置けない500は置ける
  94.   function check(y, x, i, p, n, m) {
  95.     if (ban[y + i][x + p] == 2) {
  96.       return 100;
  97.     } else if (ban[y + i][x + p] == n) {
  98.       return 100;
  99.     } else if (ban[y + i][x + p] == 0) {
  100.       return 100;
  101.     } else if (ban[y + i][x + p] == m) {
  102.       while (ban[y + i][x + p] == m) {
  103.         if (i > 0) {
  104.           i++;
  105.         }
  106.         if (i < 0) {
  107.           i--;
  108.         }
  109.         if (p > 0) {
  110.           p++;
  111.         }
  112.         if (p < 0) {
  113.           p--;
  114.         }
  115.         if (ban[y + i][x + p] == m) {
  116.           continue;
  117.         } else if (ban[y + i][x + p] == 0) {
  118.           return 100;
  119.         } else if (ban[y + i][x + p] == 2) {
  120.           return 100;
  121.         } else if (ban[y + i][x + p] == n) {
  122.           return 500;
  123.         }
  124.       }
  125.     }
  126.   }
  127.  
  128.  //石をひっくり返す関数
  129.   function action(y, x, n, m) {
  130.     ban[y][x] = n;
  131.     var r = 1;
  132.     while (ban[y - r][x] == m) {
  133.       if (check(y, x, -1, 0, n, m) == 500 && ban[y - r][x] == m) {
  134.         ban[y - r][x] = n;
  135.         r++;
  136.       }
  137.     }
  138.     r = 1;
  139.     while (ban[y - r][x + r] == m) {
  140.       if (check(y, x, -1, 1, n, m) == 500 && ban[y - r][x + r] == m) {
  141.         ban[y - r][x + r] = n;
  142.         r++;
  143.       }
  144.     }
  145.     r = 1;
  146.     while (ban[y][x + r] == m) {
  147.       if (check(y, x, 0, 1, n, m) == 500 && ban[y][x + r] == m) {
  148.         ban[y][x + r] = n;
  149.         r++;
  150.       }
  151.     }
  152.     r = 1;
  153.     while (ban[y + r][x + r] == m) {
  154.       if (check(y, x, 1, 1, n, m) == 500 && ban[y + r][x + r] == m) {
  155.         ban[y + r][x + r] = n;
  156.         r++;
  157.       }
  158.     }
  159.     r = 1;
  160.     while (ban[y + r][x] == m) {
  161.       if (check(y, x, 1, 0, n, m) == 500 && ban[y + r][x] == m) {
  162.         ban[y + r][x] = n;
  163.         r++;
  164.       }
  165.     }
  166.     r = 1;
  167.     while (ban[y + r][x - r] == m) {
  168.       if (check(y, x, 1, -1, n, m) == 500 && ban[y + r][x - r] == m) {
  169.         ban[y + r][x - r] = n;
  170.         r++;
  171.       }
  172.     }
  173.     r = 1;
  174.     while (ban[y][x - r] == m) {
  175.       if (check(y, x, 0, -1, n, m) == 500 && ban[y][x - r] == m) {
  176.         ban[y][x - r] = n;
  177.         r++;
  178.       }
  179.     }
  180.     r = 1;
  181.     while (ban[y - r][x - r] == m) {
  182.       if (check(y, x, -1, -1, n, m) == 500 && ban[y - r][x - r] == m) {
  183.         ban[y - r][x - r] = n;
  184.         r++;
  185.       }
  186.     }
  187.     return ban;
  188.   }
  189. }
  190.  
Parsed in 0.032 seconds