LoginSignup
1
0

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 Aランクレベルアップメニュー JavaScript リバーシの操作(縦横)

Last updated at Posted at 2022-09-09

リバーシの操作(縦横)

を解いてみました。

javascript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//出力する盤面の行数 H , 列数 W と石を置くマスの y , x 座標である Y , X
const [H, W, Y, X] = lines[0].split(" ").map(Number);
//盤面を作る
let board = lines.slice(1,H + 1).map(line => line.split(""));
//盤面の ( Y , X ) に石を置き
board[Y][X] = '*';

//石を置いたY行目について、Y固定
//石を置いた左側、盤面の中を調べる
for (let i = X - 2; i >= 0; i--) {
    //調べる場所が、かつ自分の石があるかつ1つ右に何もない
    if (board[Y][i] === '*' && board[Y][i + 1] === '.') {
        //中に石を置く。1つ右から石を置いた手前まで
        for (let j = i + 1; j < X; j++) {
            board[Y][j] = '*';
        }
        // 新たに置いた石によってさらに石が置けるようになった場合でも
        // その時点で操作を終える。
        break;
    }
}

//同様に石を置いた右側を調べる
for (let i = X + 2; i < W; i++) {
    //調べる場所が、盤面の中かつ自分の石があるかつ1つ左に何もない
    if (board[Y][i] === '*' && board[Y][i - 1] === '.') {
        //中に石を置く
        for (let j = i - 1; j > X; j--) {
            board[Y][j] = '*';
        }
        // 新たに置いた石によってさらに石が置けるようになった場合でも
        // その時点で操作を終える。
        break;
    }
}

//石を置いたX列目について
//同様に石を置いた上側へ
for (let i = Y - 2; i >= 0; i--) {
    //盤面の中かつ自分の石があるかつ間に何もない
    if (board[i][X] === '*' && board[i + 1][X] === '.') {
        //中に石を置く
        for (let j = i + 1; j < Y; j++) {
            board[j][X] = '*';
        }
        // 新たに置いた石によってさらに石が置けるようになった場合でも
        // その時点で操作を終える。
        break;
    }
}

//同様に石を置いた下側へ
for (let i = Y + 2; i < H; i++) {
    //盤面の中かつ自分の石があるかつ間に何もない
    if (board[i][X] === '*' && board[i - 1][X] === '.') {
        //中に石を置く
        for (let j = i - 1; j > Y; j--) {
            board[j][X] = '*';
        }
        // 新たに置いた石によってさらに石が置けるようになった場合でも
        // その時点で操作を終える。
        break;
    }
}

//操作を終えた後の盤面を出力
console.log(board.map(row => row.join("")).join("\n"));
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0