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 ==...