いろいろなプログラム

1

module.exports = {
  and(a, b) {
    return a && b;
  },
  or(a, b) {
    return a || b;
  },
  xor(a, b) {
    return a !== b;
  },
  not(a) {
    return !a;
  },
  is(a, b) {
    return !a || b;
  },
  same(a, b) {
    return a === b;
  },
  check(fn, length) {
    const result = [];
    for (let i = 0; i < 2 ** length; i++) {
      const inputs = Array(length).fill(0);
      for (let j = 0, k = i; j < length; j++) {
        const a = Math.floor(k / 2);
        const b = k - a * 2;
        inputs[j] = b;
        k = a;
      }
      const j = inputs.map((d) => Boolean(d));
      const r = fn(...j);
      result.push(j, r);
    }
    return result;
  },
  t: true,
  f: false,
};

example

and(t, t); // true
or(t, f); // true
xor(t, t); // false
not(t); // false
is(t, f); // false
same(t, t); // true
check(function (a, b, c) {
  return same(is(xor(a, b), or(a, b)), and(a, is(c, a)));
}, 3);
/*
[
  [ false, false, false ],
  false,
  [ true, false, false ],
  true,
  [ false, true, false ],
  false,
  [ true, true, false ],
  true,
  [ false, false, true ],
  false,
  [ true, false, true ],
  true,
  [ false, true, true ],
  false,
  [ true, true, true ],
  true
]
 */

2

数字を整理する

javascript

const cleanNumber = (number, length, radix = 10, use = false) => {
  if (typeof number !== "number") throw new TypeError(`number is not number`);
  if (number < 0 || number - Math.floor(number) > 0) throw new RangeError(`number must be natural number or 0`);
  if (typeof length !== "number") throw new TypeError(`length is not number`);
  if (length <= 0 || length - Math.floor(length) > 0) throw new RangeError(`length must be natural number`);
  if (radix !== 2 && radix !== 8 && radix !== 10 && radix !== 16) throw new RangeError(`radix must be 2, 8, 10 or 16`);
  if (typeof use !== "boolean") throw new TypeError(`use is not boolean`);

  const fixNumber = number.toString(radix);
  if (fixNumber.length > length) throw new RangeError(`length must be larger than fixed number's length`);
  const fixNumber2 = (Array(length).join(0) + fixNumber).slice(-length);
  if (!use || fixNumber === 10) return fixNumber2;
  switch (radix) {
    case 2:
      return "0b" + fixNumber2;
    case 8:
      return "0o" + fixNumber2;
    case 16:
      return "0x" + fixNumber2;
  }
};

typescript

const cleanNumber = (number: number, length: number, radix: 2 | 8 | 10 | 16 = 10, use: boolean = false): string => {
  if (number < 0 || number - Math.floor(number) > 0) throw new RangeError(`number must be natural number or 0`);
  if (length <= 0 || length - Math.floor(length) > 0) throw new RangeError(`length must be natural number`);
  if (radix !== 2 && radix !== 8 && radix !== 10 && radix !== 16) throw new RangeError(`radix must be 2, 8, 10 or 16`);

  const fixNumber = number.toString(radix);
  if (fixNumber.length > length) throw new RangeError(`length must be larger than fixed number's length`);
  const fixNumber2 = (Array(length).join(0) + fixNumber).slice(-length);
  if (!use || fixNumber === 10) return fixNumber2;
  switch (radix) {
    case 2:
      return "0b" + fixNumber2;
    case 8:
      return "0o" + fixNumber2;
    case 16:
      return "0x" + fixNumber2;
  }
};

example

cleanNumber(255, 4, 16, true); // 0x00ff
cleanNumber(123, 8, 2); // 01111011

3

const createBuffer = (data: WithImplicitCoercion<ArrayBuffer | SharedArrayBuffer>): Buffer => {
  const bufferTemp = Buffer.from(data);
  const returnBuffer = Buffer.alloc(bufferTemp.byteLength);
  for (let index = 0; index < bufferTemp.byteLength; index++) {
    returnBuffer[index] = bufferTemp[index];
  }
  return returnBuffer;
};

example

const buf1 = Buffer.from("abcde");
const buf2 = createBuffer(Buffer.from("abcde"));
console.log(buf1.buffer);
/*
ArrayBuffer {
  [Uint8Contents]: <... 61 62 63 64 65 ...>,
  byteLength: 8192
}
*/
console.log(buf2.buffer);
/*
ArrayBuffer {
  [Uint8Contents]: <61 62 63 64 65>,
  byteLength: 5
}
*/

4

16進法の数をログ(eebug, info, log, warn, errorのみ)

(() => {
  let c = console,
    z = (t) => t.toString(16),
    e = (d = 0, g = 99) => {
      if (typeof d != "number" || typeof g != "number" || z(d).length > g) return NaN;
      if (g == 99) g = z(d).length;
      return "0x" + (Array(g).join(0) + z(d)).slice(-g);
    };
  c.log16 = (d, g) => c.log(e(d, g));
  c.warn16 = (d, g) => c.warn(e(d, g));
  c.error16 = (d, g) => c.error(e(d, g));
  c.info16 = (d, g) => c.info(e(d, g));
  c.debug16 = (d, g) => c.debug(e(d, g));
})();

(() => {
  const getHex = (number = 0, length = Infinity) => {
    if (typeof number !== "number" || typeof length !== "number" || number.toString(16).length > length) return "NaN";
    if (length === Infinity) length = number.toString(16).length;
    return "0x" + (Array(length).join(0) + number.toString(16)).slice(-length);
  };
  console.log16 = (number, length) => console.log(getHex(number, length));
  console.warn16 = (number, length) => console.warn(getHex(number, length));
  console.error16 = (number, length) => console.error(getHex(number, length));
  console.info16 = (number, length) => console.info(getHex(number, length));
  console.debug16 = (number, length) => console.debug(getHex(number, length));
})();
(() => {
  const getHex = (number: number = 0, length: string = Infinity): string => {
    if (number.toString(16).length > length) return "NaN";
    if (length === Infinity) length = number.toString(16).length;
    return "0x" + (Array(length).join(0) + number.toString(16)).slice(-length);
  };
  console.log16 = (number: number, length: number) => console.log(getHex(number, length));
  console.warn16 = (number: number, length: number) => console.warn(getHex(number, length));
  console.error16 = (number: number, length: number) => console.error(getHex(number, length));
  console.info16 = (number: number, length: number) => console.info(getHex(number, length));
  console.debug16 = (number: number, length: number) => console.debug(getHex(number, length));
})();

example

console.log(0xff); // 255
console.log16(0xff); // 0xff
console.log16(0xff, 4); // 0x00ff

5

/** @type {Array<string>} */
let input = require("fs")
    .readFileSync("/dev/stdin", "utf8")
    .split("\n")
    .map((str) => str.split(" "))
    .flat(),
  i = 0n;

const { readNumber, readBigInt, readString, log } = {
  readNumber() {
    const t = input[i];
    i++;
    if (t === "") return readNumber();
    return Number(t);
  },
  readBigInt() {
    const t = input[i];
    i++;
    if (t === "") return readBigInt();
    return BigInt(t);
  },
  readString() {
    const t = input[i];
    i++;
    if (t === "") return readString();
    return String(t);
  },
  log(input) {
    console.log(String(input));
  },
};

function main() {
  // code here
  process.exit();
}

main();

example

// code
const [a, b, c] = [readNumber(), readBigInt(), readString()];
log(typeof a, a);
log(typeof b, b);
log(typeof c, c);
/* input
1 2

3

*/
/* output
number 1
bigint 2
string 3
*/