cgbjp
by Niranjan Borawake
JavaScript
(function() {
const phaseCount = 3;
const stateCount = 3;
// const phases = [3, 1, 2];
// const states = [2, 2, 2];
const phases = [3, 1, 3];
const states = [3, 1, 3];
const areAllPhasesEmpty = (phases)=>{
return Math.max.apply(null, phases) === 0;
}
const getLastNonZeroIndeInStates = (states) => {
let lastNonZeroIndexInStates = -1;
for (let i = states.length - 1; i >= 0; i--) {
if (states[i] > 0) {
lastNonZeroIndexInStates = i;
break;
}
}
return lastNonZeroIndexInStates;
}
const canBJPWin = (phases,states)=>{
phases.sort((a,b)=>b - a);
states.sort((a,b)=>b - a);
let lastNonZeroIndexInStates = getLastNonZeroIndeInStates(states);
let partValue = states[lastNonZeroIndexInStates];
let partLength = lastNonZeroIndexInStates + 1;
let totalValue = 0;
let i = 0;
while (i < phases.length && lastNonZeroIndexInStates >= 0) {
for (let j = 0; j < partValue; j++) {
if (phases[i] > partLength) {
return false;
} else {
let slicePartLength = partLength;
while (phases[i] <= slicePartLength && slicePartLength > 0) {
slicePartLength -= phases[i];
phases[i] = 0;
i++;
if (i >= phases.length) {
let allPartsUtilised = true;
for (let i = 0; i <= lastNonZeroIndexInStates; i++) {
if (states[i] != totalValue + partValue) {
allPartsUtilised = false;
break;
}
}
return areAllPhasesEmpty(phases) && slicePartLength == 0 && j ==...