フィボナッチ数

配列メニュー【重複の削除・配列の最大最小・ある数以上以下の要素の列挙・二点間の距離・フィボナッチ数 ほか】

【STEP: 1】コード

const S = new Set([1, 3, 5, 1, 2, 3, 6, 6, 5, 1, 4]);  // Set()に同じ値は保存できない
const A = [...S].sort((s, b) => s - b);  // Sの値を配列の値として展開し昇順に並べ替え
A.forEach(a => {
   console.log(a);
});
hogeちゃんの画像

Set() を使って 重複を削除しました。スプレット構文( …S )で 配列 A の要素として展開し sort((s, b) => s - b)で昇順に並べ替えました。

【STEP: 2】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   const A = lines[1].split(' ').map(Number);
   // console.log(Math.max(...A), Math.min(...A));
   A.sort((s, b) => b - s);
   console.log(A[0], A[N - 1]);
});
hogeちゃんの画像

sort((s, b) => b - s)で 数値が大きい順に並べ替えて 左端と右端の要素を出力しました。並べ替えずに(Math.max(...A), Math.min(...A))でも 同じ結果が得られました。

【STEP: 3】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   const A = lines[1].split(' ').map(Number);
   for (let i = 0; i < N; i++) { 
      if (A[i] >= 5) {  // A[i] が 5 以上なら…
         console.log(A[i]);  // A[i] を表示
      }
   }
});
hogeちゃんの画像

for文 で各値にアクセスし if文 で条件分岐。

【STEP: 4】コード

reader.on('close', () => {
   const [N, K] = lines[0].split(' ').map(Number);
   const A = lines[1].split(' ').map(Number);
   for (let i = 0; i < N; i++) {
      if (A[i] >= K) {
         console.log(A[i]);
      }
   }
});
hogeちゃんの画像
【STEP: 3】の応用。

【STEP: 5】コード

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

reduce((a, c) => a + c)で、A の各値を足し上げた値を返してくれました。詳しくはMDN Plus様をご参照下さい。

【STEP: 6】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   for (let i = 1; i <= N; i++) {
      const [x, y] = lines[i].split(' ').map(Number);
      const [X, Y] = [2 - x, 3 - y].map(Math.abs);  // 2つの座標の差の絶対値
      console.log(X + Y);  // マンハッタン距離を出力
   }
});
hogeちゃんの画像

[2 - x, 3 - y].map(Math.abs) で 2 – xと3 – y の絶対値を求めています。双方を足し合わせることでマンハッタン距離を求めることができました。

【STEP: 7】コード

reader.on('close', () => {
   const [N, A, B] = lines[0].split(' ').map(Number);
   const [x1, y1] = lines[A].split(' ');  // A 番目の座標
   const [x2, y2] = lines[B].split(' ');  // B 番目の座標
   const [X, Y] = [x1 - x2, y1 - y2].map(Math.abs);  // 2つの座標の差の絶対値
   console.log(X + Y);  // マンハッタン距離を出力
});
hogeちゃんの画像

【STEP: 6】の応用。

【FINAL】コード

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

フィボナッチ数列 (F) の値を自動計算。

コメント