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}