Inheritance: ICollection
Beispiel #1
0
        /// <summary>
        /// 지정된 두 집합의 집합 범위가 같은지 검사한다.
        /// </summary>
        /// <exception cref="ArgumentException">두 집합이 같은 종류가 아닐 때</exception>
        public static void CheckSimilar(PascalSet set1, PascalSet set2) {
            set1.ShouldNotBeNull("set1");
            set2.ShouldNotBeNull("set2");

            if(!AreSimilar(set1, set2))
                throw new ArgumentException(SR.ErrNotSameType);
        }
Beispiel #2
0
        /// <summary>
        /// 현재 집합에서 지정된 집합의 요소를 뺀 집합 (차집합) 을 만든다.
        /// </summary>
        public virtual PascalSet Difference(PascalSet set)
        {
            if (set == null)
            {
                return(Clone());
            }

            CheckSimilar(this, set);

            var result = Clone();

            result._bitData.Xor(set._bitData).And(_bitData);

            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// 현재 집합과 지정된 집합의 XOR 연산을 수행한다. ( XOR = (A | B) - ( A &amp; B) )
        /// </summary>
        public virtual PascalSet ExclusiveOr(PascalSet set)
        {
            if (set == null)
            {
                return(Clone());
            }

            CheckSimilar(this, set);

            var result = Clone();

            result._bitData.Xor(set._bitData);

            return(result);
        }
Beispiel #4
0
        /// <summary>
        /// 현재 집합과 지정된 집합의 교집합을 만든다.
        /// </summary>
        public virtual PascalSet Intersection(PascalSet set)
        {
            // 요소가 없는 빈 집합을 반환한다.
            if (set == null)
            {
                return(new PascalSet(_lowerBound, _upperBound));
            }

            CheckSimilar(this, set);

            var result = Clone();

            result._bitData.And(set._bitData);

            return(result);
        }
Beispiel #5
0
        public void CharacterCountTest()
        {
            // alphabet 만
            var alphabetSet = new PascalSet('A', 'z'); // asciiSet.Union(chars.ToArray());
            // 모음
            var vowels = alphabetSet.Union('A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u');
            // 자음
            var consonants = vowels.Complement();

            const string contents = "Hey, realweb members. make money please.";

            int contentLength  = contents.Length;
            int vowelCount     = 0;
            int consonantCount = 0;
            int otherCount     = 0;

            for (int i = 0; i < contentLength; i++)
            {
                char c = contents[i];

                if (vowels.ContainsElement(c))
                {
                    vowelCount++;
                }
                else if (consonants.ContainsElement(c))
                {
                    consonantCount++;
                }
                else
                {
                    otherCount++;
                }
            }

            if (IsDebugEnabled)
            {
                log.Debug("Contents: " + contents);
                log.Debug("주어진 문장에는 {0}개의 모음, {1}개의 자음, {2}개의 비 알파벳 문자가 있습니다.", vowelCount, consonantCount, otherCount);
                log.Debug("모음 : " + vowels);
                log.Debug("자음 : " + consonants);
            }
        }
Beispiel #6
0
 public void Initialize() {
     var set = new PascalSet(0, 9);
     _pascalSet1 = set.Union(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
     _pascalSet2 = set.Union(1, 3, 5, 7, 9);
     _pascalSet3 = set.Union(0, 2, 4, 6, 8);
 }
Beispiel #7
0
        /// <summary>
        /// Constructor for copying
        /// </summary>
        /// <param name="set">instance to copied</param>
        public PascalSet(PascalSet set) {
            set.ShouldNotBeNull("set");

            _lowerBound = set._lowerBound;
            _upperBound = set._upperBound;
            _bitData = new BitArray(set._bitData);
        }
Beispiel #8
0
 /// <summary>
 /// 현재 집합이 지정된 집합의 순모집합인지 판단한다. (두집합이 동치이면 False이다)
 /// </summary>
 public virtual bool IsProperSuperset(PascalSet set)
 {
     CheckSimilar(this, set);
     return(set.IsSubset(this) && (Count > set.Count));
 }
Beispiel #9
0
        public void CharacterCountTest() {
            // alphabet 만
            var alphabetSet = new PascalSet('A', 'z'); // asciiSet.Union(chars.ToArray());
            // 모음
            var vowels = alphabetSet.Union('A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u');
            // 자음
            var consonants = vowels.Complement();

            const string contents = "Hey, realweb members. make money please.";

            int contentLength = contents.Length;
            int vowelCount = 0;
            int consonantCount = 0;
            int otherCount = 0;

            for(int i = 0; i < contentLength; i++) {
                char c = contents[i];

                if(vowels.ContainsElement(c))
                    vowelCount++;
                else if(consonants.ContainsElement(c))
                    consonantCount++;
                else
                    otherCount++;
            }

            if(IsDebugEnabled) {
                log.Debug("Contents: " + contents);
                log.Debug("주어진 문장에는 {0}개의 모음, {1}개의 자음, {2}개의 비 알파벳 문자가 있습니다.", vowelCount, consonantCount, otherCount);
                log.Debug("모음 : " + vowels);
                log.Debug("자음 : " + consonants);
            }
        }
Beispiel #10
0
 /// <summary>
 /// 지정된 두 PascalSet의 집합 범위(LowerBound, UpperBound)가 같은지 검사한다. (Same이, Equivalent, Equal과는 다르다)
 /// </summary>
 public static bool AreSimilar(PascalSet set1, PascalSet set2)
 {
     return((set1.LowerBound == set2.LowerBound) &&
            (set1.UpperBound == set2.UpperBound));
 }
Beispiel #11
0
        /// <summary>
        /// 현재 집합이 지정된 집합의 모집합인지 판단한다.
        /// </summary>
        public virtual bool IsSuperset(PascalSet set)
        {
            CheckSimilar(this, set);

            return(set.IsSubset(this));
        }
Beispiel #12
0
        /// <summary>
        /// 현재 집합과 지정된 집합의 XOR 연산을 수행한다. ( XOR = (A | B) - ( A &amp; B) )
        /// </summary>
        public virtual PascalSet ExclusiveOr(PascalSet set) {
            if(set == null)
                return Clone();

            CheckSimilar(this, set);

            var result = Clone();
            result._bitData.Xor(set._bitData);

            return result;
        }
Beispiel #13
0
        /// <summary>
        /// 현재 집합에서 지정된 집합의 요소를 뺀 집합 (차집합) 을 만든다.
        /// </summary>
        public virtual PascalSet Difference(PascalSet set) {
            if(set == null)
                return Clone();

            CheckSimilar(this, set);

            var result = Clone();

            result._bitData.Xor(set._bitData).And(_bitData);

            return result;
        }
Beispiel #14
0
        /// <summary>
        /// 현재 집합과 지정된 집합의 교집합을 만든다.
        /// </summary>
        public virtual PascalSet Intersection(PascalSet set) {
            // 요소가 없는 빈 집합을 반환한다.
            if(set == null)
                return new PascalSet(_lowerBound, _upperBound);

            CheckSimilar(this, set);

            var result = Clone();
            result._bitData.And(set._bitData);

            return result;
        }
Beispiel #15
0
        /// <summary>
        /// 현재 집합이 지정된 집합의 부분집합인지 판단한다. (두 집합이 일치해도 부분집합이다)
        /// </summary>
        public virtual bool IsSubset(PascalSet set) {
            if(set == null)
                return false;

            CheckSimilar(this, set);

            // bit 로 포함되어 있기 때문
            const int INT_SiZE = 32;
            int arraySize = (_bitData.Length + INT_SiZE - 1) / INT_SiZE;

            var thisBits = new int[arraySize];
            var setBits = new int[arraySize];

            _bitData.CopyTo(thisBits, 0);
            set._bitData.CopyTo(setBits, 0);

            for(int i = 0; i < thisBits.Length; i++) {
                // 현재 집합의 원소가 지정된 집합의 원소가 아니라면 부분집합이 아니다.
                if((thisBits[i] & setBits[i]) != thisBits[i])
                    return false;
            }

            return true;
        }
Beispiel #16
0
        /// <summary>
        /// 현재 집합과 지정된 집합이 같은지 검사한다.
        /// </summary>
        /// <param name="set"></param>
        /// <returns></returns>
        public bool Equals(PascalSet set) {
            if(set == null)
                return false;

            return (IsSubset(set) && (set.Count == Count));
        }
Beispiel #17
0
 /// <summary>
 /// 지정된 두 PascalSet의 집합 범위(LowerBound, UpperBound)가 같은지 검사한다. (Same이, Equivalent, Equal과는 다르다)
 /// </summary>
 public static bool AreSimilar(PascalSet set1, PascalSet set2) {
     return (set1.LowerBound == set2.LowerBound) &&
            (set1.UpperBound == set2.UpperBound);
 }
Beispiel #18
0
 /// <summary>
 /// 현재 집합이 지정된 집합의 순모집합인지 판단한다. (두집합이 동치이면 False이다)
 /// </summary>
 public virtual bool IsProperSuperset(PascalSet set) {
     CheckSimilar(this, set);
     return set.IsSubset(this) && (Count > set.Count);
 }
Beispiel #19
0
        /// <summary>
        /// 현재 집합이 지정된 집합의 모집합인지 판단한다.
        /// </summary>
        public virtual bool IsSuperset(PascalSet set) {
            CheckSimilar(this, set);

            return set.IsSubset(this);
        }
Beispiel #20
0
        /// <summary>
        /// 현재 집합이 지정된 집합의 참부분집합인지 판단한다. (두집합이 동치이면 False이다)
        /// </summary>
        public virtual bool IsProperSubset(PascalSet set) {
            if(set == null)
                return false;

            CheckSimilar(this, set);

            return IsSubset(set) && (Count < set.Count);
        }