線形探索メニュー【文字の探索・文字のカウント・部分文字列・分割・CSV ファイル 1 〜 2】
【文字の探索】コード
reader.on('close', () => {
const s = lines[0]; // 文字列
const c = lines[1]; // 文字
console.log(s.indexOf(c) + 1); // s に含まれる c の位置を出力
});
s.indexOf(c)
で s に含まれる最初の c の位置が取得できました。index は 0 から始まるので出力時に +1 しています。
【文字のカウント】コード
reader.on('close', () => {
const s = lines[0];
const A = new Array(26).fill(0); // 'a'〜'z'の各個数を保存する配列(0で初期化)
const a_Point = 'a'.codePointAt(); // 'a'の文字コードナンバー(97)
for (let i = 0; i < s.length; i++) {
const Point = s[i].codePointAt(); // s の i 文字目の文字コード番号(97 〜 122)
A[Point - a_Point]++; // 例えば'z'の場合 [122 - 97] なので A[25]の値に 1加算
}
A.forEach(a => {
console.log(a); // A の各要素('a'〜'z'の各個数)を出力
});
});
配列 A のindex は0〜25 で″a″〜″z″の文字コードナンバーは97〜122なので A[sのi文字目の文字コードナンバー - 97]
を 加算 することで アルファベット順に各文字の個数が得られました。
【部分文字列】コード
reader.on('close', () => {
const s = lines[0];
const t = lines[1];
let s_sub = s; // s の部分文字列 を s で初期化
let ans = 0; // ans を 0 で初期化
while (s_sub.length >= t.length) { // s_sub の文字数が t の文字数以上の間
if (s_sub.includes(t)) { // s_sub に t が含まれていれば
const n = s.search(t); // s_sub に含まれている 最初の t の位置を取得
s_sub = s_sub.substr(n + 1); // s_sub を s_sub の n + 1文字目 〜 最後までの文字列で上書き
ans++;
} else {
s_sub = ''; // 含まれていなければ空文字で上書き(ループ終了)
}
}
console.log(ans);
});
s.search(t)
で 取得できるのは 最初の t の位置のみなので s_sub から最初の t の位置の一文字目までを削除した値を取り出し s_sub の文字数が t の文字数未満になるまで t が含まれているかどうか調べて 含まれていれば ans を加算しています。
【分割】コード
reader.on('close', () => {
const s = lines[0];
const t = s.split(','); // s を(',')で分割した配列
console.log(t.join(' ')); // t を(' ') で連結して出力
});
split(',')
で分割。join(' ')
で連結 。【CSV ファイル 1】コード
reader.on('close', () => {
const [n, x] = lines[0].split(' ').map(Number);
for (let i = 1; i <= n; i++) {
const csv = lines[i].split(',').map(Number); // 各行の入力を分割して 数値化
if (csv[1] >= x) { // 2列目が x 以上 なら
console.log(csv.join(',')); // ',' で連結して出力
}
}
});
split(',').map(Number)
で 入力を分割して数値化。 k 列目が x 以上 ならjoin(',')
で連結して出力。
【CSV ファイル 2】コード
reader.on('close', () => {
const [n, m, k, x] = lines[0].split(' ').map(Number);
for (let i = 1; i <= n; i++) {
const csv = lines[i].split(',').map(Number);
if (csv[k - 1] >= x) { // k 列目が x 以上 なら
console.log(csv.join(',')); // ',' で連結して出力
}
}
});
split(',').map(Number)
で 入力を分割して数値化。k 列目が x 以上 ならjoin(',')
で連結して出力。
コメント