Naposledy aktivní 1 day ago

curiouser's Avatar Winston Hoy revidoval tento gist 4 years ago. Přejít na revizi

1 file changed, 65 insertions

carPriceNormalizer.mjs(vytvořil soubor)

@@ -0,0 +1,65 @@
1 + #!/usr/bin/env node
2 +
3 + const currentYear = new Date().getFullYear();
4 +
5 + const adjustments = {
6 + exteriorColor: {
7 + black: 1000,
8 + blue: -500,
9 + burgundy: 500,
10 + charcoal: 500,
11 + deepBlue: 250,
12 + silver: 0,
13 + white: 250,
14 + },
15 + interiorColor: {
16 + dark: 0,
17 + light: 500,
18 + mixed: -250,
19 + },
20 + miles: [ 5000, 150 ],
21 + year: [ 1, 750 ],
22 + };
23 +
24 + const benchmark = {
25 + exteriorColor: 'silver',
26 + interiorColor: 'dark',
27 + miles: 100000,
28 + price: 10357,
29 + year: 2016,
30 + };
31 +
32 + const [ price, year, miles, exteriorColor, interiorColor ] = process.argv.slice(2);
33 + // args list length
34 + if (process.argv.slice(2).length !== 5) {
35 + throw new Error(`Expected exactly 5 args, found ${process.argv.slice(2).length}`);
36 + }
37 + // 1st 3 args should be numbers
38 + [ price, year, miles ].forEach((number, i) => {
39 + if (isNaN(number)) {
40 + throw new Error(`arg #${number + 1} should be number`);
41 + }
42 + });
43 + // 4th arg should be enumerated
44 + if (!Object.keys(adjustments.exteriorColor).includes(exteriorColor)) {
45 + throw new Error(`4th arg (exteriorColor) must be in list ${Object.keys(adjustments.exteriorColor).join(', ')}`);
46 + }
47 + // 5th arg should be enumerated
48 + if (!Object.keys(adjustments.interiorColor).includes(interiorColor)) {
49 + throw new Error(`5th arg (interiorColor) must be in list ${Object.keys(adjustments.interiorColor).join(', ')}`);
50 + }
51 +
52 + const benchYearsOld = currentYear - benchmark.year;
53 + const yearsOld = currentYear - Number(year);
54 +
55 + function calcAdjustment (benchValue, value, [ quantifier, valueAdjustment ] = [ 1, 1 ]) {
56 + return (Number(value) - benchValue) / quantifier * valueAdjustment;
57 + }
58 +
59 + let adjustedPrice = Number(price);
60 + adjustedPrice += calcAdjustment(benchmark.miles, miles, adjustments.miles);
61 + adjustedPrice += calcAdjustment(benchYearsOld, yearsOld, adjustments.year);
62 + adjustedPrice += calcAdjustment(0, adjustments.exteriorColor[exteriorColor]);
63 + adjustedPrice += calcAdjustment(0, adjustments.interiorColor[interiorColor]);
64 +
65 + console.log(adjustedPrice);
Novější Starší