3 minutes
03 - Compito in classe
Per completezza, si rimanda al primo post del sito per ulteriori informazioni.
Si ricorda che dello stesso esercizio possono esistere più varianti.
Esercizio 03.1 - Array
Si scriva una funzione calcola(a) che, dato un array di interi a, restituisca la somma dei quadrati degli elementi di a.
function calcola(a) {
let sum = 0;
for (let i in a)
sum += a[i]**2;
return sum;
}
// calcola([-21,32,0,99,101,101,2,76,22,1349]) → 1857733
// calcola([0,0,12,-66,9]) → 4581
// calcola([1,2,3,4,5,6]) → 91
Esercizio 03.2 - Elimina elementi
Si scriva una funzione cancellaConSoglia(a,n) che dato un array di interi a e un intero n, rimuova da a tutti gli elementi ≤ (minori di o uguali a) n e restituisca l’array risultante.
function cancellaConSoglia(a,n) {
return a.filter((elem) => (elem > n));
}
// cancellaConSoglia([-21,32,0,99,101,101,2,76,22,1349],101) → [1349]
// cancellaConSoglia([0,0,12,-66,9],0) → [12,9]
// cancellaConSoglia([1,2,3,4,5,6],3) → [4,5,6]
Esercizio 03.3 - Band of Brothers
Si scriva una funzione contaCoppia(T,val1,val2) che dato un albero binario T (i cui nodi sono implementati come visto a lezione come oggetti con chiavi val, sx e dx) e due numeri val1 e val2, restituisca il numero di coppie di nodi fratelli tali che il fratello destro abbia val uguale a val1 e quello sinistro abbia val uguale a val2. Due nodi sono fratelli se sono figli dello stesso nodo padre. Si faccia attenzione a conteggiare le coppie che soddisfano la condizione, non il numero dei nodi (che sarebbe ovviamente il doppio rispetto al numero di coppie).
function contaCoppia(T,val1,val2) {
if (T == undefined || (!T.sx && !T.dx))
return 0;
if (T.sx && T.dx)
return (T.sx.val == val2 && T.dx.val == val1 ? 1 : 0) + contaCoppia(T.sx,val1,val2) + contaCoppia(T.dx,val1,val2);
if (T.sx && !T.dx)
return contaCoppia(T.sx,val1,val2);
else
return contaCoppia(T.dx,val1,val2);
}
// contaCoppia({val:7,sx:{val: 4, sx: {val: 3}, dx: {val:12, sx: {val: 4, dx:{val:3}, sx:{val: 8}}}}, dx:{val: 11, dx: {val: 3}, sx: {val:8, sx: {val: 6}}}},12,3) → 1
// contaCoppia({val:7,sx:{val: 4, sx: {val: 3}, dx: {val:12, sx: {val: 4, dx:{val:3}, sx:{val: 8}}}}, dx:{val: 11, dx: {val: 3}, sx: {val:8, sx: {val: 6}}}},3,8) → 2
Esercizio 03.4 - Blue Tuesday
Si scriva una funzione rudyGiuliani(trump,biden,votiLegali) che dati 3 insiemi (trump, biden e votiLegali) rappresentati come oggetti, restituisca (con la stessa rappresentazione) l’insieme contenente sia gli elementi di votiLegali presenti in trump ma non appartenenti a biden che gli elementi di votiLegali presenti in biden ma non appartenenti a trump.
function rudyGiuliani(trump,biden,votiLegali) {
let obj = {};
// elementi di votiLegali presenti in trump ma non appartenenti a biden
for (let elem in votiLegali) {
if (elem in trump && !(elem in biden))
obj[elem] = votiLegali[elem];
}
// elementi di votiLegali presenti in biden ma non appartenenti a trump
for (let elem in votiLegali) {
if (elem in biden && !(elem in trump))
obj[elem] = votiLegali[elem];
}
return obj;
}
trump = {'forcoli':1,'lacalifornia':1,'frittole':1,'freddana':1,'bugliano':1,'newfollonica':1}
biden = {'calafuria':1,'pappiana':1,'forcoli':1,'lacalifornia':1,'massachuccoli':1,'lajatico':1,'newfollonica':1}
votiLegali = {'calafuria':1,'pappiana':1,'forcoli':1,'massachuccoli':1,'larderello':1,'lajatico':1,'frittole':1,'freddana':1,'bugliano':1,'orentano':1,'newfollonica':1}
rudyGiuliani(trump,biden,votiLegali) // → {'calafuria':1, 'pappiana':1, 'massachuccoli':1, 'lajatico':1, 'frittole':1, 'freddana':1, 'bugliano':1}