Skip to content

Instantly share code, notes, and snippets.

@matyax
Created July 3, 2015 23:19
Show Gist options
  • Save matyax/deead9b018083806cc96 to your computer and use it in GitHub Desktop.
Save matyax/deead9b018083806cc96 to your computer and use it in GitHub Desktop.
Members and petitions
/*var petitions = [
{
id: 1,
},
{
id: 2
},
{
id: 3
}
];
var members = [
{
id: 1,
petitions: [
petitions[0],
petitions[1]
]
},
{
id: 2,
petitions: [
petitions[0]
]
},
{
id: 3,
petitions: [
petitions[1],
petitions[2]
]
},
{
id: 4,
petitions: [
petitions[2]
]
}
];
petitions[0].members = [
members[0],
members[1]
];
petitions[1].members = [
members[0],
members[2]
];
petitions[2].members = [
members[2],
members[3]
];*/
function Member(id) {
this.id = id;
this.petitions = [];
this.getId = function() {
return this.id;
};
this.getPetitionsSigned = function() {
return this.petitions;
};
this.addPetition = function(petition) {
this.petitions.push(petition);
petition.addMember(this);
};
}
function Petition(id) {
this.id = id;
this.members = [];
this.getId = function() {
return this.id;
};
this.getSigningMembers = function() {
return this.members;
};
this.addMember = function(member) {
this.members.push(member);
};
}
a = new Member('a');
b = new Member('b');
c = new Member('c');
d = new Member('d');
e = new Member('e');
p1 = new Petition('1');
p2 = new Petition('2');
p3 = new Petition('3');
p4 = new Petition('4');
p5 = new Petition('5');
p6 = new Petition('6');
p7 = new Petition('7');
a.addPetition(p1);
a.addPetition(p5);
a.addPetition(p6);
b.addPetition(p1);
b.addPetition(p2);
b.addPetition(p5);
b.addPetition(p4);
c.addPetition(p2);
c.addPetition(p3);
c.addPetition(p7);
d.addPetition(p3);
d.addPetition(p4);
d.addPetition(p6);
e.addPetition(p7);
printSeparations(a);
function printSeparations(member, degrees) {
var relatedMembers = separations([member], member.petitions),
petitions,
examinedMembers = [ member ],
degrees = 1;
do {
console.log('----------------------------------------------------------');
console.log('Degree ' + degrees);
petitions = [];
relatedMembers.forEach(function (member) {
console.log(member.id);
member.petitions.forEach(function (petition) {
if (petitions.indexOf(petition) < 0) {
petitions.push(petition);
}
});
});
examinedMembers = examinedMembers.concat(relatedMembers);
relatedMembers = separations(examinedMembers, petitions);
degrees++;
} while(relatedMembers.length > 0);
}
function separations(examinedMembers, petitions) {
var members = [];
petitions.forEach(function (petition) {
petition.members.forEach(function (member) {
if (examinedMembers.indexOf(member) < 0) {
members.push(member);
examinedMembers.push(member);
}
});
});
return members;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment