【文字列3】p4!2@《新・Bランクup》

新・Bランクレベルアップメニュー【文字列 3】p4!2@

【文字列 3】p4!2@  コード 1/2

reader.on('close', () => {
   const S = lines[0];  // 入力受け取り
   let nothing = true;  // ′paiza′ も Leet も 含まれない場合 true
   for (let i = 5; i <= S.length; i++) {
      const s = S.substring(i - 5, i);  // S の部分文字列
      if (s === 'paiza') {  // 部分文字列'paiza'なら
         console.log('paiza');  // 'paiza'を出力
         nothing = false;  // nothingを false にして
         break;  // ループ終了
      } else if ((s[0] === 'p') &&
                 (s[1] === 'a' || s[1] === '4' || s[1] === '@') && 
                 (s[2] === 'i' || s[2] === '1' || s[2] === '!') && 
                 (s[3] === 'z' || s[3] === '2') && 
                 (s[4] === 'a' || s[4] === '4' || s[4] === '@')) {
  // 部分文字列を一文字ずつ調べて Leet表記された ′paiza′ に該当すれば
         console.log('leet');  // 'leet'を出力
         nothing = false;  // nothingを false にして
         break;  // ループ終了
      }
   }
   if (nothing) {  // nothing が true のままなら
      console.log('nothing');  // 'nothing' を出力
   }
});
hogeちゃんの画像

実装例 のコードとちょっと違っていたので 処理の流れを コメントしました。

【文字列 3】p4!2@  コード 2/2 (C++実装例参照)

reader.on('close', () => {
   const S = lines[0];
   let exist_leet = false;
   const ok_char = new Array(5).fill('');
   ok_char[0] += 'p';
   ok_char[1] += 'a4@';
   ok_char[2] += 'i1!';
   ok_char[3] += 'z2';
   ok_char[4] += 'a4@';
   for (let i = 0; i < S.length - 4; i++) {
      let is_leet = true;
      if (S.substr(i, 5) === 'paiza') {
         console.log('paiza');
         break;
      }
      for (let j = 0; j < 5; j++) {
         let char_leet_ok = false;
         for (let k = 0; k < ok_char[j].length; k++) {
            if (S[i + j] === ok_char[j][k]) {
               char_leet_ok = true;
            }
         }
         if (!char_leet_ok) {
            is_leet = false;
            break;
         }
      }
      if (is_leet) {
         exist_leet = true;
      }
   }
   if (exist_leet) {
      console.log('leet');
   } else {
      console.log('nothing');
   }
});
hogeちゃんの画像

実装例 C++の場合を参照。

コメント