文字列の配列

 配列メニュー【配列の書き換え・要素の入れ替え・連結・ソート・反転・要素のカウント・追加・削除・挿入・出力・ ほか】

【STEP: 1】コード

reader.on('close', () => {
   const [A, B, N] = lines[0].split(' ').map(Number);
   const a = lines[1].split(' ').map(Number);
   for (let i = 0; i < N; i++) {
      switch (a[i]) {  // a[i]が…
         case A:  // A だったら…
         a[i] = B;  // a[i]を B で上書きしてね
         break;
      }      
      console.log(a[i]);
   }
});
hogeちゃんの画像

for文で ループしながら a[i] を出力していますが 出力する前に switch文 で a[i] が A だった場合は B で上書きする処理を行っています。

【STEP: 2】コード

reader.on('close', () => {
   let [A, B] = lines[0].split(' ').map(Number);
   [A, B] = [B, A];  // 値の交換
   console.log(A, B);
});
hogeちゃんの画像

変数を配列に格納すれば 順序を入れ替えるだけで値の入れ替えができました。

【STEP: 3】コード

reader.on('close', () => {
   const [A, B, N] = lines[0].split(' ').map(Number);
   const a = lines[1].split(' ').map(Number);
   [a[A - 1], a[B - 1]] = [a[B - 1], a[A - 1]];  // 配列の値の交換
   a.forEach(value => {
      console.log(value);
   });
});
hogeちゃんの画像

【STEP: 2】の応用ですね。A 番目と B 番目の入れ替えも index を入れ替えれば OKでした。

【STEP: 4】コード

reader.on('close', () => {
  const [A, B, N] = lines[0].split(' ').map(Number);
  const a = lines[1].split(' ').map(Number);
  const b = a.slice(A - 1, B);  // slice(開始位置,終了位置+1)
  b.forEach(value => {
    console.log(value);
  });
});
hogeちゃんの画像
a.slice(A - 1, B)aA 番目〜B 番目の 新配列 が生成されました。

【STEP: 5】コード

reader.on('close', () => {
   const [N, M] = lines[0].split(' ').map(Number);
   const a = lines[1].split(' ').map(Number);
   const b = lines[2].split(' ').map(Number);
   const c = [a, b].flat();  // 2次元配列をフラット化
  // const c = [...a, ...b];  // スプレット構文で展開してから連結
   c.forEach(value => {
      console.log(value);
   });
});
hogeちゃんの画像

[a, b].flat()[...a, ...b]に変えても 実行結果は同じでした。

【STEP: 6】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   const a = lines[1].split(' ').map(Number);
   a.sort((s, b) => s - b);  // 配列を数値の小さい順にソート
   a.forEach(value => {
      console.log(value);
   });
});
hogeちゃんの画像

sort((s, b) => s - b)で 数値の小さい順に並び替わりました。

【STEP: 7】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   const a = lines[1].split(' ').map(Number);
   a.reverse();  // 逆順ソート
   a.forEach(value => {
      console.log(value);
   });
});
hogeちゃんの画像

逆順への並べ替えは reverse() を実行すれば OK でした。

【STEP: 8】コード

reader.on('close', () => {
   const [N, M] = lines[0].split(' ').map(Number);
   const a = lines[1].split(' ').map(Number);
   let ans = 0;  // 出力値を 0 で初期化
   for (let i = 0; i < N; i++) {
      if (a[i] === M) {  // a[i] が M と同じなら
         ans++;  // ans を加算
      }
   }
   console.log(ans);
});
hogeちゃんの画像

for文 で値を一つ一つ調べ M と同じなら ans を加算しています。

Task
N 個の整数の末尾に整数 M を挿入して 改行区切りで出力してね。

【STEP: 9】コード

reader.on('close', () => {
   const [N, M] = lines[0].split(' ').map(Number);
   const a = lines[1].split(' ').map(Number);
   a.push(M);  // 末尾に追加
   for (let i = 0; i <= N; i++) {
      console.log(a[i]);
   }
});
hogeちゃんの画像

a.push(M)a の末尾に M を追加しました。

【STEP: 10】コード

reader.on('close', () => {
   const [N, M] = lines[0].split(' ').map(Number);
   const a = lines[1].split(' ').map(Number);
   let ans = 0;
   a.splice(M - 1, 1);  // M 番目から開始して 要素を 1 つ 削除
   a.forEach(value => {
      console.log(value);
   });
});
hogeちゃんの画像

splice()の引数が第2引数までの場合splice(開始位置, 削除数)でしたね。

【STEP: 11】コード

reader.on('close', () => {
   const [N, M, K] = lines[0].split(' ').map(Number);
   const a = lines[1].split(' ').map(Number);
   a.splice(M - 1, 0, K);  // 削除数が 0個で 追加する要素が K
   a.forEach(value => {
      console.log(value);
   });
});
hogeちゃんの画像

splice()に第3引数がある場合 splice(開始位置, 削除数, 追加する要素)

【STEP: 12】コード

const S =['Hello','paiza','1234','pa13'];
console.log(S.length);
hogeちゃんの画像

length で要素数を取得することができました。

【STEP: 13】コード

const S = ['good','morning','paiza','813','pa13'];
S.forEach(s =>{
   console.log(s);
});
hogeちゃんの画像

forEach()で 全要素にアクセスしています。

【STEP: 14】コード

const S = ['good', 'morning', 'paiza', '813', 'pa13'];
console.log(S[2]);
hogeちゃんの画像
Index は 0から始まるのでS[2]S の 3番目が取得できました。

【STEP: 15】コード

const S = ['eight', 'one', 'three', 'paiza', 'pa13', '813'];
S.forEach(s => {
   console.log(s);
});
hogeちゃんの画像

文字列の配列 S の値をforEach() で出力しました。

【STEP: 16】コード

reader.on('close', () => {
   const S = lines[0].split(' ');
   S.forEach(s => {
      console.log(s);
   });
});
hogeちゃんの画像

入力を半角スペース区切りの配列に変換して S で受け取り forEach() で出力しています。

【STEP: 17】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   const S = lines[1].split(' ');
   for (let i = 0; i < N; i++) {
      console.log(S[i]);
   }
});
hogeちゃんの画像

入力を半角スペース区切りの配列に変換して S で受け取り for文で出力しています。

【STEP: 18】コード

reader.on('close', () => {
   const N = lines[0] - 1;  // index は 0 から始まるので -1
   const S = ['good', 'morning', 'paiza', '813', 'pa13'];  // 文字列を配列に格納
   console.log(S[N]); 
});
hogeちゃんの画像

文字列を引き算すると 答えは数値になります。

【STEP: 19】コード

reader.on('close', () => {
   const N = lines[0] - 1;  // index は 0 から始まるので -1
   const S = lines[1].split(' ');
   console.log(S[N]);
});
hogeちゃんの画像

文字列を S で受け取って S[N] を出力。

【STEP: 20】コード

reader.on('close', () => {
   const [N, M] = lines[0].split(' ');
   const S = lines[1].split(' ');
   console.log(S[N - 1]);  // index は 0 から始まるので -1
});
hogeちゃんの画像

こちらのコードは 出力時に N から 1 減算しています。

【STEP: 21】コード

reader.on('close', () => {
   const [N, M, L] = lines[0].split(' ');
   const S = lines[1].split(' ');
   console.log(S[N - 1][L - 1]);
});
hogeちゃんの画像

S[N – 1] の更に [L – 1] 番目の文字を指定。2次元配列の要素の取得と同じ書き方ですね。

【STEP: 22】コード

const S =  ['zaipa', 'izapa', 'paiza'].sort();  // 配列を辞書順に並べ替え
S.forEach(s=>{
   console.log(s);
});
hogeちゃんの画像

sort() で文字列を辞書順に並べ替えました。

【STEP: 23】コード

reader.on('close', () => {
   const S = lines[0].split(' ').sort();  // 入力を辞書順に並べ替え
   S.forEach(s => {
      console.log(s);
   });
});
hogeちゃんの画像

入力を半角スペース区切りの配列に変換して S で受け取り辞書順に並べ替え for文で出力しています。

【STEP: 24】コード

   const N = Number(lines[0]);
   const S = lines[1].split(' ').sort();
   for (let i = 0; i < N; i++) {
      console.log(S[i]);
   }
});
hogeちゃんの画像
【STEP: 23】は forEach() でしたが こちらは for文 で出力しました。

【FINAL】コード

reader.on('close', () => {
   const [N, K] = lines[0].split(' ');
   const S = lines[1].split(' ').sort();  // (' ')区切りの配列に変換して辞書順ソート
   console.log(S[K - 1]);  // K 番目を出力
});
hogeちゃんの画像

入力を半角スペース区切りの配列に変換して 更に辞書順に並べ替え S で受け取り K 番目を出力。

コメント