コード例 #1
0
        public void SelectTree_WithSimpleRecurseFilter(string test, RecurseResult result, string expectedKeysText)
        {
            var root         = Tree.Create(("a", "b"), ("b", "c")).GetRoot();
            var actualKeys   = root.SelectTree(n => n.Key == test ? result : RecurseResult.Continue).SelectKeys();
            var expectedKeys = expectedKeysText.SelectWords();

            actualKeys.ShouldBe(expectedKeys);
        }
コード例 #2
0
ファイル: 2016_09.cs プロジェクト: cmrudolph/adventofcode
    private static RecurseResult Recurse(string s, int start, int length, int depth)
    {
        long decompressed   = 0;
        int  charsProcessed = 0;

        int i = start;

        while (i < start + length)
        {
            if (s[i] == '(')
            {
                string remaining = s.Substring(i);
                Match  m         = MarkerRegex.Match(remaining);
                if (m.Success)
                {
                    int repeat     = int.Parse(m.Groups[2].Value);
                    int nextStart  = i + m.Groups[0].Length;
                    int nextLength = int.Parse(m.Groups[1].Value);

                    RecurseResult recurseResult = Recurse(s, nextStart, nextLength, depth + 1);
                    decompressed   += recurseResult.Decompressed * repeat;
                    charsProcessed += (recurseResult.CharsProcessed + m.Groups[0].Length);

                    i += (m.Groups[0].Length + recurseResult.CharsProcessed);
                }
                else
                {
                    decompressed++;
                    charsProcessed++;
                    i++;
                }
            }
            else
            {
                decompressed++;
                charsProcessed++;
                i++;
            }
        }

        RecurseResult toReturn = new(decompressed, charsProcessed);

        return(toReturn);
    }