/** * Izpildiet times metodi skaitliskajam objektam. * Funkcija jāņem callback un jāizsauc * noteikts reižu skaits ar pašreizējās iterācijas indeksu. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Piemēri console.clear(); (3).times(console.log) // 0 // 1 // 2
Frontend
Kas jums patīk un kas nepatīk jūsu darbā uzņēmumā?
Kā optimizēt sadursmes algoritmu?
/** * Nepieciešams uzrakstīt funkciju strjoin, * kas savieno virknes ar atdalītāju. */ function strjoin() { // kods šeit } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'
Ir koks koks, kurā sēž peles un vārnas. Ir nepieciešams uzrakstīt funkciju, kas atrod visus peles kokā un atgriež to vārdus. Sagaidāmais rezultāts: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
/* Trīs koda daļas ir dotas. Jāuzraksta katra console.log rezultāts. */ 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);
Kā mainīsies asymptotiskā sarežģītība un atmiņas patēriņš uzdevumā camelCase → snake_case, ja rezultāts tiek veidots, sasaistot virknes vietā, nevis rakstzīmju masīvā?
/* Divi sakārtoti saraksti ar intervāliem, kad lietotāji bija tiešsaistē dienas laikā. Intervāla sākums ir stingri mazāks par beigām. Jāskaita intervāli, kad abi lietotāji bija tiešsaistē. Intervāli ir norādīti stundās, pieņemot, ka tie var būt no 0 līdz 24. */ krustojums( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] krustojums( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function krustojums(lietotajs1, lietotajs2) { // ievadiet savu kodu šeit }
Cik ilgi strādājat uzņēmumā?
Pārrakstiet funkciju strjoin bez rest parametru izmantošanas, to vietā izmantojot arguments objektu.
Kāpēc for...of ir izcelts sarkanā krāsā TypeScript, bet parasts for — nē?
Implementējiet Array.prototype.groupBy metodi, kas atgriež strukturētu masīva objektu versiju, kur katrs atslēga ir rezultāts no piegādātās funkcijas izsaukuma, un vērtība ir masīvs elementu, kas atbilst šai atslēgai.
// Nepieciešams īstenot metodi groupBy, kas paplašina standartmetodes masīviem. // Metode jāatgriež grupēta masīva versija - objekts, // kur katrs atslēga ir rezultāts no izpildes funkcijas fn(arr[i]), // un katra vērtība ir masīvs, kas satur visus sākotnējā masīva elementus ar šo atslēgu. // šeit rakstiet kodu // Piemērs 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 }] // } // Piemērs 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Piemērs 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }
Reklāmas tīkla prototipā pārdošanas vietu pārdošana ir organizēta šādi: pircēji iepriekš norāda savu cenu, un katram reklāmas vietai atbild, vai viņi ir gatavi to iegādāties vai nē. Ir nepieciešams īstenot funkciju, kas pirms reklāmas vietas pārdošanas gaida augstākās likmes pircēju piekrišanu vai atteikumu, un pēc tam pārdod reklāmas vietu tam pircējam ar augstāko likmi no tiem, kas piekrita. Funkcijas atbilde jābūt pēc iespējas ātrākai. Jāatgriež pircēja indekss. Piemēri: Pircēji piedāvā cenas 1, 5, 10 Pircējs ar piedāvājumu 10 atbildēja ar atteikumu Pircējs ar piedāvājumu 1 atbildēja ar piekrišanu // Mēs vēl gaidām, jo var atbildēt pircējs ar cenu 5 Pircējs ar piedāvājumu 5 atbildēja ar piekrišanu // Izvēlamies pircēju ar piedāvājumu 5 ------------ Pircēji piedāvā cenas 1, 5, 10 Pircējs ar piedāvājumu 10 atbildēja ar atteikumu Pircējs ar piedāvājumu 5 atbildēja ar piekrišanu // Negaidām atbildi no pircēja ar piedāvājumu 1 - viņš noteikti netiks izvēlēts ------------ Pircēji piedāvā cenas 1, 2 Pircējs ar piedāvājumu 1 atbildēja ar atteikumu Pircējs ar piedāvājumu 2 atbildēja ar atteikumu // Neizvēlamies nevienu pircēju 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; }
function any(promises) { // tava kods šeit }
Uzrakstiet tries(n) funkciju, kas izsauc funkciju aus līdz n reizēm: atgriež pirmo veiksmīgo rezultātu, un ja visi mēģinājumi neizdodas — izmet pēdējo kļūdu.
Kāpēc nevar izmantot bultiņas funkciju groupBy? Kas būs this bultī?
// Jums ir dota rinda, kas sastāv no latīņu burtiem, tukšumiem un pieturzīmēm. // Rinda tiek saukta par pangramu, ja tā satur vismaz vienu reizi katru no 26 burtiem. Nosakiet, vai rinda ir pangramma. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // jūsu kods šeit } 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.'))
/** * Izpildiet funkciju sumPromises, kas * pieņem solījumus kā argumentus un * atgriež to rezultātu summu. * * Funkcija var pieņemt jebkuru argumentu skaitu. * Jebkuru solījumu API var izmantot. */ // Šeit rakstiet kodu // Piemērs lietošanai const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); sumPromises(promise1, promise2).then(console.log); // 3
Uzrakstiet sleep funkciju, kas atgriež Promise un beidz darbu pēc norādītā milisekundu skaita.