Прямо сейчас я работаю над набором словесных игр в качестве средства самообучения (и воссоздаю некоторые из моих любимых словесных игр!) С помощью «настоящего» друга-программиста мы реализовали хороший метод перестановки в мои занятия. Он находит все перестановки от 3 букв и выше и сравнивает их со списками строк, которые у меня есть, содержащими то, что по сути является списком слов турнира Scrabble.
Это предыстория, вот моя текущая проблема: теперь у меня есть все перестановки, я сравнил их с существующими словами и создал новый список со всеми возможными комбинациями слов в данной строке. Однако, когда я представляю эту строку пользователю, мне нужно, чтобы она была зашифрована. Я нашел несколько реализаций перетасовки Фишера-Йейтса на С#, но мне не удалось адаптировать их для приема одной строки (EDIT: проблема Фишера-Йейтса решена с помощью массива char[]). Затем у меня появилась идея для небольшого хака - почему бы не использовать одну из перестановок той же длины, но != оригинальное слово.
К сожалению, каждый раз мой условный оператор возвращает слово задом наперед. Конечному пользователю не так сложно это понять :) Вот мой код для скремблирования:
// permWords is a Dictionary<int, List<string>>
String strScrambled= "";
foreach (List<string> listWords in permWords.Values)
{
foreach (string word in listWords)
{
if (word.Length == strWord.Length && word != strWord)
{
strScrambled = word;
}
}
}
Я пробовал strScrambled = word + 1
, предполагая, что первая перестановка, неравная оригиналу, была словом назад. Однако я не думаю, что это действительно «работает» в данном контексте; особенно учитывая, что он по-прежнему возвращает одно и то же слово в обратном порядке.
Был дан очень полезный ответ о том, как решить мою проблему с Фишером-Йейтсом с помощью массива символов, но мне все еще очень любопытно узнать, как лучше всего использовать что-то вроде того, что я опубликовал, только найдя способ убедиться, что ответ — это не просто слово, написанное наоборот. Я заинтригован этим методом, потому что список перестановок уже существует; Я хотел бы использовать это как свое решение.