Esempio n. 1
0
        public string GetDecryptedPhrase2(string hash, string targetAnagram)
        {
            var anagramCharPool            = targetAnagram.Alphabetize();
            var targetAnagramRelevantWords = RemoveIrrelevantWords(_words, anagramCharPool);
            var equivalencyClasses         = WordEquivalencyClass.FromWordList(targetAnagramRelevantWords);

            var candidateAnswer = new WordEquivalencyClassComposition(new List <WordEquivalencyClass>()); //answerType

            var memo = new Memo(anagramCharPool);

            var candidateBundles2 = Recursive(candidateAnswer, anagramCharPool, equivalencyClasses, memo, 0);

            var candidateBundles = memo.Solutions.TempList;

            foreach (var bundle in candidateBundles)
            {
                // construct equivalent phrases
                var equivalentPhrases = new List <string> {
                    ""
                };
                foreach (var charPoolWithWords in bundle.OrderedListOfWordEquivalencyClasses)
                {
                    var tempList = new List <string>();

                    foreach (var word in charPoolWithWords.Words)
                    {
                        foreach (var phraseUnderConstruction in equivalentPhrases)
                        {
                            if (phraseUnderConstruction == "")
                            {
                                tempList.Add(word);
                            }
                            tempList.Add(phraseUnderConstruction + " " + word);
                        }
                    }

                    equivalentPhrases = tempList;
                }

                foreach (var phrase in equivalentPhrases)
                {
                    if (_encrypter.Hash(phrase) == hash)
                    {
                        return(phrase);
                    }
                }
            }


            throw new NoPhraseFound("no phrase found");
        }
Esempio n. 2
0
        public void Tests(List <string> wordList, List <WordEquivalencyClass> expected)
        {
            var actual = WordEquivalencyClass.GetDictionary(wordList).Select(x => new WordEquivalencyClass(x.Key, x.Value)).ToList();

            Assert.Equal(expected.Count, actual.Count);
            for (int i = 0; i < actual.Count; i++)
            {
                Assert.Equal(expected[i].CharPool, actual[i].CharPool);
                Assert.Equal(expected[i].Words.Count, actual[i].Words.Count);
                var expectedWords = expected[i].Words.ToArray();
                var actualWords   = actual[i].Words.ToArray();
                for (int j = 0; j < actual[i].Words.Count; j++)
                {
                    Assert.Equal(expectedWords[j], actualWords[j]);
                }
            }
        }