piapia123
ja

テキストシャッフル

テキスト

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

テキストの順序をランダムに並べ替えます。3 つの単位はそれぞれ残すべきものを残します。行は行の順序だけを変え(行数も中身もそのまま)、文字は各行の中で並べ替え(行構造は保たれ、改行が勝手に動く文字として扱われることはありません)、語は語順だけを変え、語間のすき間と行頭行末の空白はその場に残ります。 シャッフルは Fisher–Yates です。 よくある「ランダムに数回交換する」実装は偏った分布になり、特定の順序が明らかに出やすくなります。これは抽選やサンプリング、ランダムなグループ分けでは実際に問題になります。後ろから走査する Fisher–Yates なら、すべての順列が等しい確率になります。 リアルタイムではありません。 リアルタイムだと 1 キーごとに再計算され、良い順序を見つけた直後に次のキーで入れ替わってしまいます。そのため明示的なボタンにしています。

機能

  • 行・文字・語の 3 単位
  • Fisher–Yates によるシャッフルで、すべての順列が等確率
  • 語モードは行頭行末の空白と語間のすき間を保つ
  • 文字モードは行構造を保ち、絵文字や ZWJ 連結は書記素クラスタごと動く
  • ボタンを押したときだけ並べ替え、押すまでは結果が変わらない
  • 空行も普通の行として扱われる
  • 処理はすべてブラウザ内で完結し、内容は送信されません

使い方

  1. 並べ替えたいテキストを貼り付けます
  2. 単位を選びます
  3. 「もう一度シャッフル」で引き直し、納得したら「コピー」

よくある質問

シャッフルしても変わって見えないことがあるのはなぜですか?
ランダムな並べ替えでは元の順序が出ることもあるからです。2 行なら 50%、3 行でも約 17% の確率で元のままになります。本当に動いているか確かめたいときは数回押すか、行数の多いテキストで試してください(10 行なら毎回同じになることはまずありません)。「前回と必ず違う結果にする」処理は入れていません —— 入れると分布が均等でなくなるからです。
入力しながらシャッフルできないのはなぜですか?
シャッフルは入力から計算で導けない操作だからです。リアルタイムだと 1 文字入力するたびに結果が変わり、気に入った順序を見つけてもコピーする前に消えてしまいます。そのため明示的なボタンにしています —— UUID 生成やパスワード生成と同じ理由です。
偏りはありませんか?
ありません。後ろから走査する Fisher–Yates を使っており、n! 通りの順列がそれぞれ 1/n! の確率で出ます。よくある「配列を 1 周しながらランダムな位置と交換する」実装には測定できる偏りがあり、抽選やサンプリング、グループ分けでは実際に影響が出ます。

関連ツール