Geekup Notts

Parsing jobs

by Laura Kishimoto

JavaScript

function order(jobs) {
    if (!jobs) {
        return '';
    }
    else {
        var orderedjobs = '';

        jobs = splitomatic(jobs);

        while (jobs.length) {
            
            var unorderedjobs = [];

            for (i = 0; i < jobs.length; i++) {
                var deps = jobs[i][2];
                if (!deps) {
                    orderedjobs += jobs[i][0];
                } 
                else {
                    if (isready(orderedjobs, deps)) {
                        orderedjobs += jobs[i][0];
                    } 
                    else {
                        unorderedjobs.push(jobs[i]);
                    }
                }
            }
            jobs = unorderedjobs;
        }

        return orderedjobs;
    }
}

function splitomatic(stuff) {
    var result = [];
    var lines = stuff.split('\n');
    for (var i = 0; i < lines.length; i++) {
        result.push(lines[i].split(' '));
    }
    return result;
}

function isready(orderedjobs, deps) {

    for (j = 0; j < deps.length; j++) {
        if (orderedjobs.indexOf(deps[j]) == -1) {
            return false;
        }
    }
    return true;
    
}

var jobs = 'a => \nb => d\nc => \nd => a\ne => c\nf => c';

console.log(order(jobs));