/// <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); }
/// <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); }
/// <summary> /// 현재 집합과 지정된 집합의 XOR 연산을 수행한다. ( XOR = (A | B) - ( A & 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); }
/// <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); }
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); } }
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); }
/// <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); }
/// <summary> /// 현재 집합이 지정된 집합의 순모집합인지 판단한다. (두집합이 동치이면 False이다) /// </summary> public virtual bool IsProperSuperset(PascalSet set) { CheckSimilar(this, set); return(set.IsSubset(this) && (Count > set.Count)); }
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); } }
/// <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)); }
/// <summary> /// 현재 집합이 지정된 집합의 모집합인지 판단한다. /// </summary> public virtual bool IsSuperset(PascalSet set) { CheckSimilar(this, set); return(set.IsSubset(this)); }
/// <summary> /// 현재 집합과 지정된 집합의 XOR 연산을 수행한다. ( XOR = (A | B) - ( A & 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; }
/// <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; }
/// <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; }
/// <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; }
/// <summary> /// 현재 집합과 지정된 집합이 같은지 검사한다. /// </summary> /// <param name="set"></param> /// <returns></returns> public bool Equals(PascalSet set) { if(set == null) return false; return (IsSubset(set) && (set.Count == Count)); }
/// <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); }
/// <summary> /// 현재 집합이 지정된 집합의 순모집합인지 판단한다. (두집합이 동치이면 False이다) /// </summary> public virtual bool IsProperSuperset(PascalSet set) { CheckSimilar(this, set); return set.IsSubset(this) && (Count > set.Count); }
/// <summary> /// 현재 집합이 지정된 집합의 모집합인지 판단한다. /// </summary> public virtual bool IsSuperset(PascalSet set) { CheckSimilar(this, set); return set.IsSubset(this); }
/// <summary> /// 현재 집합이 지정된 집합의 참부분집합인지 판단한다. (두집합이 동치이면 False이다) /// </summary> public virtual bool IsProperSubset(PascalSet set) { if(set == null) return false; CheckSimilar(this, set); return IsSubset(set) && (Count < set.Count); }