マップの書き換え・縦横《新・Bランクup》

新・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(''));
   }
});
hogeちゃんの画像

とりあえず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(''));
   }
});
hogeちゃんの画像

C++の実装例を参照しました。

コメント