新・Bランクレベルアップ【マップの扱い2】マップの書き換え・縦横
【マップの書き換え・縦横】コード 1/2
reader.on('close', () => {
const [H, W] = lines[0].split(' ').map(Number);
const S = [];
const [y, x] = lines[H + 1].split(' ').map(Number);
for (let i = 1; i <= H; i++) {
S.push(lines[i].split(''));
}
S[y][x] === '.' ? S[y][x] = '#' : S[y][x] = '.';
const z = 1;
if (y - z >= 0) {
S[y - z][x] === '.' ? S[y - z][x] = '#' : S[y - z][x] = '.';
}
if (y + z < H) {
S[y + z][x] === '.' ? S[y + z][x] = '#' : S[y + z][x] = '.';
}
if (x + z < W) {
S[y][x + z] === '.' ? S[y][x + z] = '#' : S[y][x + z] = '.';
}
if (x - z >= 0) {
S[y][x - z] === '.' ? S[y][x - z] = '#' : S[y][x - z] = '.';
}
for (let i = 0; i < H; i++) {
console.log(S[i].join(''));
}
});
とりあえずup。
【マップの書き換え・縦横】コード 2/2 (C++実装例参照)
reader.on('close', () => {
const [H, W] = lines[0].split(' ').map(Number);
let [y, x] = lines[H + 1].split(' ').map(Number);
const move = [-1, 1];
const S = [];
for (let i = 1; i <= H; i++) {
S.push(lines[i].split(''));
}
S[y][x] === '.' ? S[y][x] = '#' : S[y][x] = '.';
for (let i = 0; i < 2; i++) {
if (0 <= y + move[i] && y + move[i] < H) {
if (S[y + move[i]][x] == '.') {
S[y + move[i]][x] = '#';
} else {
S[y + move[i]][x] = '.';
}
}
if (0 <= x + move[i] && x + move[i] < W) {
if (S[y][x + move[i]] == '.') {
S[y][x + move[i]] = '#';
} else {
S[y][x + move[i]] = '.';
}
}
}
for (const s of S) {
console.log(s.join(''));
}
});
C++の実装例を参照しました。
コメント