UNPKG

genshin-artifact-simulator

Version:
159 lines 7.9 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var lodash_1 = __importDefault(require("lodash")); var artifactMatchesCriteria_1 = __importDefault(require("./artifactMatchesCriteria")); var rateRemainingArtifactDifficulty = function (_a) { var remainingArtifactSlotsCriteria = _a.remainingArtifactSlotsCriteria; // TODO: Probably want to make this more advanced. return lodash_1.default.size(remainingArtifactSlotsCriteria); }; var getNumArtifactsRequiredForSetCriteria = function (_a) { var artifactSetsCriteria = _a.artifactSetsCriteria; return lodash_1.default.sum(lodash_1.default.map(artifactSetsCriteria, function (setCriteria) { return setCriteria.setBonus; })); }; var getNumArtifactsFoundNotForSetCriteria = function (_a) { var artifactSetsCriteria = _a.artifactSetsCriteria, artifactSetCounts = _a.artifactSetCounts; return lodash_1.default.sum(lodash_1.default.map(artifactSetCounts, function (setCount) { return lodash_1.default.find(artifactSetsCriteria, function (setCriteria) { return setCriteria.setKey === setCount.key; }) ? 0 : setCount.count; })); }; var updateArtifactSetCount = function (_a) { var artifact = _a.artifact, artifactSetCounts = _a.artifactSetCounts; var setCount = lodash_1.default.find(artifactSetCounts, function (setCount) { return setCount.key === artifact.setKey; }); if (!setCount) { setCount = { key: artifact.setKey, count: 0 }; artifactSetCounts.push(setCount); } setCount.count += 1; }; var findRemainingArtifacts = function (_a) { var artifacts = _a.artifacts, artifactSlotsCriteria = _a.artifactSlotsCriteria, artifactSetsCriteria = _a.artifactSetsCriteria, _b = _a.artifactSetCounts, artifactSetCounts = _b === void 0 ? [] : _b, numTotalArtifactSlotsCriteria = _a.numTotalArtifactSlotsCriteria, _c = _a.includeNoSet, includeNoSet = _c === void 0 ? false : _c; if (lodash_1.default.size(artifactSlotsCriteria) === 0) { return { artifacts: [], missingArtifactSlotsCriteria: [] }; } var currentArtifactSlotCriteria = lodash_1.default.head(artifactSlotsCriteria); var remainingArtifactSlotsCriteria = lodash_1.default.tail(artifactSlotsCriteria); var results = lodash_1.default.filter(lodash_1.default.map(artifactSetsCriteria, function (setCriteria) { if (artifactSetCounts[setCriteria.setKey] === setCriteria.setBonus) { return; } var artifact = lodash_1.default.find(artifacts, function (artifact) { return (0, artifactMatchesCriteria_1.default)({ artifact: artifact, artifactSlotCriteria: currentArtifactSlotCriteria, setKey: setCriteria.setKey, }); }); if (artifact) { updateArtifactSetCount({ artifact: artifact, artifactSetCounts: artifactSetCounts }); } var remainingArtifacts = findRemainingArtifacts({ artifacts: artifacts, artifactSlotsCriteria: remainingArtifactSlotsCriteria, artifactSetsCriteria: artifactSetsCriteria, artifactSetCounts: lodash_1.default.cloneDeep(artifactSetCounts), numTotalArtifactSlotsCriteria: numTotalArtifactSlotsCriteria, includeNoSet: includeNoSet, }); if (artifact) { return { artifacts: __spreadArray([artifact], remainingArtifacts.artifacts, true), missingArtifactSlotsCriteria: remainingArtifacts.missingArtifactSlotsCriteria, }; } return { artifacts: remainingArtifacts.artifacts, missingArtifactSlotsCriteria: __spreadArray([ currentArtifactSlotCriteria ], remainingArtifacts.missingArtifactSlotsCriteria, true), }; }), function (result) { return !lodash_1.default.isNil(result); }); if (numTotalArtifactSlotsCriteria - getNumArtifactsRequiredForSetCriteria({ artifactSetsCriteria: artifactSetsCriteria }) > getNumArtifactsFoundNotForSetCriteria({ artifactSetsCriteria: artifactSetsCriteria, artifactSetCounts: artifactSetCounts, })) { var artifact = void 0; if (includeNoSet) { artifact = lodash_1.default.find(artifacts, function (artifact) { return (0, artifactMatchesCriteria_1.default)({ artifact: artifact, artifactSlotCriteria: currentArtifactSlotCriteria, }); }); } if (artifact) { updateArtifactSetCount({ artifact: artifact, artifactSetCounts: artifactSetCounts }); } var remainingArtifacts = findRemainingArtifacts({ artifacts: artifacts, artifactSlotsCriteria: remainingArtifactSlotsCriteria, artifactSetsCriteria: artifactSetsCriteria, artifactSetCounts: lodash_1.default.cloneDeep(artifactSetCounts), numTotalArtifactSlotsCriteria: numTotalArtifactSlotsCriteria, includeNoSet: includeNoSet, }); if (artifact) { results.push({ artifacts: __spreadArray([artifact], remainingArtifacts.artifacts, true), missingArtifactSlotsCriteria: remainingArtifacts.missingArtifactSlotsCriteria, }); } else { results.push({ artifacts: remainingArtifacts.artifacts, missingArtifactSlotsCriteria: __spreadArray([ currentArtifactSlotCriteria ], remainingArtifacts.missingArtifactSlotsCriteria, true), }); } } var result = lodash_1.default.minBy(results, function (result) { return rateRemainingArtifactDifficulty({ remainingArtifactSlotsCriteria: result.missingArtifactSlotsCriteria, }); }); return result; }; var findMatchingArtifacts = function (_a) { var build = _a.build, artifacts = _a.artifacts; var matchingArtifactsResult = findRemainingArtifacts({ artifacts: lodash_1.default.filter(artifacts, function (artifact) { return !artifact.build || artifact.build.id === build.id; }), artifactSlotsCriteria: build.slotsCriteria, artifactSetsCriteria: build.setsCriteria, numTotalArtifactSlotsCriteria: build.slotsCriteria.length, }); if (matchingArtifactsResult.artifacts.length === getNumArtifactsRequiredForSetCriteria({ artifactSetsCriteria: build.setsCriteria, })) { matchingArtifactsResult = findRemainingArtifacts({ artifacts: lodash_1.default.filter(artifacts, function (artifact) { return !artifact.build || artifact.build.id === build.id; }), artifactSlotsCriteria: build.slotsCriteria, artifactSetsCriteria: build.setsCriteria, numTotalArtifactSlotsCriteria: build.slotsCriteria.length, includeNoSet: true, }); } lodash_1.default.forEach(matchingArtifactsResult.artifacts, function (artifact) { return (artifact.build = build); }); build.artifacts = matchingArtifactsResult.artifacts; build.missingSlotsCriteria = matchingArtifactsResult.missingArtifactSlotsCriteria; }; exports.default = findMatchingArtifacts; //# sourceMappingURL=findMatchingArtifacts.js.map