People Distribution

Distribution system based on people preferences, and available positions

by António Almeida

HTML

<div id="choices-title"><p>Choices:</p></div>
<div id="results-title"><p>Results:</p></div>
<div id="choices"></div>
<div id="results"></div>

CSS

body {
    width: 800px;
}
#results, #choices, #results-title, #choices-title {
    background-color: #DDF;
    float: left;
    margin: 5px;
}
#results, #results-title { width: 250px; }
#choices, #choices-title { width: 400px; }

p {
    font-family: "Trebuchet MS";
    font-size: 12px;
    line-height: 18px;
}

.name {
    font-weight: bold;
    color: #777;
}

div {
  padding: 4px 10px;
}

JavaScript

var locais = new Array(
    {"name": "Porto",		"positions": 2},
    {"name": "Lisboa",	"positions": 1},
    {"name": "Gaia",		"positions": 1},
    {"name": "Feira",		"positions": 1}
);

var alunos = {
    "Ana":         [4, 1, 2, 3],
    "Rita":        [4, 3, 1, 2],
    "Joao":        [1, 2],
    "Juliana":     [3, 4, 1, 2]
};

var distribuicao = {}, done = false;
$.each(alunos, function(key, value) {
    done = false;
    $.each(value, function(subkey, subvalue) {
        if(locais[subvalue-1]["positions"] > 0 && !done) {
            locais[subvalue-1]["positions"]--;
            distribuicao[key] = locais[subvalue-1]["name"];
            done = true;
        }
    });
});

$.each(alunos, function(key, value) {
    var places = "";
    for(var i=0 ; i<value.length ; i++) 
        places += locais[value[i]-1]["name"] + ", ";
    $("#choices").append("<p><span class='name'>"+key+"</span> - <span>"+places+"</span></p>")
});

$.each(distribuicao, function(key, value) {
    $("#results").append("<p><span class='name'>"+key+"</span> - <span>"+value+"</span></p>")
});

console.log(distribuicao);