编辑代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  // 读取输入参数:
  // m: 每个标签的长度
  // n: 标签的数量
  // seq: 操作序列字符串
  const m = Number(await readline());
  const n = Number(await readline());
  const seq = await readline();

  // 创建n个长度为m的标签数组,初始值都为0
  const tags = [];
  for (let i = 0; i < n; i++) {
    const tag = new Array(m).fill(0);
    tags.push(tag);
  }

  // 遍历操作序列中的每个字符
  for (let i = 0; i < seq.length; i++) {
    const c = seq[i];
    switch (c) {
      case "A": {
        // 操作A:在第一个标签中找到第一个0,将其改为1
        for (const tag of tags) {
          if (tag.indexOf(0) !== -1) {
            tag[tag.indexOf(0)] = 1;
            break;
          }
        }
        break;
      }
      case "B": {
        // 操作B:在第一个标签中找到连续两个0的位置,将它们都改为1
        for (const tag of tags) {
          const idx = tag.indexOf(0);
          if (idx <= tag.length - 2) {
            // 确保有足够的空间放置两个1
            tag[idx] = 1;
            tag[idx + 1] = 1;
            break;
          }
        }
        break;
      }
      case "C": {
        // 操作C:在第一个标签中找到连续八个0的位置,将它们都改为1
        for (const tag of tags) {
          const idx = tag.indexOf(0);
          if (idx <= tag.length - 8) {
            // 确保有足够的空间放置八个1
            // 将连续八个位置都改为1
            tag[idx] = 1;
            tag[idx + 1] = 1;
            tag[idx + 2] = 1;
            tag[idx + 3] = 1;
            tag[idx + 4] = 1;
            tag[idx + 5] = 1;
            tag[idx + 6] = 1;
            tag[idx + 7] = 1;
            break;
          }
        }
        break;
      }
    }
  }

  // 输出所有标签的内容
  for (const tag of tags) {
    console.log(tag.join("")); // 将数组转换为字符串输出
  }
})();