/** * Implementujte metódu times pre číselného objektu. * Funkcia by mala prijať callback a volať ho * stanovený počet krát s indexom aktuálnej iterácie. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Príklady console.clear(); (3).times(console.log) // 0 // 1 // 2
Frontend
Ako optimalizovať algoritmus prieniku?
Čo sa vám páči a čo sa vám nepáči na práci v spoločnosti?
Na strome sedia veverice a vrany. Je potrebné napísať funkciu, ktorá nájde všetky veverice na strome a vráti ich mená. Očakávaný výsledok: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
/* Tri sekcie kódu sú dané. Je potrebné napísať výsledok každého 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);
/* Dva zoradené zoznamy s intervalmi prítomnosti používateľov online počas dňa sú dané. Začiatok intervalu je prísne menší ako koniec. Je potrebné vypočítať intervaly, keď obaja používatelia boli online. Intervaly sú uvedené v hodinách, pričom môžu byť od 0 do 24. */ prienik( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] prienik( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function prienik(uzivatel1, uzivatel2) { // napíšte svoj kód sem }
Ako dlho pracujete v spoločnosti?
/** * Je potrebné napísať funkciu strjoin, * ktorá spája reťazce pomocou oddeľovača. */ function strjoin() { // kód sem } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'
Ako sa zloženosť asimptotická a spotreba pamäte v úlohe camelCase → snake_case zmení, ak sa výsledok skladá spojením reťazcov namiesto poľa znakov?
Prečo je for...of zvýraznené červenou v TypeScript, zatiaľ čo bežný for nie?
Prepišite funkcijo strjoin brez uporabe rest-parametrov, namesto njih uporabite objekt arguments.
Implementujte metódu Array.prototype.groupBy, ktorá vracia štruktúrovanú verziu poľa objektov, kde je každý kľúč výsledkom volania odovzdanej funkcie a hodnota je pole prvkov zodpovedajúcich tomuto kľúču.
// Je potrebné implementovať metódu groupBy, ktorá rozširuje štandardné metódy polí. // Metóda by mala vracať skupinovanú verziu poľa - objekt, // v ktorom je každý kľúč výsledkom vykonania predanej funkcie fn(arr[i]), // a každá hodnota je pole obsahujúce všetky prvky pôvodného poľa s týmto kľúčom. // kód tu // Príklad 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 }] // } // Príklad 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Príklad 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }
Napíšte funkciu tries(n), ktorá volá funkciu aus až n krát: vráti prvý úspešný výsledok, a ak všetky pokusy zlyhajú, vyhodí poslednú chybu.
Prečo nie je možné použiť šípkovú funkciu pre groupBy? Čo bude this v šípke?
// Dostanete reťazec zložený z latinských písmen, medzier a interpunkcie. // Reťazec sa nazýva pangram, ak obsahuje aspoň raz každé z 26 písmen. Určite, či je reťazec pangram. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // váš kód tu } 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.'))
V prototypu reklamnej siete predaj umiestnení reklám funguje nasledovne: kupujúci vopred uvádzajú svoju cenu a na každé reklamné miesto odpovedajú, či sú ochotní ho kúpiť alebo nie. Je potrebné implementovať funkciu, ktorá pred predajom reklamného miesta bude čakať na súhlas alebo odmietnutie kupujúcich s najvyššou ponukou, a potom predá reklamné miesto kupujúcemu s najvyššou ponukou medzi tými, ktorí súhlasili. Odpoveď z funkcie je potrebné vrátiť čo najrýchlejšie. Je potrebné vrátiť index kupujúceho. Príklady: Kupujúci ponúkajú ceny 1, 5, 10 Kupujúci s ponukou 10 odmietol Kupujúci s ponukou 1 súhlasil // Ešte čakáme, pretože môže odpovedať kupujúci s cenou 5 Kupujúci s ponukou 5 súhlasil // Vyberáme kupujúceho s ponukou 5 ------------ Kupujúci ponúkajú ceny 1, 5, 10 Kupujúci s ponukou 10 odmietol Kupujúci s ponukou 5 súhlasil // Nečakáme na odpoveď od kupujúceho s ponukou 1 - určite nebude vybraný ------------ Kupujúci ponúkajú ceny 1, 2 Kupujúci s ponukou 1 odmietol Kupujúci s ponukou 2 odmietol // Nevyberáme nikoho interface 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; }
function any(promises) { // tvoj kód tu }
// a každá hodnota je pole obsahujúce všetky prvky pôvodného poľa s týmto kľúčom. // kód tu // Príklad 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 }] // } // Príklad 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String));
Aké sú obmedzenia rekurzívneho prechodu stromom? Čo sa líši od prechodu do hĺbky (DFS) od prechodu do šírky (BFS)? Ako možno implementovať prechod stromom bez rekurzie?