新・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' を出力
}
});
実装例 のコードとちょっと違っていたので 処理の流れを コメントしました。
【文字列 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');
}
});
実装例 C++の場合を参照。
コメント