Sobes.tech

Frontend

/** * Es necesario escribir una función asíncrona, * que "duerma" la cantidad de milisegundos especificada, * y luego termine con éxito */ function sleep(duration) { } // Ejemplo const startTime = Date.now(); console.log("Comenzando a dormir..."); sleep(2000).then(() => { console.log("¡Desperté después de 2 segundos!"); console.log("Tiempo transcurrido: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("¡Desperté después de 1 segundo!"); console.log("Tiempo transcurrido: ", Date.now() - startTime); });

171

/** * Implementar el método times para un objeto numérico. * La función debe aceptar un callback y llamarlo * un número determinado de veces con el índice de la iteración actual. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Ejemplos console.clear(); (3).times(console.log) // 0 // 1 // 2

171

Hay un árbol en el que se sientan ardillas y cuervos. Es necesario escribir una función que encuentre todas las ardillas en el árbol y devuelva sus nombres. Resultado esperado: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].

171

¿Cómo se puede optimizar el algoritmo de intersección?

171

¿Cuánto tiempo lleva trabajando en la empresa?

169

/* Se dan dos listas ordenadas con intervalos de presencia de usuarios en línea durante el día. La hora de inicio del intervalo es estrictamente menor que la de fin. Se necesita calcular los intervalos en los que ambos usuarios estaban en línea. Los intervalos se expresan en horas, considerando que pueden ser horas desde 0 hasta 24. */ intersección( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] intersección( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function intersección(usuario1, usuario2) { // tu código aquí }

168

/** * Es necesario escribir una función strjoin, * que concatene cadenas con un separador. */ function strjoin() { // código aquí } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'

166

Reescriba la función strjoin sin usar parámetros rest, usando en su lugar el objeto arguments.

166

/* Se proporcionan tres secciones de código. Es necesario escribir el resultado de cada 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

¿Cómo cambiarán la complejidad asintótica y el consumo de memoria en la tarea de camelCase → snake_case si en lugar de recopilar el resultado en un array de caracteres, se concatena en una cadena?

161

// Es necesario implementar el método groupBy, que extienda los métodos estándar de los arrays. // El método debe devolver una versión agrupada del array - un objeto, // en el que cada clave sea el resultado de la ejecución de la función pasada fn(arr[i]), // y cada valor sea un array que contenga todos los elementos del array original con esa clave. // código aquí // Ejemplo 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 }] // } // Ejemplo 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Ejemplo 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }

160

En el prototipo de la red de ventas de publicidad, la venta de espacios publicitarios se organiza de la siguiente manera: los compradores indican su precio con anticipación, y para cada espacio publicitario responden si están dispuestos a comprarlo o no. Es necesario implementar una función que, antes de vender un espacio publicitario, espere la aprobación o rechazo de los compradores con la oferta más alta, y luego venda el espacio al comprador con la oferta más alta entre los que aceptaron. La respuesta de la función debe ser lo más rápida posible. Debe devolver el índice del comprador. Ejemplos: Los compradores ofrecen precios 1, 5, 10 El comprador con oferta 10 respondió con rechazo El comprador con oferta 1 respondió con aceptación // Aún esperamos, ya que puede responder el comprador con oferta 5 El comprador con oferta 5 respondió con aceptación // Elegimos al comprador con oferta 5 ------------ Los compradores ofrecen precios 1, 5, 10 El comprador con oferta 10 respondió con rechazo El comprador con oferta 5 respondió con aceptación // No esperamos respuesta del comprador con oferta 1 - definitivamente no será elegido ------------ Los compradores ofrecen precios 1, 2 El comprador con oferta 1 respondió con rechazo El comprador con oferta 2 respondió con rechazo // No elegimos a ningún comprador 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

// Se te da una cadena que consiste en letras latinas, espacios y signos de puntuación. // Se llama pangrama a una cadena si contiene al menos una vez cada una de las 26 letras. Determina si la cadena es un pangrama. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // tu código aquí } 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

// y cada valor es un array que contiene todos los elementos del array original con esa clave. // código aquí // Ejemplo 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 }] // } // Ejemplo 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String));

159

Escriba una función tries(n), que llame a la función aus hasta n veces: devuelve el primer resultado exitoso y, si todos los intentos terminan en error, lanza el último error.

157

¿Por qué no se puede usar una función de flecha para groupBy? ¿Qué será this en la flecha?

157

¿Por qué for...of se resalta en rojo en TypeScript, pero el for normal no?

156

¿Qué limitaciones tiene el recorrido recursivo del árbol? ¿En qué se diferencia el recorrido en profundidad (DFS) del recorrido en anchura (BFS)? ¿Cómo se puede implementar un recorrido del árbol sin recursión?

155

function any(promises) { // tu código aquí }

153

/* Es necesario implementar el método intersection, que extiende los métodos estándar de conjuntos (Set). El método recibe otro conjunto como parámetro y devuelve un nuevo conjunto, que es la intersección del conjunto original y el pasado, es decir, contiene solo los elementos que están en ambos conjuntos. */ // tu código 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
/7