DEV Community

Discussion on: Daily Challenge #155 - Royal Arranged Marriages

Collapse
 
bamartindev profile image
Brett Martin

JavaScript before trying to refactor:

const marry = (queens, kings) => {
    const engagements = new Array(queens.length).fill({engaged: false, fiance: -1, preference: Infinity});
    const kingsEngaged = new Array(kings.length).fill(false);

    let i = 0;
    while(true) {
        if (kingsEngaged[i]) continue;
        for (let j = 0; j < queens.length; j++) {
            let currentStatus = engagements[j];
            let preference = queens[j].findIndex(id => id === i);

            if (currentStatus.fiance === -1) {
                kingsEngaged[i] = true;
                engagements[j] = {engaged: true, fiance: i, preference };
                break;
            } else {
                if (preference < currentStatus.preference) {
                    kingsEngaged[currentStatus.fiance] = false;
                    kingsEngaged[i] = true;
                    engagements[j] = {engaged: true, fiance: i, preference };
                    break;
                }
            }
        }

        if (kingsEngaged.every(k => k)) break;
        i = (i + 1) % kings.length;
    }

    return engagements.map(status => status.fiance);
};