Sobes.tech

Frontend

Come si può ottimizzare l'algoritmo di intersezione?

171

/** * Implementare il metodo times per un oggetto numerico. * La funzione deve accettare un callback e chiamarlo * un numero specificato di volte con l'indice dell'iterazione corrente. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Esempi console.clear(); (3).times(console.log) // 0 // 1 // 2

171

/** * È necessario scrivere una funzione asincrona, * che "dorma" per il numero di millisecondi specificato, * e poi si completi con successo */ function sleep(duration) { } // Esempio const startTime = Date.now(); console.log("Inizio del sonno..."); sleep(2000).then(() => { console.log("Svegliato dopo 2 secondi!"); console.log("Tempo trascorso: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Svegliato dopo 1 secondo!"); console.log("Tempo trascorso: ", Date.now() - startTime); });

171

C'è un albero su cui siedono scoiattoli e corvi. È necessario scrivere una funzione che trovi tutti gli scoiattoli sull'albero e ne restituisca i nomi. Risultato atteso: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].

171

/* Due liste ordinate con intervalli di presenza degli utenti online durante il giorno. L'inizio dell'intervallo è strettamente inferiore alla fine. Devi calcolare gli intervalli in cui entrambi gli utenti erano online. Gli intervalli sono indicati in ore, considerando che possono essere da 0 a 24. */ intersezione( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] intersezione( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function intersezione(utente1, utente2) { // inserisci il tuo codice qui }

168

Riscrivi la funzione strjoin senza usare parametri rest, usando invece l'oggetto arguments.

166

/** * È necessario scrivere una funzione strjoin, * che concatena le stringhe usando un separatore. */ function strjoin() { // codice qui } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'

166

/* Sono fornite tre sezioni di codice. È necessario scrivere il risultato di ogni console.log. */ var n = 1; function f(n) { n = 3; } f(n); console.log(n); // ?? // ---------------- var obj = { a: 1 }; function f1(o) { o.a = 5; } f1(obj); console.log(obj); // ?? // ---------------- var obj = { a: 1 }; function f2(o) { o = { hello: 1 }; } f2(obj);

166

Come cambieranno la complessità asintotica e il consumo di memoria nel compito camelCase → snake_case se il risultato viene costruito concatenando stringhe invece di un array di caratteri?

161

// È necessario implementare il metodo groupBy, che estende i metodi standard degli array. // Il metodo dovrebbe restituire una versione raggruppata dell'array - un oggetto, // in cui ogni chiave è il risultato dell'esecuzione della funzione passata fn(arr[i]), // e ogni valore è un array contenente tutti gli elementi dell'array originale con questa chiave. // codice qui // Esempio 1 const array1 = [ { id: 1 }, { id: 1 }, { id: 2 } ]; const fn = (item) => item.id; console.log(array1.groupBy(fn)); // { // 1: [{ id: 1 }, { id : 1 }], // 2: [{ id: 2 }] // } // Esempio 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Esempio 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }

160

Nel prototipo della rete pubblicitaria, la vendita di spazi pubblicitari è organizzata nel seguente modo: gli acquirenti indicano in anticipo il loro prezzo, e per ogni spazio pubblicitario rispondono se sono disposti ad acquistarlo o meno. È necessario implementare una funzione che, prima di vendere uno spazio pubblicitario, attenda l'approvazione o il rifiuto degli acquirenti con l'offerta più alta, e poi venda lo spazio all'acquirente con l'offerta più alta tra quelli che hanno accettato. La risposta della funzione deve essere il più veloce possibile. Deve restituire l'indice dell'acquirente. Esempi: Gli acquirenti offrono prezzi 1, 5, 10 L'acquirente con offerta 10 ha risposto con rifiuto L'acquirente con offerta 1 ha risposto con accettazione // Aspettiamo ancora, perché potrebbe rispondere l'acquirente con offerta 5 L'acquirente con offerta 5 ha risposto con accettazione // Scegliamo l'acquirente con offerta 5 ------------ Gli acquirenti offrono prezzi 1, 5, 10 L'acquirente con offerta 10 ha risposto con rifiuto L'acquirente con offerta 5 ha risposto con accettazione // Non aspettiamo la risposta dell'acquirente con offerta 1 - non verrà scelto ------------ Gli acquirenti offrono prezzi 1, 2 L'acquirente con offerta 1 ha risposto con rifiuto L'acquirente con offerta 2 ha risposto con rifiuto // Nessun acquirente viene scelto type Buyer = { price: number, accepts: () => Promise<boolean>, } async function bestBuyer(buyers) { const sorted = buyers.map((buyer, index) => ({buyer, index})) .sort((a, b) => a.buyer.price - b.buyer.price); const promise = sorted.map(({buyer}) => buyer.accepts()); for (let i = 0; i < sorted.length; i++) { const accepted = await promise[i]; if (accepted) { return sorted[i].index; } } if (await buyers[0].accepts()) { return 0; } return -1; }

160

// Ti viene fornita una stringa composta da lettere latine, spazi e segni di punteggiatura. // Una stringa si chiama pangramma se contiene almeno una volta ciascuna delle 26 lettere. Determina se la stringa è un pangramma. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // il tuo codice qui } console.log(isPangram(`A pangram or holoalphabetic sentence is a using every letter of a given alphabet at least once.`)); // => console.log(isPangram('Waltz, bad nymph, for quick jigs vex.'))

160

// e ogni valore è un array che contiene tutti gli elementi dell'array originale con questa chiave. // codice qui // Esempio 1 const array1 = [ { id: 1 }, { id: 1 }, { id: 2 } ]; const fn = (item) => item.id; console.log(array1.groupBy(fn)); // { // 1: [{ id: 1 }, { id: 1 }], // 2: [{ id: 2 }] // } // Esempio 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String));

159

Scrivi una funzione tries(n), che chiama la funzione aus fino a n volte: restituisce il primo risultato positivo e, se tutti i tentativi falliscono, solleva l'ultimo errore.

157

Perché non si può usare una funzione freccia per groupBy? Quale sarà this nella freccia?

157

Perché for...of viene evidenziato in rosso in TypeScript, mentre il normale for no?

156

Quali sono le limitazioni della visita ricorsiva di un albero? In cosa si differenzia la visita in profondità (DFS) da quella in ampiezza (BFS)? Come si può implementare una visita dell'albero senza ricorsione?

153

function any(promises) { // il tuo codice qui }

153

/* È necessario implementare il metodo intersection, che estende i metodi standard degli insiemi (Set). Il metodo prende un altro insieme come input e restituisce un nuovo insieme, che è l’intersezione dell’insieme originale e di quello passato, cioè, contiene solo gli elementi presenti in entrambi gli insiemi. */ // il tuo codice const set1 = new Set([1, 2, 3, 4]); const set2 = new Set([3, 4, 5, 6, 7, 8]); console.log(...set1.intersection(set2)) // 3 4 --- Set.prototype.intersection = function (set2) { const result = new Set(); for(const value of this) { if (set2.has(value)) result.add(value); } return result; } const set1 = new Set([1, 2, 3, 4]); const set2 = new Set([3, 4, 5, 6, 7, 8]); console.log(...set1.intersection(set2)) // 3 4

153
/7