function checkHandValid(vec, actions, headActions, appliedActions = []) {
if (isVecEmpty(vec)) {
return [true, appliedActions];
}
const availActions = possibleActions(vec, actions);
const availHeadActions =
headActions != null ? possibleActions(vec, headActions) : [];
for (let i = 0; i < availActions.length; i++) {
const action = availActions[i];
const aplVec = applyAction(vec, action);
const [res, resAppliedActions] = checkHandValid(
aplVec,
actions,
headActions,
[...appliedActions, action]
);
if (res) {
return [res, resAppliedActions];
}
}
for (let i = 0; i < availHeadActions.length; i++) {
const action = availHeadActions[i];
const aplVec = applyAction(vec, action);
const [res, resAppliedActions] = checkHandValid(aplVec, actions, null, [
...appliedActions,
action
]);
if (res) {
return [res, resAppliedActions];
}
}
return [false, appliedActions];
}