LoginSignup
0
0

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 新・Bランクレベルアップメニュー JavaScript 【条件判定 3】過剰コンプライアンス

Posted at

【条件判定 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(""));
  }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0