【条件判定 3】過剰コンプライアンス (paizaランク B 相当)
解答例
文字列を配列に変換はsplit。
前半分、後半分は、sliceを使って作った。文字列の前半と後半に中央の文字が含まれることに注意した。
完全一致や部分一致はeveryを使った。
文字の置き換えはmapを使った。
配列を文字列に変換はjoin。
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
const [N] = lines[0].split(" ").map(Number);
const S = lines[1].split("");
const S_front = S.slice(0, Math.ceil(N / 2));//S前半分
const S_back = S.slice(Math.floor(N / 2));//S後半分
for (let i = 1; i <= N; i++) {
const V = lines[i + 1].split("");
const V_front = V.slice(0, Math.ceil(N / 2));//V前半分
const V_back = V.slice(Math.floor(N / 2));//V後半分
if (V.every((v, i) => v === S[i])) { //完全に一致
console.log("banned");
//文字数が同じで、前半分または後ろ半分が同じ
} else if (V.length === S.length && V_front.every((v, i) => v === S_front[i])) {
console.log(V.map((v, i) => i < Math.ceil(N / 2) ? v = "x" : v).join(""));
} else if (V.length === S.length && V_back.every((v, i) => v === S_back[i])) {
console.log(V.map((v, i) => i >= Math.floor(N / 2) ? v = "x" : v).join(""));
//その他
} else {
console.log(V.join(""));
}
}