Exemplo n.º 1
0
        public int GetNumPossibilities(int current, ImmutableSequence<int> possibilities)
        {
            if (current == 0)
            {
                return 1;
            }

            ImmutableSequence<int> otherPossibilities = possibilities.Skip(1);

            int possibility = possibilities.First();
            if (!otherPossibilities.HasValue)
            {
                if ((current % possibility) == 0)
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }

            return new Range(current, 0, -possibility, true)
                .Sum(n => GetNumPossibilities(n, otherPossibilities));
        }
Exemplo n.º 2
0
        public IEnumerable<IEnumerable<int>> GetResults(BooleanMatrix pairs, int count, ImmutableSequence<int> current)
        {
            int length = pairs.Width;

            int start;
            if (!current.HasValue)
            {
                start = 0;
            }
            else
            {
                start = current.First();
            }

            var results = new Range(start, length)
                .Where(i => current
                    .All(x => pairs[x, i]));

            if (count == 1)
            {
                return results
                    .Select(i => new ImmutableSequence<int>(i, current));
            }
            else
            {
                return results
                    .SelectMany(i => GetResults(pairs, count - 1, new ImmutableSequence<int>(i, current)));
            }
        }