CSV ファイル《線形探索》

線形探索メニュー【文字の探索・文字のカウント・部分文字列・分割・CSV ファイル 1 〜 2】

【文字の探索】コード

reader.on('close', () => {
   const s = lines[0];  // 文字列
   const c = lines[1];  // 文字
   console.log(s.indexOf(c) + 1);  // s に含まれる c の位置を出力
});
hogeちゃんの画像

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();  // si 文字目の文字コード番号(97 〜 122)
      A[Point - a_Point]++;  // 例えば'z'の場合 [122 - 97] なので A[25]の値に 1加算
   }
   A.forEach(a => {
      console.log(a);  // A の各要素('a'〜'z'の各個数)を出力
   });
});
hogeちゃんの画像

配列 A のindex は0〜25 で″a″〜″z″の文字コードナンバーは97〜122なので A[si文字目の文字コードナンバー - 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_subt が含まれていれば
         const n = s.search(t);  // s_sub に含まれている 最初の t の位置を取得
         s_sub = s_sub.substr(n + 1);  // s_subs_subn + 1文字目 〜 最後までの文字列で上書き
         ans++;
      } else {
         s_sub = '';  // 含まれていなければ空文字で上書き(ループ終了)
      }
   }
   console.log(ans);
});
hogeちゃんの画像

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(' '));  //  を(' ') で連結して出力
});
hogeちゃんの画像
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(','));  // ',' で連結して出力
      }
   }
});
hogeちゃんの画像

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(','));  // ',' で連結して出力
      }
   }
});
hogeちゃんの画像

split(',').map(Number) で 入力を分割して数値化。k 列目が x 以上 ならjoin(',') で連結して出力。

コメント