xxxxxxxxxx
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
</style>
</head>
<body>
<svg width=300 height=300><circle cx=120 cy=120 r=100 style="fill:red" /></svg>
<script>
var circle = d3.select("circle")
var fail = false;
test_cinco_pra_cinco();
test_um_pra_um();
test_dois_pra_um();
test_dois_pra_dois();
test_tres_pra_dois();
test_quatro_pra_tres();
test_cinco_pra_tres();
test_quatro_pra_dois();
test_nome_conjunto_dois_um();
test_nome_conjunto_um_um();
test_soma_tres_pra_tres();
test_soma_quatro_pra_tres();
function combinar(mon, dsk) {
var sets = [];
var monitorPorDesktop = 1;
for (var i=0; i < dsk; i++) {
var monitoresUtilizados = d3.sum(sets, function(d) {return d.m});
var monitoresRestantes = mon - monitoresUtilizados;
var desktopsUtilizados = d3.sum(sets, function(d) {return d.d});
var desktopsRestantes = dsk - desktopsUtilizados;
if (mon > dsk && monitoresRestantes > desktopsRestantes) {
monitorPorDesktop = 2;
} else {
monitorPorDesktop = 1;
}
while (monitoresUtilizados + monitorPorDesktop > mon) {
monitorPorDesktop -= 1;
}
sets.push({m:monitorPorDesktop, d:1});
}
return sets;
}
function somar(sets) {
var soma = d3.nest()
.key(function(d) { return nomear(d);})
.rollup(function(d) {
return d.length})
.entries(sets);
var saida = {}
var i;
for (i in soma){
saida[soma[i].key] = soma[i].value;
}
return saida;
}
function nomear(conjunto) {
var nome = "m" + conjunto.m + "d" + conjunto.d;
if (conjunto.m == 2) {
nome = "m2d1";
}
return nome;
}
function test_nome_conjunto_um_um() {
var conjunto = {m: 1, d: 1};
var nome = nomear(conjunto);
if (nome != "m1d1") {
fail = true;
}
}
function test_nome_conjunto_dois_um() {
var conjunto = {m: 2, d: 1};
var nome = nomear(conjunto);
if (nome != "m2d1") {
fail = true;
}
}
function test_soma_tres_pra_tres() {
var sets = combinar(3, 3);
var somas = somar(sets);
if (JSON.stringify(somas) != '{"m1d1":3}') {
fail = true;
console.log("Falhou: test_soma_tres_pra_tres");
console.log(JSON.stringify(somas));
}
}
function test_soma_quatro_pra_tres() {
var sets = combinar(4, 3);
var somas = somar(sets);
if (JSON.stringify(somas) != '{"m2d1":1,"m1d1":2}') {
fail = true;
console.log("Falhou: test_soma_quatro_pra_tres");
console.log(JSON.stringify(somas));
}
}
function test_quatro_pra_tres(){
var sets = combinar(4, 3);
if (JSON.stringify(sets) != '[{"m":2,"d":1},{"m":1,"d":1},{"m":1,"d":1}]') {
fail = true;
console.log("Falhou: test_quatro_pra_tres");
console.log(JSON.stringify(sets));
}
}
function test_cinco_pra_tres(){
var sets = combinar(5, 3);
if (JSON.stringify(sets) != '[{"m":2,"d":1},{"m":2,"d":1},{"m":1,"d":1}]') {
fail = true;
console.log("Falhou: test_cinco_pra_tres");
}
}
function test_tres_pra_dois(){
var sets = combinar(3, 2);
if (JSON.stringify(sets) != '[{"m":2,"d":1},{"m":1,"d":1}]') {
fail = true;
console.log("Falhou: test_tres_pra_dois");
}
}
function test_quatro_pra_dois(){
var sets = combinar(4, 2);
if (JSON.stringify(sets) != '[{"m":2,"d":1},{"m":2,"d":1}]') {
fail = true;
console.log("Falhou: test_quatro_pra_dois");
}
}
function test_dois_pra_dois(){
var sets = combinar(2, 2);
if (JSON.stringify(sets) != '[{"m":1,"d":1},{"m":1,"d":1}]') {
fail = true;
console.log("Falhou: test_dois_pra_dois");
}
}
function test_dois_pra_um(){
var sets = combinar(2, 1);
if (JSON.stringify(sets) != '[{"m":2,"d":1}]') {
fail = true;
console.log("Falhou: test_dois_pra_um");
}
}
function test_um_pra_um(){
var sets = combinar(1, 1);
if (JSON.stringify(sets) != '[{"m":1,"d":1}]') {
fail = true;
console.log("Falhou: test_um_pra_um");
}
}
function test_cinco_pra_cinco(){
var mon = 5;
var dsk = 5;
var sets = combinar(mon, dsk);
if (JSON.stringify(sets) != '[{"m":1,"d":1},{"m":1,"d":1},{"m":1,"d":1},{"m":1,"d":1},{"m":1,"d":1}]') {
fail = true;
console.log("Falhou: test_cinco_pra_cinco");
}
}
if (! fail) {
light_success();
}
function light_success() {
circle.attr("style", "fill:green");
}
function light_fail() {
circle.attr("style", "fill:red");
}
</script>
</body>
https://d3js.org/d3.v4.min.js