|
@@ -12,9 +12,29 @@ const fixFloat = (number, x=3) => {
|
|
|
return parseFloat(number.toFixed(x));
|
|
return parseFloat(number.toFixed(x));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const getSolutionWithIors = (params) => {
|
|
|
|
|
- Logs.outDev('getGameSolution', params);
|
|
|
|
|
|
|
+const getSolutionWithIors = async(params) => {
|
|
|
const { iors, cross_type, base_stake } = params;
|
|
const { iors, cross_type, base_stake } = params;
|
|
|
|
|
+ if (typeof params !== 'object' || params === null || Array.isArray(params)) {
|
|
|
|
|
+ return Promise.reject(new Error('params must be an object'));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!Array.isArray(iors) || iors.length < 2) {
|
|
|
|
|
+ return Promise.reject(new Error('iors must be an array and length must be greater than 2'));
|
|
|
|
|
+ }
|
|
|
|
|
+ iors.forEach(item => {
|
|
|
|
|
+ if (typeof item.v !== 'number' || !Number.isFinite(item.v)) {
|
|
|
|
|
+ return Promise.reject(new Error('iors must be an array of numbers'));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (item.v <= 1) {
|
|
|
|
|
+ return Promise.reject(new Error('iors must be an array of numbers greater than 1'));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ if (typeof cross_type !== 'string' || cross_type.length === 0) {
|
|
|
|
|
+ return Promise.reject(new Error('cross_type must be a non-empty string'));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (typeof base_stake !== 'number' || !Number.isFinite(base_stake) || base_stake <= 0) {
|
|
|
|
|
+ return Promise.reject(new Error('base_stake must be a positive number'));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
const base_index = iors.reduce((minIdx, cur, idx) => cur.v < iors[minIdx].v ? idx : minIdx, 0);
|
|
const base_index = iors.reduce((minIdx, cur, idx) => cur.v < iors[minIdx].v ? idx : minIdx, 0);
|
|
|
if (iors.length === 2) {
|
|
if (iors.length === 2) {
|
|
|
iors.push({ v: 1 });
|
|
iors.push({ v: 1 });
|