-
Notifications
You must be signed in to change notification settings - Fork 0
/
Mysterious Organisms.js
72 lines (56 loc) · 1.64 KB
/
Mysterious Organisms.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// Returns a random DNA base
const returnRandBase = () => {
const dnaBases = ['A', 'T', 'C', 'G'];
return dnaBases[Math.floor(Math.random() * 4)]
}
// Returns a random single stand of DNA containing 15 bases
const mockUpStrand = () => {
const newStrand = []
for (let i = 0; i < 15; i++) {
newStrand.push(returnRandBase())
}
return newStrand;
}
//factory function
let pAequorFactory = (specimenNum, dna) => {
return {
specimenNum: specimenNum,
dna: dna,
//mutate method
mutate () {
let randIndex = Math.floor(Math.random() * this.dna.length);
let newBase = returnRandBase();
//while - to make sure newBase isn't replacing itself
while (this.dna[randIndex] === newBase) {
newBase === returnRandBase();
}
//return
return this.dna[randIndex] = newBase;
return this.dna
},
//method to compare objects
compareDNA (obj) {
let numMatch = 0;
for (let i = 0; i <= this.dna.length - 1; i++);
if (obj.dna[i] === this.dna[i] ) {
numMatch += 1;
};
let percMatch = numMatch/this.dna.length * 100;
console.log(`These DNA strands are ${percMatch}% in common.`)
},
//method to determine survival
willLikelySurvive () {
let cArray = this.dna.filter(base => base === 'C');
let gArray = this.dna.filter(base2 => base2 === 'G');
if ((cArray.length) + (gArray.length) >= 9 ) {
return true
} else {
return false
}
}
}
};
let arrayOfpAequor = [];
for (let i = 0; i < 30; i++) {
arrayOfpAequor.push(pAequorFactory(i + 1, mockUpStrand))
};