Created
December 1, 2017 05:11
-
-
Save ChuckJonas/fe3b96d78cd008f8b012b2408b59a5f4 to your computer and use it in GitHub Desktop.
Generic Skill Challenge
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//an alternate (and perhaps better approach) | |
interface IWeightedItem{ | |
weight: number | |
} | |
interface Grade extends IWeightedItem{ | |
score: number; | |
} | |
interface Product extends IWeightedItem{ | |
price: number; | |
} | |
enum HitType { | |
noHitter, | |
single, | |
double, | |
triple, | |
homerun | |
} | |
interface BaseballHitRecord extends IWeightedItem{ | |
hit: HitType | |
} | |
const weightedAverage = <T extends IWeightedItem>(arr: T[], valueSelector: (item: T) => number) => { | |
let totalWeight = 0; | |
let totalValue = 0; | |
for (let item of arr) { | |
totalWeight += item.weight; | |
totalValue += item.weight * valueSelector(item); | |
} | |
return totalValue / totalWeight; | |
} | |
let grades: Grade[] = [ | |
{ | |
weight: 3, | |
score: 100 | |
}, | |
{ | |
weight: 1, | |
score: 60 | |
}, | |
{ | |
weight: 1, | |
score: 20 | |
}, | |
{ | |
weight: 1, | |
score: 40 | |
}, | |
]; | |
const test = (value: number, expected: number) => { | |
if (value === expected) { | |
alert('pass!') | |
} else { | |
alert('fail!') | |
} | |
} | |
let weightedGrades = weightedAverage(grades, (grade) => grade.score); | |
test(weightedGrades, 70); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment