マップの判定・縦横斜め《新・Bランクup》

新・Bランクレベルアップ【マップの扱い3】マップの判定・縦横斜め

【マップの判定・縦横斜め】コード 1/2

reader.on('close', () => {
   const change = (y, x) => {
      S[y][x] === '.' ? S[y][x] = '#' : S[y][x] = '.';
   };
   const [H, W] = lines[0].split(' ').map(Number);  // 行数 H , 列数 W の盤面
   const S = [];
   const [y, x] = lines[H + 1].split(' ').map(Number);
   for (let i = 1; i <= H; i++) {
      S.push(lines[i].split(''));
   }
   change(y, x);  // 中心
   for (let z = 1; z < Math.max(H, W); z++) {
      if (y - z >= 0) {
         change(y - z, x);  // 上
      }
      if (y + z < H) {
         change(y + z, x);  // 下
      }
      if (x + z < W) {
         change(y, x + z);  // 右
      }
      if (x - z >= 0) {
         change(y, x - z);  // 左
      }
      if (y + z < H && x + z < W) {
         change(y + z, x + z);  // 右下
      }
      if (y - z >= 0 && x - z >= 0) {
         change(y - z, x - z);  // 左上
      }
      if (y + z < H && x - z >= 0) {
         change(y + z, x - z);  // 左下
      }
      if (y - z >= 0 && x + z < W) {
         change(y - z, x + z);  // 右上
      }
   }
   for (let i = 0; i < H; i++) {
      console.log(S[i].join(''));
   }
});
hogeちゃんの画像

とりあえずup。

【マップの判定・縦横斜め】コード 2/2  (C++実装例参照)

reader.on('close', () => {
   const change = (h, w) => {
      S[h][w] === '.' ? S[h][w] = '#' : S[h][w] = '.';
   };
   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(''));
   }
   for (let i = 0; i < H; i++) {
      change(i, x);
   }
   for (let i = 0; i < W; i++) {
      change(y, i);
   }
   for (let i = 1; i < Math.min(H, W); i++) {
      if (y + i < H) {
         if (x + i < W) {
            change(y + i, x + i);
         }
         if (0 <= x - i) {
            change(y + i, x - i);
         }
      }
      if (0 <= y - i) {
         if (x + i < W) {
            change(y - i, x + i);
         }
         if (0 <= x - i) {
            change([y - i], [x - i]);
         }
      }
   }
   change(y, x);
   for (const s of S) {
      console.log(s.join(''));
   }
});
hogeちゃんの画像

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

コメント