本文へ移動

Tane種

シードで同じ数列を再現し、項目を並べ替えたり選んだり、日替わりの問題を共有したり、保存した位置から再開したりできます。

「種」は英語の seed に当たる日本語です。 名前について(英語)

目次

やり方

並べ替え・選択・重み

並べ替え、選択、抽出、重み付きの選択に合う関数を使い、乱数の消費を予測できるようにします。

用途に合う関数を使う

belowは上限を含まず、intは両端を含み、floatは上限を含みません。pickは1項目を選びます。shuffledはコピーを返し、shuffleは渡した配列を直接並べ替えます。

import { int, mulberry32, sample, shuffled, weightedPick } from "@johnmorrisdotca/tane";

const random = mulberry32(42);
const names = ["Aki", "Ben", "Cy", "Dev"];
console.log(int(random, 1, 6));
console.log(shuffled(random, names));
console.log(sample(random, names, 2));
console.log(weightedPick(random, ["small", "large"], [3, 1]));
console.log(names);
4
[ 'Aki', 'Dev', 'Cy', 'Ben' ]
[ 'Aki', 'Cy' ]
small
[ 'Aki', 'Ben', 'Cy', 'Dev' ]

同じ位置を選び直さない

sampleは一覧の位置を重複なく選び、一覧より多い要求は長さに合わせます。入力に同じ値が複数あれば、結果にも同じ値が出る場合があります。distinctBelowは重複を引き直すため、消費する回数が変わります。新しいコードにはsampleを使い、既存のシードの動作が依存する場合はdistinctBelowを保ちます。

重みを項目に対応させる

weightedPickには項目ごとの負でない重みを渡します。合計がない場合、weightedIndexは0です。乱数を消費する回数が変わると、その後の数列も変わります。仕様に互換性の規則があります。

ソースを見るGitHub で編集@johnmorrisdotca/tane 1.3.0 のソースから作成しました。

この日本語は、まだ日本語を母語とする方の確認を受けていません。訂正を歓迎します。