Sobes.tech

Frontend

/** * Неопходно је написати асинхрону функцију, * која ће "спавати" задати број милисекунди, * а затим успешно завршити */ function sleep(duration) { } // Пример const startTime = Date.now(); console.log("Почетак спавања..."); sleep(2000).then(() => { console.log("Пробудио се после 2 секунде!"); console.log("Прошао време: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Пробудио се после 1 секунде!"); console.log("Прошао време: ", Date.now() - startTime); });

171

/** * Implementirajte metodu times za numerički objekat. * Funkcija treba da prihvati callback i da ga pozove * određen broj puta sa indeksom trenutne iteracije. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Primeri console.clear(); (3).times(console.log) // 0 // 1 // 2

171

Na stablu sede vjeverice i vrane. Potrebno je napisati funkciju koja pronalazi sve vjeverice na stablu i vraća njihova imena. Očekivani rezultat: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].

171

Колико дуго радите у компанији?

169

/* Dva sortirana spiska sa intervalima prisustva korisnika na mreži tokom dana su data. Početak intervala je strogo manji od kraja. Potrebno je izračunati intervale kada su oba korisnika bila na mreži. Intervali su navedeni u satima, uz pretpostavku da mogu biti od 0 do 24. */ presek( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] presek( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function presek(korisnik1, korisnik2) { // napišite svoj kod ovde }

168

/** * Potrebno je napisati funkciju strjoin, * koja spaja stringove kroz separator. */ function strjoin() { // kod ovde } 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

Prepišite funkciju strjoin bez korišćenja rest-parametara, koristeći umesto njih objekat arguments.

166

/* Daju su tri sekcije koda. Potrebno je da napišete rezultat svakog 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

Kako će se promeniti asimptotska složenost i potrošnja memorije u zadatku camelCase → snake_case ako se rezultat sastavlja konkatenacijom stringova umesto niza karaktera?

161

// Неопходно је имплементирати метод groupBy, који проширује стандардне методе низа. // Метод треба да врати груписану верзију низа - објекат, // у којем је сваки кључ резултат извршавања прослеђене функције fn(arr[i]), // а свака вредност је низ који садржи све елементе оригиналног низа са тим кључем. // код овде // Пример 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 }] // } // Пример 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Пример 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }

160

У прототипу продајне мреже за рекламе, продаја рекламних места организована је на следећи начин: купци унапред наведе своју цену, а за свако рекламно место одговарају да ли су спремни да га купе или не. Потребно је имплементирати функцију која, пре продаје рекламног места, чека сагласност или одбијање купаца са највишом понудом, а затим продаје рекламно место купцу са највишом понудом међу онима који су дали сагласност. Одговор функције треба да буде што брже могуће. Треба вратити индекс купца. Примери: Купци нуде цене 1, 5, 10 Купац са понудом 10 одговорио је одбијањем Купац са понудом 1 одговорио је сагласношћу // Још увек чекамо, јер може одговорити купац са понудом 5 Купац са понудом 5 одговорио је сагласношћу // Изабраћемо купца са понудом 5 ------------ Купци нуде цене 1, 5, 10 Купац са понудом 10 одговорио је одбијањем Купац са понудом 5 одговорио је сагласношћу // Не чекамо одговор од купца са понудом 1 - он сигурно неће бити изабран ------------ Купци нуде цене 1, 2 Купац са понудом 1 одговорио је одбијањем Купац са понудом 2 одговорио је одбијањем // Не изабира се ниједан купац 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

// Dobijate niz sastavljen od latiničnih slova, razmaka i interpunkcijskih znakova. // Niz se naziva pangram ako sadrži bar jednom svako od 26 slova. Odredite da li je niz pangram. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // vaš kod ovde } 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

Napišite funkciju tries(n), koja poziva funkciju aus do n puta: vraća prvi uspešan rezultat, a ako svi pokušaji završe greškom — baca poslednju grešku.

159

// и свака вредност је низ који садржи све елементе оригиналног низа са овим кључем. // код овде // Пример 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 }] // } // Пример 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String));

159

Zašto ne može da se koristi streličasta funkcija za groupBy? Šta će biti this u strelici?

157

Zašto je for...of označen crvenom bojom u TypeScript-u, a običan for nije?

156

Koja su ograničenja rekurzivnog obilaska stabla? Čime se razlikuje obilazak u dubinu (DFS) od obilaska u širinu (BFS)? Kako se može implementirati obilazak stabla bez rekurzije?

155

function any(promises) { // ваш код овде }

153

/* Необходимо реализовать метод intersection, расширяющий стандартные методы множеств (Set). Метод принимает на вход другое множество и возвращает новое множество, являющееся пересечением исходного и переданного множеств, т.е. содержит только те элементы, которые присутствуют в обеих множествах. */ // ваш код 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