예제 #1
0
            public void MultipleWords_HaveExpectedLetters()
            {
                InnerAnacrosticPuzzle puzzle = new InnerAnacrosticPuzzle();

                puzzle.AddWordToClues("as");
                puzzle.AddWordToClues("is");
                PuzzleWord   firstWord   = puzzle.Clues[0];
                PuzzleLetter firstLetter = firstWord.Letters[0];

                Assert.AreEqual('a', firstLetter.ActualLetter);
                Assert.AreEqual(1, firstLetter.NumericIndex);
                Assert.AreEqual('A', firstLetter.AlphabeticIndex);

                PuzzleLetter secondLetter = firstWord.Letters[1];

                Assert.AreEqual('s', secondLetter.ActualLetter);
                Assert.AreEqual(2, secondLetter.NumericIndex);
                Assert.AreEqual('A', secondLetter.AlphabeticIndex);

                PuzzleWord   secondWord = puzzle.Clues[1];
                PuzzleLetter firstLetterInSecondWord = secondWord.Letters[0];

                Assert.AreEqual('i', firstLetterInSecondWord.ActualLetter);
                Assert.AreEqual(3, firstLetterInSecondWord.NumericIndex);
                Assert.AreEqual('B', firstLetterInSecondWord.AlphabeticIndex);

                PuzzleLetter secondLetterInSecondWord = secondWord.Letters[1];

                Assert.AreEqual('s', secondLetterInSecondWord.ActualLetter);
                Assert.AreEqual(4, secondLetterInSecondWord.NumericIndex);
                Assert.AreEqual('B', secondLetterInSecondWord.AlphabeticIndex);
            }
예제 #2
0
            public void SingleWord_HasExpectedLetters()
            {
                PuzzleWord   word        = new PuzzleWord("as", 1, 'A');
                PuzzleLetter firstLetter = word.Letters[0];

                Assert.AreEqual("A1", firstLetter.ToString(), "Unexpected result from ToString override.");
                Assert.AreEqual('a', firstLetter.ActualLetter);
                Assert.AreEqual(1, firstLetter.NumericIndex);
                Assert.AreEqual('A', firstLetter.AlphabeticIndex);

                PuzzleLetter secondLetter = word.Letters[1];

                Assert.AreEqual('s', secondLetter.ActualLetter);
                Assert.AreEqual(2, secondLetter.NumericIndex);
                Assert.AreEqual('A', secondLetter.AlphabeticIndex);
            }
예제 #3
0
        private void FindMatchingLetterIndex(PuzzleLetter letterToMatch, int letterIndex)
        {
            if (IndexMap != null)
            {
                if (IndexMap.ContainsKey(letterIndex))
                {
                    return;
                }
            }

            int puzzleLength = Puzzle.PhraseAsString.Length;
            int puzzleLengthWithoutBlanks = puzzleLength;
            int currentOffset             = 0;
            int offsetOfMatch             = 0;

            foreach (var letter in Puzzle.Phrase)
            {
                if (letter.ActualLetter == ' ' || Char.IsPunctuation(letter.ActualLetter))
                {
                    puzzleLengthWithoutBlanks--;
                }
                else
                {
                    if (letter == letterToMatch)
                    {
                        offsetOfMatch = currentOffset;
                    }
                    currentOffset++;
                }
            }

            var matchingLetterIndex = puzzleLengthWithoutBlanks + offsetOfMatch;

            if (IndexMap == null)
            {
                IndexMap = new Dictionary <int, int>(matchingLetterIndex * 2);
            }

            IndexMap[letterIndex]         = matchingLetterIndex;
            IndexMap[matchingLetterIndex] = letterIndex;
        }