Ejemplo n.º 1
0
        public static BigInteger[] Mixbonacci(string[] patterns, int n)
        {
            // Build sequence map
            var patternList = patterns.ToList();
            var sequenceMap = patternList
                              .Distinct()
                              .Select(pattern => new { Pattern = pattern, Strategy = Kata.GetNacciStrategy(pattern) })
                              .ToDictionary(obj => obj.Pattern, obj => obj.Strategy.GetSequence(n).ToList());

            //var patternCountMap = Enumerable.Repeat(0, patterns.Length).ToArray();
            Dictionary <string, int> patternCountMap = new Dictionary <string, int>();

            foreach (string pattern in patterns)
            {
                if (!patternCountMap.ContainsKey(pattern))
                {
                    patternCountMap.Add(pattern, 0);
                }
            }

            var actual = new List <BigInteger>(n);

            for (int i = 0; i < n; i++)
            {
                int    patternIndex = i % patterns.Length;
                string pattern      = patterns[patternIndex];
                int    mapIndex     = patternCountMap[pattern]++;

                actual.Add(sequenceMap[pattern][mapIndex]);
            }

            return(actual.ToArray());
        }