0
0

Aimless.js

Last updated at Posted at 2023-11-14

Aimless.js

■ Aimless.jsとは?

Aimless.jsは、ランダム性を管理することのできるJavaScriptライブラリです。

■ Aimless.jsを使用する理由

JavaScriptでランダム性を管理するには、ネイティブ関数のMath.randomを利用できます。これは次のように使用されます:

const r = Math.random(); 

では、Aimless.jsは使用するメリットはどこにあるのでしょうか? :thinking:
Math.random関数は、0から1までの浮動小数点数を返すだけなので、ランダム性を管理するためには、自身でコードをより複雑に書く必要があります。
いくつかの例を挙げて説明してみましょう。

例1:

ランダムなブール値を作成したい場合、次のようにコードを書く必要があります:

const r = Math.floor(Math.random() * 2);
const v = (r === 1) ? true : false;
console.log(v); // true または false

例2:

配列[1, 2, 3]からランダムに値を取得したい場合、次のようにコードを書く必要があります:

const a = [1, 2, 3];
const r = Math.floor(Math.random() * a.length);
const v = a[r];
console.log(v); // 1、2、または3

例3:

値に重みを付けながらランダム性を管理したい場合、コードはさらに複雑になります。例えば、配列[1, 2, 3, 4, 5, 6]があり、1、2、3、4、5はそれぞれ重み1で、6は重み10です。重みを考慮に入れたランダムな数値を取得するには、次のようにコードを書く必要があります:

const a = [1, 2, 3, 4, 5, 6];

// 重み
const weights = [1, 1, 1, 1, 1, 10];

// 重みの合計を計算
const totalWeight = weights.reduce((acc, weight) => acc + weight, 0);

// 0から重みの合計までのランダムな値を生成
const randomValue = Math.random() * totalWeight;

// 重みを考慮して要素を選択
let cumulativeWeight = 0;
let v;

for (let i = 0; i < a.length; i++) {
  cumulativeWeight += weights[i];
  if (randomValue <= cumulativeWeight) {
    v = a[i];
    break;
  }
}

// 重みを考慮したランダムな値を表示
// 他の値よりも6がはるかに頻繁に表示されます
console.log(v);

■ Aimless.jsの使用方法

Aimless.jsを使用するには、次のように依存関係をインストールするだけです:

npm install aimless.js

次に、プロジェクトで必要な関数をインポートする必要があります。たとえば:

const { bool } = require('aimless.js');

前述の例にいくつかの修正を加えましょう:

例1(修正):

ランダムなブール値を作成したい場合、次のようにコードを書きます:

const { bool } = require('aimless.js');

const v = bool();
console.log(v);

例2(修正):

配列[1, 2, 3]からランダムに値を取得したい場合、次のようにコードを書きます:

const { oneOf } = require('aimless.js');

const a = [1, 2, 3];
const v = oneOf(a);
console.log(v);

例3(修正):

配列[1, 2, 3, 4, 5, 6]があり、1、2、3、4、5はそれぞれ重み1で、6は重み10です。

重みを考慮に入れたランダムな数値を取得するには、次のようにコードを書きます:

const { weighted } = require('aimless.js');

const a = [1, 2, 3, 4, 5, 6];
const weights = [1, 1, 1, 1, 1, 10];
const v = weighted(a, weights);
console.log(v);

■ 動画

Youtubeで動画を作成しました。

■ 参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0