-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathutils.ts
99 lines (90 loc) · 2.48 KB
/
utils.ts
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import { LegalList, MarketsList, PRandTeamList, SpecialList } from "./lists";
import { CardItem, DetailedCard } from "./types";
import {
PRandTeamUpgradeCosts,
LegalUpgradeCosts,
SpecialUpgradeCosts,
MarketsUpgradeCosts,
} from "./upgradeValues";
const getListByType = (type: CardItem["type"]) => {
switch (type) {
case "PR&Team":
return PRandTeamList;
case "Legal":
return LegalList;
case "Special":
return SpecialList;
case "Markets":
return MarketsList;
}
};
const getUpgradeValuesByType = (type: CardItem["type"]) => {
switch (type) {
case "PR&Team":
return PRandTeamUpgradeCosts;
case "Legal":
return LegalUpgradeCosts;
case "Special":
return SpecialUpgradeCosts;
case "Markets":
return MarketsUpgradeCosts;
}
};
const mergeListWithUpgradeValues = (
type: CardItem["type"],
withoutSecondList = false
) => {
const list = getListByType(type);
const upgradeValues = getUpgradeValuesByType(type);
if (list.length !== upgradeValues.length) {
throw new Error(
`list.length: ${list.length}, fastUpdateValues.length: ${upgradeValues.length}`
);
}
if (withoutSecondList) {
return list;
}
const updatedList = list.map((item, index) => {
const fastUpdateValue = upgradeValues[index];
return {
...item,
costToUpgrade: fastUpdateValue.costToUpgrade,
};
});
return updatedList;
};
const allTypes = ["Markets", "PR&Team", "Legal", "Special"] as const;
const getAllCards = () =>
allTypes.reduce((prev, cur) => {
const updatedList = mergeListWithUpgradeValues(cur, true);
prev.push(...updatedList);
return prev;
}, [] as CardItem[]);
const calcWorthToUpdate = (item: CardItem) => {
const { costToUpgrade, extraProfitPerHour } = item;
const worth = extraProfitPerHour / costToUpgrade;
return worth;
};
export const sortByWorthToUpdate = () => {
const allCards = getAllCards();
const copy = [...allCards];
const sortedCards = copy.sort((a, b) => {
const aWorth = calcWorthToUpdate(a);
const bWorth = calcWorthToUpdate(b);
return bWorth - aWorth;
});
const detailedCards: DetailedCard[] = sortedCards.map((item) => {
const worth = calcWorthToUpdate(item);
const hours = 1 / worth;
const days = hours / 24;
const timeToReturnString = `${hours.toFixed(3)} hours or ${days.toFixed(
3
)} days`;
return {
...item,
worth,
timeToReturnMoney: timeToReturnString,
};
});
return detailedCards;
};