Skip to content

Instantly share code, notes, and snippets.

@bgoonz
Created March 13, 2021 03:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bgoonz/d5fcc5173fc13774b72544ccc1df6a98 to your computer and use it in GitHub Desktop.
Save bgoonz/d5fcc5173fc13774b72544ccc1df6a98 to your computer and use it in GitHub Desktop.
class Set {
constructor() {
this.values = [];
this.numberOfValues = 0;
}
add(value) {
if ( !~this.values.indexOf( value ) ) {
this.values.push( value );
this.numberOfValues++;
}
}
remove(value) {
let index = this.values.indexOf( value );
if ( ~index ) {
this.values.splice( index, 1 );
this.numberOfValues--;
}
}
contains(value) {
return this.values.indexOf( value ) !== -1;
}
union(set) {
let newSet = new Set();
set.values.forEach( value => {
newSet.add( value );
} );
this.values.forEach( value => {
newSet.add( value );
} );
return newSet;
}
intersect(set) {
let newSet = new Set();
this.values.forEach( value => {
if ( set.contains( value ) ) {
newSet.add( value );
}
} );
return newSet;
}
difference(set) {
let newSet = new Set();
this.values.forEach( value => {
if ( !set.contains( value ) ) {
newSet.add( value );
}
} );
return newSet;
}
isSubset(set) {
return set.values.every( function ( value ) {
return this.contains( value );
}, this );
}
length() {
return this.numberOfValues;
}
print() {
console.log( this.values.join( ' ' ) );
}
}
let set = new Set();
set.add( 1 );
set.add( 2 );
set.add( 3 );
set.add( 4 );
set.print(); // => 1 2 3 4
set.remove( 3 );
set.print(); // => 1 2 4
console.log( 'contains 4 is true:', set.contains( 4 ) ); // => true
console.log( 'contains 3 is false:', set.contains( 3 ) ); // => false
console.log( '---' );
let set1 = new Set();
set1.add( 1 );
set1.add( 2 );
let set2 = new Set();
set2.add( 2 );
set2.add( 3 );
let set3 = set2.union( set1 );
set3.print(); // => 1 2 3
let set4 = set2.intersect( set1 );
set4.print(); // => 2
let set5 = set.difference( set3 ); // 1 2 4 diff 1 2 3
set5.print(); // => 4
let set6 = set3.difference( set ); // 1 2 3 diff 1 2 4
set6.print(); // => 3
console.log( 'set1 subset of set is true:', set.isSubset( set1 ) ); // => true
console.log( 'set2 subset of set is false:', set.isSubset( set2 ) ); // => false
console.log( 'set1 length gives 2:', set1.length() ); // => 2
console.log( 'set3 length gives 3:', set3.length() ); // => 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment