Files
freeCodeCamp/curriculum/challenges/ukrainian/10-coding-interview-prep/data-structures/perform-a-subset-check-on-two-sets-of-data.md

303 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 587d8254367417b2b2512c6f
title: Перевірка підмножин двох множин даних
challengeType: 1
forumTopicId: 301707
dashedName: perform-a-subset-check-on-two-sets-of-data
---
# --description--
У цій вправі ви навчитеся виконувати перевірку підмножин двох множин даних. У нашій структурі даних `Set` ми створимо метод під назвою `isSubsetOf`. Він дасть нам змогу порівняти першу множину з другою, і якщо перша повністю міститься в другій, то метод повернеться як `true`.
Наприклад, якщо множина `setA = ['a','b']`, а множина `setB = ['a','b','c','d']`, то `setA` є підмножиною `setB`, а отже метод `setA.isSubsetOf(setB)` повинен повернутися як `true`.
# --hints--
Ваш клас `Set` має містити метод `isSubsetOf`.
```js
assert(
(function () {
var test = new Set();
return typeof test.isSubsetOf === 'function';
})()
);
```
Перша множина Set() повинна міститися у другій
```js
assert(
(function () {
var setA = new Set();
var setB = new Set();
setA.add('a');
setB.add('b');
setB.add('c');
setB.add('a');
setB.add('d');
var aIsSubsetOfB = setA.isSubsetOf(setB);
return aIsSubsetOfB === true;
})()
);
```
Метод `['a', 'b'].isSubsetOf(['a', 'b', 'c', 'd'])` повинен повернутися як `true`
```js
assert(
(function () {
var setA = new Set();
var setB = new Set();
setA.add('a');
setA.add('b');
setB.add('a');
setB.add('b');
setB.add('c');
setB.add('d');
var aIsSubsetOfB = setA.isSubsetOf(setB);
return aIsSubsetOfB === true;
})()
);
```
Метод `['a', 'b', 'c'].isSubsetOf(['a', 'b'])` повинен повернутися як `false`
```js
assert(
(function () {
var setA = new Set();
var setB = new Set();
setA.add('a');
setA.add('b');
setA.add('c');
setB.add('a');
setB.add('b');
var aIsSubsetOfB = setA.isSubsetOf(setB);
return aIsSubsetOfB === false;
})()
);
```
Метод `[].isSubsetOf([])` повинен повернутися як `true`
```js
assert(
(function () {
var setA = new Set();
var setB = new Set();
var aIsSubsetOfB = setA.isSubsetOf(setB);
return aIsSubsetOfB === true;
})()
);
```
Метод `['a', 'b'].isSubsetOf(['c', 'd'])` повинен повернутися як `false`
```js
assert(
(function () {
var setA = new Set();
var setB = new Set();
setA.add('a');
setA.add('b');
setB.add('c');
setB.add('d');
var aIsSubsetOfB = setA.isSubsetOf(setB);
return aIsSubsetOfB === false;
})()
);
```
# --seed--
## --seed-contents--
```js
class Set {
constructor() {
// This will hold the set
this.dictionary = {};
this.length = 0;
}
// This method will check for the presence of an element and return true or false
has(element) {
return this.dictionary[element] !== undefined;
}
// This method will return all the values in the set
values() {
return Object.keys(this.dictionary);
}
// This method will add an element to the set
add(element) {
if (!this.has(element)) {
this.dictionary[element] = true;
this.length++;
return true;
}
return false;
}
// This method will remove an element from a set
remove(element) {
if (this.has(element)) {
delete this.dictionary[element];
this.length--;
return true;
}
return false;
}
// This method will return the size of the set
size() {
return this.length;
}
// This is our union method
union(set) {
const newSet = new Set();
this.values().forEach(value => {
newSet.add(value);
})
set.values().forEach(value => {
newSet.add(value);
})
return newSet;
}
// This is our intersection method
intersection(set) {
const newSet = new Set();
let largeSet;
let smallSet;
if (this.dictionary.length > set.length) {
largeSet = this;
smallSet = set;
} else {
largeSet = set;
smallSet = this;
}
smallSet.values().forEach(value => {
if (largeSet.dictionary[value]) {
newSet.add(value);
}
})
return newSet;
}
difference(set) {
const newSet = new Set();
this.values().forEach(value => {
if (!set.dictionary[value]) {
newSet.add(value);
}
})
return newSet;
}
// Only change code below this line
// Only change code above this line
}
```
# --solutions--
```js
class Set {
constructor() {
this.dictionary = {};
this.length = 0;
}
has(element) {
return this.dictionary[element] !== undefined;
}
values() {
return Object.keys(this.dictionary);
}
add(element) {
if (!this.has(element)) {
this.dictionary[element] = true;
this.length++;
return true;
}
return false;
}
remove(element) {
if (this.has(element)) {
delete this.dictionary[element];
this.length--;
return true;
}
return false;
}
size() {
return this.length;
}
union(set) {
const newSet = new Set();
this.values().forEach(value => {
newSet.add(value);
})
set.values().forEach(value => {
newSet.add(value);
})
return newSet;
}
intersection(set) {
const newSet = new Set();
let largeSet;
let smallSet;
if (this.dictionary.length > set.length) {
largeSet = this;
smallSet = set;
} else {
largeSet = set;
smallSet = this;
}
smallSet.values().forEach(value => {
if (largeSet.dictionary[value]) {
newSet.add(value);
}
})
return newSet;
}
difference(set) {
const newSet = new Set();
this.values().forEach(value => {
if (!set.dictionary[value]) {
newSet.add(value);
}
})
return newSet;
}
isSubsetOf(set) {
for(const value of this.values()){
if(!set.dictionary[value]) return false;
}
return true
}
}
```