Sobes.tech

Frontend

/** * Il est nécessaire d'écrire une fonction asynchrone, * qui "dormira" pendant le nombre de millisecondes spécifié, * puis se terminera avec succès */ function sleep(duration) { } // Exemple const startTime = Date.now(); console.log("Début du sommeil..."); sleep(2000).then(() => { console.log("Réveillé après 2 secondes!"); console.log("Temps écoulé: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Réveillé après 1 seconde!"); console.log("Temps écoulé: ", Date.now() - startTime); });

171

/** * Implémenter la méthode times pour un objet numérique. * La fonction doit accepter un callback et l'appeler * un nombre spécifié de fois avec l'indice de l'itération en cours. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Exemples console.clear(); (3).times(console.log) // 0 // 1 // 2

171

Comment peut-on optimiser l'algorithme d'intersection?

171

Il y a un arbre avec des écureuils et des corbeaux. Il faut écrire une fonction qui trouve tous les écureuils dans l'arbre et retourne leurs noms. Résultat attendu : ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].

171

Depuis combien de temps travaillez-vous dans l'entreprise?

169

/** * Il faut écrire une fonction strjoin, * qui assemble des chaînes avec un séparateur. */ function strjoin() { // code ici } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'

168

/* Deux listes triées contenant des intervalles de présence des utilisateurs en ligne pendant la journée sont données. Le début de l'intervalle est strictement inférieur à la fin. Il faut calculer les intervalles où les deux utilisateurs étaient en ligne. Les intervalles sont indiqués en heures, en considérant qu'ils peuvent aller de 0 à 24. */ intersection( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] intersection( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function intersection(utilisateur1, utilisateur2) { // votre code ici }

168

/* Trois sections de code sont données. Il faut écrire le résultat de chaque 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

Réécrivez la fonction strjoin sans utiliser de paramètres rest, en utilisant l'objet arguments à la place.

166

Comment la complexité asymptotique et la consommation de mémoire changeront-elles dans la tâche camelCase → snake_case si le résultat est construit par concaténation de chaînes au lieu d'un tableau de caractères?

163

// Il est nécessaire d'implémenter la méthode groupBy, qui étend les méthodes standard des tableaux. // La méthode doit retourner une version groupée du tableau - un objet, // dans lequel chaque clé est le résultat de l'exécution de la fonction fn(arr[i]), // et chaque valeur est un tableau contenant tous les éléments du tableau d'origine avec cette clé. // code ici // Exemple 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 }] // } // Exemple 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Exemple 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }

160

Dans le prototype du réseau de vente publicitaire, la vente d'espaces publicitaires est organisée comme suit : les acheteurs indiquent leur prix à l'avance, et pour chaque espace publicitaire, ils répondent s'ils sont prêts à l'acheter ou non. Il est nécessaire d'implémenter une fonction qui, avant de vendre un espace publicitaire, attend l'accord ou le refus des acheteurs avec la plus haute offre, puis vend l'espace à l'acheteur avec la plus haute offre parmi ceux qui ont accepté. La réponse de la fonction doit être aussi rapide que possible. Elle doit retourner l'indice de l'acheteur. Exemples : Les acheteurs proposent des prix 1, 5, 10 L'acheteur avec l'offre 10 a répondu par un refus L'acheteur avec l'offre 1 a répondu par un accord // Nous attendons encore, car l'acheteur avec l'offre 5 peut répondre L'acheteur avec l'offre 5 a répondu par un accord // Nous choisissons l'acheteur avec l'offre 5 ------------ Les acheteurs proposent des prix 1, 5, 10 L'acheteur avec l'offre 10 a répondu par un refus L'acheteur avec l'offre 5 a répondu par un accord // Nous n'attendons pas la réponse de l'acheteur avec l'offre 1 - il ne sera pas choisi ------------ Les acheteurs proposent des prix 1, 2 L'acheteur avec l'offre 1 a répondu par un refus L'acheteur avec l'offre 2 a répondu par un refus // Aucun acheteur n'est choisi 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

// On vous donne une chaîne composée de lettres latines, d'espaces et de signes de ponctuation. // Une chaîne est appelée pangramme si elle contient au moins une fois chacune des 26 lettres. Déterminez si la chaîne est un pangramme. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // votre code ici } 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

Écrivez une fonction tries(n), qui appelle la fonction aus jusqu'à n fois : retourne le premier résultat réussi, et si toutes les tentatives échouent, lance la dernière erreur.

159

// et chaque valeur est un tableau contenant tous les éléments du tableau d'origine avec cette clé. // code ici // Exemple 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 }] // } // Exemple 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String));

159

Pourquoi for...of est-il mis en évidence en rouge dans TypeScript, mais la boucle for normale ne l'est pas?

158

Pourquoi ne peut-on pas utiliser une fonction flèche pour groupBy ? Quel sera this dans la flèche ?

157

Quelles sont les limitations de la traversée récursive d'un arbre ? En quoi la traversée en profondeur (DFS) diffère-t-elle de la traversée en largeur (BFS) ? Comment peut-on réaliser une traversée d'arbre sans récursion ?

155

/* Il est nécessaire d’implémenter la méthode intersection, qui étend les méthodes standard des ensembles (Set). La méthode prend un autre ensemble en paramètre et retourne un nouvel ensemble, qui est l’intersection de l’ensemble initial et de celui passé en argument, c’est-à-dire, ne contient que les éléments présents dans les deux ensembles. */ // votre code 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

function any(promises) { // votre code ici }

153
/7