3

文字列の内容を「シャッフル」する方法(ASP.NET C#を使用)があるかどうか疑問に思っていましたが、元のコンテンツを保存せずに、別のボタンをクリックして元のコンテンツに「シャッフル解除」することはできますか?

ありがとうございました :)

例:

"This is not shuffled."

"isuo .tffsnl iTh shed"

...And then I click the "UNShuffle" button and it becomes normal again:

"This is not shuffled."
4

2 に答える 2

8

sufflingは簡単です:

var rnd = new Random();
string unsuffled = "This is not shuffled.";
string shuffled = new string(unsuffled.OrderBy(r => rnd.Next()).ToArray());

ただし、ランダムであるため、前の文字列またはマッピングを保存しない限り、シャッフルを解除することはできません。

于 2010-07-12T08:34:13.393 に答える
6

さて、あなたは何かを保存する必要があるでしょう。1つの簡単なアイデア:

  • 乱数ジェネレーターを使用して、ランダムシードを生成します。
  • Randomそのシードを使用してシャッフルするために使用するの新しいインスタンスを作成します
  • 修正されたフィッシャー-イェーツシャッフルでシャッフル
  • シードを保持します

その後、シャッフルは元に戻せます-確かに少しの努力で。(おそらく同じ方法で数字0 ...(n-1)をシャッフルしてから、その方法で文字を逆マップします。)

トリッキーな点は、シードが必要なことです。これは、保存されているパスワードハッシュのソルトに少し似ています。どのようにシャッフルされたかを示すために、追加の情報が必要です。そうしないと、たとえば「abc」が「bac」から来たのか「cab」から来たのかわかりません。

于 2010-07-12T08:32:23.097 に答える