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);