Skip to content

Instantly share code, notes, and snippets.

@codecademydev
Created July 6, 2021 14:58
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 codecademydev/c61c7ab6016ca2de4d760410d1f5305e to your computer and use it in GitHub Desktop.
Save codecademydev/c61c7ab6016ca2de4d760410d1f5305e to your computer and use it in GitHub Desktop.
Codecademy export
// 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
}
function pAequorFactory(number, arrayOfDNA){
return {
_specimenNum: number,
_dna: arrayOfDNA,
get specimenNum(){
return this._specimenNum
},
set specimenNum(num){
this._specimenNum = num;
},
get dna(){
return this._dna
},
set dna(newDNA){
this._dna = newDNA;
},
mutate() {
const pickedIdx = Math.floor(Math.random() * 15);
const pickedDNA = this.dna[pickedIdx];
let mutatedDNA = returnRandBase();
while (mutatedDNA === pickedDNA) {
// console.log(pickedIdx);
// console.log(pickedDNA, mutatedDNA);
mutatedDNA = returnRandBase();
}
// console.log(pickedIdx);
// console.log(pickedDNA, mutatedDNA);
// console.log(this.dna);
this.dna[pickedIdx] = mutatedDNA;
// console.log(this.dna);
return this.dna;
},
compareDNA(pAequor){
let commonDNACnt = 0;
for (let i = 0; i < this.dna.length; i ++){
if (this.dna[i] === pAequor.dna[i]) {
commonDNACnt += 1;
}
}
const pctDNAInCommon = Math.round(commonDNACnt / 15 * 100);
const message = `specimen #${this.specimenNum} and specimen #${pAequor.specimenNum} have ${pctDNAInCommon}% DNA in common`;
console.log(message);
},
willLikelySurvive(){
let countOfCG = 0;
for (let i = 0; i < this.dna.length; i++){
if (['C', 'G'].includes(this.dna[i])){
countOfCG ++;
}
}
const pctCG = countOfCG / this.dna.length;
// console.log(pctCG)
return pctCG >= 0.6;
},
complementStrand(){
const complementDNAMapper = {
A: 'T',
T: 'A',
C: 'G',
G: 'C'
}
const complement = this.dna.map(e => {return complementDNAMapper[e]});
return complement;
}
}
}
// console.log(mockUpStrand());
// const pAequor1 = pAequorFactory(1, mockUpStrand());
// const pAequor2 = pAequorFactory(2, mockUpStrand());
// pAequor1.compareDNA(pAequor2);
// console.log(pAequor1.willLikelySurvive());
const pAequorArray = [];
const numSamplesWeNeed = 3;
for (let i = 0; i < numSamplesWeNeed; i ++){
let newpAequor = pAequorFactory(i, mockUpStrand());
// while (!newpAequor.willLikelySurvive()){
// let newpAequor = pAequorFactory(i, mockUpStrand());
// }
pAequorArray.push(newpAequor);
};
// console.log(pAequorArray);
console.log(pAequorArray[0].dna);
console.log(pAequorArray[0].complementStrand());
// console.log(pAequor1.mutate());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment