Jak można zoptymalizować algorytm przecięcia?
Frontend
Co lubisz, a czego nie lubisz w pracy w firmie?
/** * Zaimplementuj metodę times dla obiektu numerycznego. * Funkcja powinna przyjmować callback i wywołać go * określoną liczbę razy z indeksem bieżącej iteracji. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Przykłady console.clear(); (3).times(console.log) // 0 // 1 // 2
Na drzewie siedzą wiewiórki i wrony. Należy napisać funkcję, która znajdzie wszystkie wiewiórki na drzewie i zwróci ich imiona. Oczekiwany wynik: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
Jak długo pracujesz w firmie?
/* Podane są trzy sekcje kodu. Należy napisać wynik każdego 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);
/** * Należy napisać funkcję strjoin, * która łączy ciągi znaków za pomocą separatora. */ function strjoin() { // kod tutaj } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'
/* Dwie posortowane listy z interwałami obecności użytkowników w ciągu dnia. Początek interwału jest ściśle mniejszy od końca. Należy obliczyć interwały, podczas których obaj użytkownicy byli online. Interwały są podane w godzinach, zakładając, że mogą się wahać od 0 do 24. */ przecięcie( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] przecięcie( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function przecięcie(użytkownik1, użytkownik2) { // wpisz swój kod tutaj }
Przepisz funkcję strjoin bez użycia parametrów rest, zamiast nich używając obiektu arguments.
Jak zmienią się złożoność asymptotyczna i zużycie pamięci w zadaniu camelCase → snake_case, jeśli wynik będzie tworzony przez konkatenację łańcuchów zamiast tablicy znaków?
Dlaczego for...of jest podświetlane na czerwono w TypeScript, a zwykły for nie?
Zaimplementuj metodę Array.prototype.groupBy, która zwraca uporządkowaną wersję tablicy obiektów, gdzie każdy klucz jest wynikiem wywołania przekazanej funkcji, a wartość to tablica elementów odpowiadających temu kluczowi.
// Należy zaimplementować metodę groupBy, rozszerzającą standardowe metody tablic. // Metoda powinna zwracać wersję pogrupowaną tablicy - obiekt, // w którym każdy klucz jest wynikiem wykonania przekazanej funkcji fn(arr[i]), // a każda wartość jest tablicą zawierającą wszystkie elementy oryginalnej tablicy z tym kluczem. // kod tutaj // Przykład 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 }] // } // Przykład 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Przykład 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }
Napisz funkcję tries(n), która wywołuje funkcję aus do n razy: zwraca pierwszy udany wynik, a jeśli wszystkie próby zakończyły się błędem — rzuca ostatni błąd.
// Dana jest linia składająca się z liter łacińskich, spacji i znaków interpunkcyjnych. // Linia nazywa się pangramem, jeśli zawiera co najmniej raz każdą z 26 liter. Określ, czy linia jest pangramem. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // twoj kod tutaj } 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.'))
W prototypie sieci sprzedaży reklamy sprzedaż miejsc reklamowych jest zorganizowana w następujący sposób: kupujący z góry podają swoją cenę, a dla każdego miejsca reklamowego odpowiadają, czy są gotowi je kupić, czy nie. Należy zaimplementować funkcję, która przed sprzedażą miejsca reklamowego będzie oczekiwać zgody lub odmowy od kupujących z najwyższą ofertą, a następnie sprzeda to miejsce kupującemu z najwyższą ofertą spośród tych, którzy się zgodzili. Odpowiedź funkcji musi być tak szybka, jak to możliwe. Należy zwrócić indeks kupującego. Przykłady: Kupujący oferują ceny 1, 5, 10 Kupujący z ofertą 10 odpowiedział odmową Kupujący z ofertą 1 odpowiedział zgodą // Wciąż czekamy, ponieważ może odpowiedzieć kupujący z ofertą 5 Kupujący z ofertą 5 odpowiedział zgodą // Wybieramy kupującego z ofertą 5 ------------ Kupujący oferują ceny 1, 5, 10 Kupujący z ofertą 10 odpowiedział odmową Kupujący z ofertą 5 odpowiedział zgodą // Nie czekamy na odpowiedź od kupującego z ofertą 1 - na pewno go nie wybierzemy ------------ Kupujący oferują ceny 1, 2 Kupujący z ofertą 1 odpowiedział odmową Kupujący z ofertą 2 odpowiedział odmową // Nie wybieramy żadnego kupującego 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; }
Dlaczego nie można używać funkcji strzałkowej dla groupBy? Co będzie this w strzałce?
// a każda wartość jest tablicą zawierającą wszystkie elementy oryginalnej tablicy z tym kluczem. // kod tutaj // Przykład 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 }] // } // Przykład 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String));
Jakie są ograniczenia rekurencyjnego przeszukiwania drzewa? Czym różni się przeszukiwanie w głębokości (DFS) od przeszukiwania wszerz (BFS)? Jak można zaimplementować przeszukiwanie drzewa bez rekurencji?
/* Należy zaimplementować metodę intersection, rozszerzającą standardowe metody zbiorów (Set). Metoda przyjmuje inny zbiór jako argument i zwraca nowy zbiór, który jest częścią wspólną oryginalnego zbioru i przekazanego, czyli zawiera tylko te elementy, które występują w obu zbiorach. */ // twoj kod 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