google colabolatory⑩ JavaScriptでアルゴリズム(配列の要素を反転する)

ついでなので、配列の要素を反転する方法も学習してみます。

 

%%js

const data = [1,2,3,4,5,6,7,8,9];

let arr = [...data];

function swap(array, idx1, idx2){
  let tmp = array[idx1];
  array[idx1] = array[idx2];
  array[idx2] = tmp;
}

function reverse(array){
  for(let i=0; i< array.length/2; i++){
    swap(array, i, array.length-i-1);
  }
}

reverse(arr);

console.log(arr);

google colabolatory⑨ JavaScriptでアルゴリズム(配列の要素をシャッフルする)

今回はこれがゴールです。

 

いくつか復習しておきます。

配列の宣言と代入についてです。

const array = [ ];  

で宣言できます。

array[0] = 1;

array[1] = 4;

array[2] = 7;

array[3] = 9;

これは、下記と同様です。

const array = [1, 4, 7, 9];

 

次に配列のコピーについてです。

配列をコピーしたい、すなわち、各要素の値は同じだが物理的に異なる配列を作りたい場合は、スプレッド構文を使って、

let b = [ ...a];  

のように作ります。

 

配列の要素をシャッフルするアルゴリズムは、Fisher-Yatesアルゴリズムです。

世界最速の配列シャッフルアルゴリズム、Fisher-Yatesアルゴリズム - Panda Noir

 

%%js

const array = ["apple", "orange", "banana", "peach"];

let arraySmp = [...array];

const shuffleArray = (arr) => {
  for(let i= arr.length-1; i>0; i--){
    let j= Math.floor(Math.random() * (i+1));
    let tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
  }
  return arr;
}

console.log(shuffleArray(arraySmp));

これは結局下記と同等です

const array = ["apple", "orange", "banana", "peach"];


let arraySmp = [...array];


const shuffleArray = (arr) => {
 for(let i=0; i<arr.length;i++){
 let j = Math.floor(Math.random() * i);
 let tmp = arr[i];
 arr[i] = arr[j];
  arr[j] = tmp;
 }
 return arr;
}


console.log(shuffleArray(arraySmp));

これで問題作成アプリの選択肢をランダムに入れ替えることができそうです。

google colabolatory⑧ JavaScriptでアルゴリズム(nの階乗を求める)

 

for文だと下記のようになります。

 

%%js
//n!(nの階乗)をもとめる

function factorial(n){
  if(n > 1){
    return n * factorial(n-1);
  }else{
    return 1;
  }
}

console.log(factorial(5));

 

再帰を使うと下記のようになります。

%%js
//n!(nの階乗)をもとめる

function factorial(n){
  if(n > 1){
    return n * factorial(n-1);
  }else{
    return 1;
  }
}

console.log(factorial(5));

google colabolatory⑥ JavaScriptでアルゴリズム(最大値を求める)

Google colabolatoryでは、わざわざHTMLファイルを用意しなくてもJavaScriptを試せる。

 

【Colab】GooglecolabでJavaScriptを動かそう! - AI Academy Media

 

アルゴリズムの勉強をJavaScriptでやってみる。

まずは最大値をもとめるアルゴリズムです。

3つの値のうち、最大値を表示するものです。

%%js
const a = 3;
const b = 4;
const c = 1;

let max = a;
if(max < b){
  max = b;
}else if(max < c){
  max = c;
}

console.log(max);

 

別解答です。

%%js
const a = 3;
const b = 4;
const c = 1;

function max(x,y,z){
  let maxValue = x;
  if(maxValue < y){
    maxValue = y;
  }else if(maxValue < z){
    maxValue = z;
  }
  return maxValue;
}

console.log(max(a,b,c));