Skip to content

Instantly share code, notes, and snippets.

@joshuakfarrar
Created April 18, 2019 15:43
Show Gist options
  • Save joshuakfarrar/e76cec0057c9744536398cc15f060965 to your computer and use it in GitHub Desktop.
Save joshuakfarrar/e76cec0057c9744536398cc15f060965 to your computer and use it in GitHub Desktop.
function calc(users) {
return _.reduce(_.map(users, (user) => {
return _.reduce(_.map(user.puzzles, (puzzle) => {
return {
puzzleId: puzzle.puzzleId,
errors: _.reduce(puzzle.moves, (acc, move) => {
if (move.isValid) return acc;
else {
var fromState = _.get(move, 'fromState');
return _.merge({}, acc, { [fromState]: _.concat((_.get(acc, fromState) || []), move.toState) });
}
}, {})
};
}), (report, session) => {
return _.merge({}, report, {
[session.puzzleId]: _.reduce(_.union(Object.keys(session.errors), Object.keys((report[session.puzzleId] || {}))), (acc, key) => {
return _.set(acc, key, _.concat((_.get(report, `${session.puzzleId}.${key}`) || []), (_.get(session, `errors.${key}`) || [])))
}, {})
});
}, {});
}), (report, user) => {
return _.reduce(_.union(Object.keys((user || {})), Object.keys(report)), (acc, key) => {
return _.set(acc, key, _.merge((_.get(report, key) || {}), (_.get(user, key))));
}, {});
}, {});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment