本文へ移動

Tane種

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

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

目次

やり方

数列の保存と再開

乱数の消費を数え、位置をJSON、テキスト、CSVで保存して、そこから再開します。

乱数の消費を数える

countedはシード、消費回数、位置を持つ本来の乱数の関数です。再開したい処理の後で位置を保存します。回数は乱数の呼び出し回数であり、高水準の処理の回数ではありません。正規分布の1回は乱数を2回使います。

import { counted, fromJSON, randomAt, toJSON, toText } from "@johnmorrisdotca/tane";

const random = counted(42);
random(); random(); random();
const position = random.position();
const restored = fromJSON(toJSON(position));
if (restored === null) throw new Error("Invalid saved position");
console.log(position.draws, toText(position));
console.log(random(), randomAt(restored.seed, restored.draws)());
3 tane:1:42:3
0.6697340414393693 0.6697340414393693

形式を選ぶ

JSONには形式、アルゴリズム、位置、計算した状態が入り、読み取りで整合性を確認します。テキストは短い位置の表記です。CSVは次の数値と状態を書きます。randomAtで続きから出し、stateAtで以前の全呼び出しを再実行せずに状態を求めます。

不正な位置を拒否する

fromJSONとfromTextは不正な記録や対応しない形式にnullを返します。結果を確認してから再開します。保存先はアプリが決め、パッケージは送信しません。仕様にアルゴリズムと形式の詳細があります。

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

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