编辑代码

// 设置标准输入接口
const rl = require("readline").createInterface({ input: process.stdin });
// 创建异步迭代器
var iter = rl[Symbol.asyncIterator]();
// 定义异步读取一行输入的函数
const readline = async () => (await iter.next()).value;

// 主异步函数
void (async function () {
  // 读取输入的 n 和 k
  const n = Number(await readline()); // n 表示每组输出的元素数量
  const k = Number(await readline()); // k 表示需要输出的组数
  const lists = []; // 存储输入的所有列表

  // 读取输入的每一行并将其转换为数字数组
  while ((line = await readline())) {
    lists.push(line.split(" ").map(Number));
  }

  // 创建一个二维数组来存储结果
  const windows = [];
  for (let i = 0; i < n; i++) {
    windows.push([]);
  }
  let idx = 0;
  while (true) {
    for (let i = 0; i < lists.length; i++) {
      let list = lists[i];
      if (list.length >= n) {
        const spliceList = list.splice(0, n);
        for (let j = 0; j < n; j++) {
          windows[j].push(spliceList[j]);
          idx++;
          if (idx == n * k) break;
        }
        if (idx == n * k) break;
      } else {
        let length = list.length;
        let spliceList = list.splice(0, list.length);
        let j = i + 1;
        while (
          length < n &&
          lists.filter((list) => list.length > 0).length > 0
        ) {
          const nextList = lists[j];
          if (nextList.length >= n - length) {
            spliceList = spliceList.concat(nextList.splice(0, n - length));
            break;
          } else {
            spliceList = spliceList.concat(nextList);
            length += nextList.length;
            nextList.length = 0;
            if (j == lists.length - 1) j = 0;
            else j++;
          }
        }
        for (let j = 0; j < n; j++) {
          windows[j].push(spliceList[j]);
          idx++;
          if (idx == n * k) break;
        }
        if (idx == n * k) break;
      }
    }
    if (idx == n * k) break;
  }
  console.log(windows.map((window) => window.join(" ")).join(" "));
})();