Ինչն է ձեզ դուր գալիս և ինչն է ձեզ դուր չգալիս աշխատանքի մեջ ընկերությունում։
Frontend
Ինչպես կարելի է օպտիմալացնել intersection ալգորիթմը։
Կա ծառ, որի վրա նստած են գազաններ և կաքավներ: Պետք է գրել ֆունկցիա, որը գտնում է բոլոր գազանները ծառի վրա և վերադարձնում նրանց անունները: Ապահովված արդյունք: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
/** * Իրականացրեք times մեթոդը թվային օբյեկտի համար: * Ֆունկցիան պետք է ընդունի callback և կանչի այն * նշված քանակությամբ անգամ՝ ընթացիկ կրկնության ինդեքսով: */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Օրինակներ console.clear(); (3).times(console.log) // 0 // 1 // 2
Քանի ժամանակ եք աշխատում ընկերությունում?
/** * Պետք է գրել strjoin ֆունկցիա, * որը միացնում է տողերը բաժանարարով: */ function strjoin() { // կոդ այստեղ } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'
/* Երկու դասավորված ցանկեր են, որոնք ներկայացնում են օգտվողների առցանց ներկայության միջակայքերը օրվա ընթացքում: Միջակայքի սկիզբը խիստ փոքր է ավարտից: Պետք է հաշվարկել այն միջակայքերը, երբ երկու օգտվողներն էլ եղել են առցանց: Միջակայքերը նշված են ժամերով, ընդունելով, որ կարող են լինել 0-ից 24: */ կտրում( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] կտրում( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function կտրում(օգտագործող1, օգտագործող2) { // գրեք ձեր կոդը այստեղ }
/* Երեք կոդի հատվածներ են տրված։ Պետք է գրել յուրաքանչյուր 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);
Վերագրեք strjoin ֆունկցիան առանց rest-պարամետրերի օգտագործման, փոխարենը օգտագործելով arguments օբյեկտը։
Ինչպե՞ս կփոխվի asymptotic բարդությունը և հիշողության սպառումը camelCase → snake_case առաջադրանքի դեպքում, եթե արդյունքը կառուցվում է տողերի միացման միջոցով՝ փոխարենը նիշերի զանգվածի օգտագործման:
Ինչու՞ for...of-ը TypeScript-ում նշվում է կարմիրով, իսկ սովորական for-ը՝ ոչ:
// Ձեզ տրվում է տող, որը բաղկացած է լատինական տառերից, բացատներից և կետադրական նշաններից: // Տողը կոչվում է պանգրամա, եթե այն պարունակում է առնվազն մեկ անգամ յուրաքանչյուր 26 տառերից: Կառավարեք, արդյոք տողը պանգրամա է: const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // ձեր կոդը այստեղ } 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.'))
Հայտարարության ցանցի պրոտոտիպում, գովազդային տեղերի վաճառքը կազմակերպված է հետևյալ կերպ. գնորդները նախապես նշում են իրենց գինը, և յուրաքանչյուր գովազդային տեղին պատասխանում են, պատրաստ են այն գնել կամ ոչ: Պետք է իրականացնել ֆունկցիա, որը գովազդային տեղը վաճառելուց առաջ կսպասի բարձր գնի առաջարկով գնորդների համաձայնությանը կամ հրաժարմանը, և ապա կվաճառի գովազդային տեղը այն գնորդին, ով առաջարկել է ամենաբարձր գինը նրանցից, ովքեր համաձայնել են: Ֆունկցիայի պատասխանն պետք է լինի հնարավորինս արագ: Պետք է վերադարձնել գնորդի ինդեքսը: Օրինակներ: Գնորդները առաջարկում են գին 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; }
// Պետք է իրականացնել 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] // }
Գրեք tries(n) ֆունկցիան, որը կանչում է aus ֆունկցիան մինչև n անգամ՝ վերադարձնելով առաջին հաջող արդյունքը, իսկ եթե բոլոր փորձերը ավարտվեն սխալով՝ նետում է վերջին սխալը։
// և յուրաքանչյուր արժեք՝ զանգված է, որը պարունակում է սկզբնական զանգվածի բոլոր տարրերը այդ բանալիով: // այստեղ կոդը // Օրինակ 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));
Ինչու չի կարելի օգտագործել սլաքային ֆունկցիա groupBy-ի համար: Ի՞նչ կլինի this-ը սլաքում:
Ի՞նչ սահմանափակումներ կան ծառի ռեկուրսիվ շրջայցում: Ինչպե՞ս է տարբեր դեբագի (DFS) և լայնության (BFS) շրջայցը: Ինչպե՞ս կարելի է իրականացնել ծառի շրջայցը առանց ռեկուրսիայի:
/* Անհրաժեշտ է իրականացնել 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
function any(promises) { // ձեր կոդը այստեղ }