Персонаж Shuffler - PullRequest
       6

Персонаж Shuffler

3 голосов
/ 12 июля 2010

Мне было просто интересно, есть ли способ (с помощью 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."

Ответы [ 2 ]

8 голосов
/ 12 июля 2010

Сущность проста:

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

Но так как это случайно, вы не можете отменить перемешивание, если не сохраните предыдущую строку или отображение.

6 голосов
/ 12 июля 2010

Ну, вам нужно сэкономить что-то .Одна простая идея:

  • Используйте генератор случайных чисел для генерации случайного начального числа.
  • Создайте новый экземпляр Random для использования для перемешивания с использованием этого начального числа
  • Перестановка с измененным Перемешиванием Фишера-Йейтса
  • Сохранение семени

Перестановка затем обратима - правда, с небольшим усилием.(Я бы, вероятно, перетасовал числа 0 ... (n-1) таким же образом, а затем изменил бы обратное отображение символов таким образом.)

Хитрость в том, что вы делаете нужно семя - это немного похоже на соль в сохраненном хэше пароля.У вас должна быть некоторая дополнительная информация, чтобы сказать, как она была перетасована, иначе вы не будете знать, прибыл ли «abc» из «bac» или «cab», например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...