裏返せる可能性(縦横) (paizaランク C 相当)
を解いてみました。
解答例1
盤面を作りながら!
,*
,.
を置いていく。
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 = [];
//行について
for (let i = 0; i < H; i++) {
//列について
let board_j = [];
for (let j = 0; j < W; j++) {
//石を置いたマス
if (i === Y && j === X) {
board_j.push('!');
//石を置いたマスと行または列が同じマスを '*'
} else if (i === Y || j === X) {
board_j.push('*');
//それ以外のマスを '.'
} else {
board_j.push('.');
}
}
//完成した列を行列二次元配列へ
board.push(board_j);
}
//盤面を出力
console.log(board.map(row=> row.join("")).join("\n"));
解答例2
盤面を作ってから、そこに*
や!
を置いていく。
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);
//盤面
//それ以外のマスを '.' にする
const board = Array(H).fill(0).map(row => row = Array(W).fill("."));
//石を置いたマスと行または列が同じマスを '*' に
//Xを固定して、行iについて
for (let i = 0; i < H; i++) {
board[i][X] = "*";
}
//Yを固定して,列jについて
for (let j = 0; j < W; j++) {
board[Y][j] = "*";
}
//石を置いたマスを '!' に
board[Y][X] = "!";
//盤面を出力
console.log(board.map(row => row.join("")).join("\n"));