Work in Progress 👷
Give me a coffee! https://cafecito.app/denolemon ☕ ☕
En este repositorio encontrarás diversos ejercicios de logica resueltos con Javascript. Son ejercicios comunes de entrevistas tecnicas y pruebas tecnicas.
¿Alguna duda? Me podés encontrar en Twitter como @DenoKennedy
El orden no tiene ninguna razon en especifico.
Dado un numero devolver su tabla de multiplicar completa. Por ejemplo:
- Input:
5
- Output:
Tabla del 5
5 x 1 = 5
5 x 2 = 10
(...)
Dado un String comprobar si es un palindromo o no (se leen igual del derecho y del revés), por ejemplo Bob, Pop, etc... No tener en cuenta espacios ni simbolos.
- Input:
"otto"
- Output:
true
Posee dos soluciones. Una validada con metodos de JS y otro con manejos de datos.
Pueden venir strings con todo tipo de caracteres y espacios. Un caso de uso quedo sin funcionar, a corregir.
Dado un String y una frase decir cuantas veces se repite la palabra en esa frase dada.
- Input:
("Hola", "Hola cómo andas?")
- Output:
1
Dado un String, darle la vuelta, invertir el orden de sus caracteres. No se pueden usar metodos del lenguaje, solo estructuras de control.
Hay dos soluciones. La primera sin el uso de pila y la segunda con, dependiendo de que tipo de solucion estamos buscando.
- Input:
"hola"
- Output:
aloh
Sacar el porcentaje de un numero. Mandamos tanto el porcentaje como el numero por parametros.
- Input:
(20, 100)
-- El 20% de 100 - Output:
20
Dibujar un cuadrado hueco con astericos en consola con el tamaño de lados que definamos nosotros
- Input:
4
- Output:
* ** *
* *
* *
* ** *
Dados dos numeros, devolver cuantos numeros impares hay ENTRE ellos
- Input:
(1, 100)
- Output:
49
Con un numero entero, invertirlo y devolverlo dado vuelta.
- Input:
56
- Output:
65
Dados dos array devolver un array con los elementos comunes entre ambos sin duplicados
- Input:
([1,2,3], [3,2,5,6])
- Output:
[2,3]
Dado un numero mostrar una escalera con escalones de guiones usando el numero para los niveles de la escalera.
- Input:
4
- Output:
[-]
[-][-]
[-][-][-]
[-][-][-][-]
Dado un String y una busqueda, censurar las coincidencias de la busqueda en el String con [-CENSURADO-] Si ambos llegan vacios, devolver un "No se puede leer el texto y la busqueda". Y si llega un solo parametro, devolver "No se puede hacer la busqueda"
- Input:
('holi como va', 'holi)
-- Frase y palabra a censurar - Output:
[-CENSURADO-] como va
Dado un numero mostrar todos los numeros desde ese al 0 de 8 en 8 en una lista con guiones y cada numero debe empezar por "n"
- Input:
100
- Output:
-n 100
-n 92
-n 84
etc..
Dado un array, dividirlo en tantos sub-arrays como sea necesario basandonos en un numero que indique su tamaño.
- Input:
([1,2,3,4], 2)
-- Array y tamaño de divisiones - Output:
([1,2], [3,4])
Dado un String y un numero, repetir el String las veces que diga el numero
- Input:
('denu', 2)
-- Palabra y veces que se debe repetir - Output:
'denu' 'denu'
Dado un String devolver el caracter mas usado.
- Input:
denuuu
- Output:
u
Dado una cadena de texto, devolver cuantas vocales tiene la misma.
- Input:
denu
- Output:
2
Dado un numero, mostrar los numeros de 1 hasta el numero. Para multiplos de tres, escribir "denu" en lugar del numero, para los multiplos de cinco, "lemon", y si es multiplo de tres y cinco, "denolemon"
- Input:
6
- Output:
1 2 denu 4 lemon denu
Dado un numero, mostrar sus divisores (hasta el número)
- Input:
5
- Output:
1 5
Dado un array de objetos de peliculas (titulo, director y si fue vista), mostrar todas las peliculas indicando si la viste o no.
- Input:
[{"el señor de los anillos", "denu lemon", true}, {"avatar", "denu lemon", false}]
- Output:
I have seen "El señor de los anillos 2" directed by Deno Lemon I have not seen "El señor de los anillos 3" directed by Deno Lemon"
Dados dos String crear un algoritmo que compruebe si son anagramas entre si (Si ambos usan los mismos caracteres en una misma cantidad)
- Input:
(Riesgo, Sergio)
- Output:
true
Dada un String y un numero, cortar el string mostrando X cantidad de caracteres dependiendo del numero enviado.
- Input:
(Denu, 2)
- Output:
De
Dados dos numeros indicar cual es mayor y cual es menor.
- Input:
(2, 5)
- Output:
2 is less than 5
Dado un String poner en mayuscula la primera letra de cada palabra en la cadena y devolverla.
- Input:
hola soy denu lemon
- Output:
Hola Soy Denu Lemon
Dado un array de enteros y un numero, detectar si esa lista de numeros es una permutacion del 1 al numero aportado.
Permutacion: Secuencia de numeros en orden sin que falte ninguno entre ellos
- Input:
([1,2,3,4,5], 5)
- Output:
true
Dado un String, si hay mas mayusculas, pasar todo a mayuscula, y viceversa.
- Input:
"DENu"
- Output:
DENU
Dado un numero mostrar la serie de fibonacci y el resultado de la misma
- Input:
10
- Output:
Serie completa: 0,1,1,2,3,5,8,13,21,34,55) Resultado: 55
Dado un numero mostrar a cuantos años, meses y dias equivale.
- Input:
920
- Output:
2 años, 6 meses y 2 dias
Dado un numero devolver su factorial (La multiplifacion de todos los numeros hasta llegar a el)
- Input:
3
- Output:
6 (1x2x3)
Dado un numero indicar si es capicua o no (se leen igual de izquierda a derecha y viceversa)
- Input:
2002
- Output:
true
Dado un array de numeros, devolver el array sin elementos duplicados. Lo mismo si hay algun String, debemos borrarlo
- Input:
[1,1,2,2,3,3,'denu']
- Output:
[1,2,3]
Dado un numero, indicar que tipo de angulo es (recto, agudo, obtuso, etc..)
Referencia
-
Agudos < 90
-
Recto == 90
-
Obtuso > 90
-
Llano == 180
-
Completo == 360
-
Mayor a 180 < 180
-
Input:
90
-
Output:
Angulo Recto
Dado un array de numeros, devolver el mismo con sus numeros elevados al cuadrado, y se debe eliminar cualquier contenido que no sea numerico
- Input:
[5,6,7,"denu"]
- Output:
[25,36,49]
Hacer un reloj que en tiempo real vaya mostrando la hora a cada segundo. Solo se puede usar Date para conseguir la hora una vez, pero no para actualizarla
-
Input:
const myClock = new Clock(); myClock.turnOn();
-
Output:
14:20:16
-- Actualizar en tiempo real HH:MM:SS
Dados dos numeros, devolver los resultados de las operaciones basicas entre ellos (suma, resta, multiplicacion, division)
- Input:
(2,2)
- Output:
2 + 2 = 4
2 - 2 = 0
2 * 2 = 4
2 / 2 = 1
Dado un array, crear otro array con el primer y ultimo elemento del array original
- Input:
[100,200,500,600]
- Output:
[100,600]
Dado un String, devolver cuantas consonantes y vocales tiene.
- Input:
denu
- Output:
Consonantes: 2 Vocales: 2
Dado un Array o Texto devolver el elemento o palabras que mas aparecen dentro de estos.
- Input:
[denu, denu, lemon]
- Output:
denu
Dado un numero mostrar una lista de los cuadrados de todos los numeros naturales hasta llegar al mismo.
- Input:
5
- Output:
[ 0, 1, 4, 9, 16 ]
Dado un texto comprobar que sea un email valido
- Input:
[email protected]
- Output:
true
Dado un array de numeros devolver el valor mas bajo y el valor mas alto
- Input:
[1,2,3,4,5]
- Output:
Bajo: 1 Alto:5
Dado un numero, mostrar un triangulo de astericos con ese numero de filas, un arbolito de X filas.
- Input:
4
- Output:
*
***
*****
*******
Dado dos numeros, sacar un numero random entre ellos
- Input:
1,100
- Output:
46
-- Random
Dado un array de numeros, sacar la media de todos (la suma de todos los numeros dividido por la cantidad de elementos, el promedio)
- Input:
[1,2,3]
- Output:
3
Dado un array de Strings, devolver otro con los valores que esten formados por mas de dos palabras
- Input:
["hola denu", "pastel", "rosa"]
- Output:
["hola denu"]
Dado un array de alumnos, con su nombre y su calificacion, mostrar cuantos aprobaron y cuantos no. (Aprobás con 6)
- Input:
[["Denu", 4], ["Jorge", 2], ["Mafalda", 10]]
- Output:
2 suspensos y 1 aprobado
Dado un String devolver los posibles substrings
- Input:
hola
- Output:
['h','o','l','a','ho','la','hol','ola','hola]
Dado un array de objetos devolver cuales son las aficiones mas comunes de los usuarios
- Input:
{aficiones de usuarios}
- Output:
{informatica: 6, futbol: 4, cine: 3}
Dado un string devolver las letras que se repiten solo una vez y cual es la primera
- Input:
Denu es Genial
- Output:
[[D, U, G, I, L], D]
Dado un objeto, ver si existe una propiedad en concreto o no
- Input:
(objeto, "nombre")
- Output:
true
-- existe la prop nombre en objeto
Dado un numero, devolver cuantos bucles tiene. Se tiene uno cuando tiene un circulo cerrado, por ejemplo, 6 tiene un bucle, 8 tiene dos, 1 tiene cero.
- Input:
(288661)
- Output:
6
Dado un array con numeros devolver dos array, uno con los pares y otro con impares
- Input:
[2,4,5,6,7,8]
- Output:
Pares [2,4,6,8] Impares [5,7]
Determinar la hipotenusa de un triángulo rectángulo conocidas las longitudes de sus dos catetos.
Calculo hipotenusa
√CatA^2 + CatB^2
- Input:
(8, 10)
- Output:
12,81
Realice un algoritmo que a partir de proporcionarle la velocidad de un automóvil, expresada en kilómetros por hora, proporcione la velocidad en metros por segundo.
1km/h => 0,28 m/s
- Input:
100
- Output:
27,78
Se dan dos array del mismo tamaño de numeros, y un numero como parametros. Iterando al primer array de izquierda a derecha y al segundo array de derecha a izquierda, devolver cuantas veces se obtiene un numero con los pares de numeros que son menores al tercer parametro.
- Input:
[1, 2, 3] [1, 2, 3] 31
- Output:
2
(Porque 31 no es menor a 31, 22 es menor a 31 y 13 es menor a 31)
Encontrar el tamaño de la ultima palabra. Si esta vacio, devolverá 0. Si es una sola palabra, se toma el tamaño de esa sola palabra.
- Input:
Hola Mundo
- Output:
5
De un array de String, se debe devolver el prefijo mas grande que se encuentre entre las cadenas.
- Input:
["flower", "flow", "flight"]
- Output:
fl
Resultado si no existe prefijo
- Input:
["dog", "raccoon", "car"]
- Output:
""
De una cadena de numeros y caracteres, crear una cuenta, recibimos el Infix, creamos el Postfix y devolvemos el Prefix. La conversion seria asi:
- Input:
["2", "1", "+", "3", "*"] => ((2+1)*3) => 9
Otro ejemplo es:
- Input:
["4", "13", "5", "/", "+"] => (4 + (13/5)) => 6
Tenemos 3 tipos de notaciones: (Asi funcionan las calculadoras)
- Infix = (2 + 1) + 3
- Postfix = Es la expresion del Infix evaluada, tambien se le dice "Reverse Polish notation"
- Prefix = Es la respuesta de la cuenta
Hay ciertas reglas para resolver las expresiones Postfix. Para eso debemos utilizar una pila. Por ejemplo, tenemos el siguiente Infix [2, 1, +, 3, *]
, cuando nos encontramos con numeros, los agregamos a la pila HASTA encontrarnos con un operador. Es decir, hasta el signo +
, nuestra pila tiene dos numeros, 2, 1
, entonces, cuando llegamos al operador, realizamos la cuenta, es decir, 2 + 1
.
Luego, ese resultado lo agregamos a la pila, y seguimos. En este caso, agregamos 3, y luego nos chocamos con la multiplicacion, asi que ahi, hacemos (2 + 1) * 3
, dando como resultado 9.
Dado el titulo de la columna, averiguar el numero de la columna. Estará en mayuscula.
- Input:
B
- Output:
2
// Por su orden en el abecedario
Tambien puede venir doble, es decir
-
Input:
AA
-
Output:
27
// La operacion seria 26 * 1 + 1 -
Input:
AAA
-
Output:
703
// (26 26 1) + (26 * 1) + 1 -
Input:
ZY
-
Output:
701
// (26 * 26) + 25
y asi sucesivamente...
Dado un string que no puede ser vacio, se podrá eliminar de el, como mucho, un solo caracter, para volverlo un palindromo valido. Tambien valida si es palindromo o no sin necesidad de quitar nada.
-
Input:
abca
-
Output:
True
// Se elimina la letra C -
Input:
aba
-
Output:
True
// No se elimina nada pero es palindromo -
Input:
abcd
-
Output:
False
// No es palindromo ni eliminando ninguno
Diseñar un algoritmo recursivo e iterativo que devuelva la suma de los primeros N enteros
- Input:
3
- Output:
6
(1 + 2 + 3)
Diseñar un algoritmo recursivo que encuentre la suma de los enteros positivos pares desde N hasta 2. Si N es impar imprimir un mensaje de error.
- Input:
10
- Output:
28
(10 + 8 + 6 + 4 + 2)
Dados dos números enteros, A y B, calcular su potencia (AB) en forma iterativa y recursiva.
- Input:
2 2
- Output:
4
Cargar una mahuktriz de nxn elementos enteros. Mostrarla. Calcular la suma de los elementos de la diagonal principal en forma iterativa y recursiva.
- Input:
222
222
222
- Output:
6
(2 + 2 +2)
¿Como se implementa un BST (Binary Search Tree) en el lenguaje en donde estas actualmente programando? Tanto su estructura como sus funciones correspondientes
¿Como se implementa un arbol común en el lenguaje en donde estas actualmente programando?
Remover todos los duplicados adyacentes de un String, de forma continuada hasta que ya no queden mas para eliminar, es decir, si de un String eliminamos los duplicados, y el resultado sigue teniendo duplicados, los seguimos eliminando.
-
Input:
aab, aaabccddd, aa, baab, Mississippi, abbaca
-
Output:
b, abd, "", "", M, ca
Intentar solucionarlo con el uso de una Pila o con la ayuda de un Hash. Si el resultado es vacio, devolver "Empty String"
Remover todos los duplicados adyacentes de un String, de forma continuada hasta que ya no queden mas para eliminar, es decir, si de un String eliminamos los duplicados, y el resultado sigue teniendo duplicados, los seguimos eliminando.
La diferencia entre este y el ejercicio 66, es que ahora recibimos por parametros cuantos consecutivos iguales queremos eliminar.
-
Input:
(aab, 3), (aaabccddd, 3), (aa, 2), (baab,2), (Mississippi, 2), (abbaca, 2)
-
Output:
aab, b, "", "", M, ca
Intentar solucionarlo con el uso de una Pila o con la ayuda de un Hash. Si el resultado es vacio, devolver "Empty String"
Implementar Merge y MergeSort en tu lenguaje de programacion preferido, utilizarlo con un array, ambos.
-
Input:
[100,-40,500,-124,0,21,7]
-
Output:
[-124, -40, 0, 7, 21, 100, 500]
Implementar el algoritmo de selectionSort en tu lenguaje de programacion preferido.
-
Input:
[100,-40,500,-124,0,21,7]
-
Output:
[-124, -40, 0, 7, 21, 100, 500]
Implementar el algoritmo de bubbleSort en tu lenguaje de programacion preferido.
-
Input:
[100,-40,500,-124,0,21,7]
-
Output:
[-124, -40, 0, 7, 21, 100, 500]
Implementar el algoritmo de bubbleSort en tu lenguaje de programacion preferido.
-
Input:
[100,-40,500,-124,0,21,7]
-
Output:
[-124, -40, 0, 7, 21, 100, 500]
Implementar LinkedLists y sus respectivas funciones en tu lenguaje de programacion preferido.
Implementar hashtables (o diccionarios) con tu lenguaje preferido.
Se recibe un texto y se debe devolver cuantas apariciones posee cada palabra del mismo. El mismo puede tener caracteres especiales
Se recomienda solucionar con HashTables para no complejizar su solucion (No iterar palabra por palabra)
- Input:
hola, como estas? hola
- Output:
[{hola, 2}, {como, 1}, {estas, 1}]
Se nos da un array de numeros positivos, desde 1 a n. Todos los numeros estan presentes menos uno, y ese numero faltante es el que debemos encontrar. El array NO esta ordenado. NO sirve la solucion que recorre todo el array buscando el numero faltante.
- Input:
[3,7,1,2,8,4,5]
- Output:
6
Se nos da un array de numeros y un valor. Determinar si la suma de dos numeros del mismo dan ese valor. Si existe, devolver true, si no, false
- Input:
[3,7,1,2,8,4,5], 9
- Output:
true
(5 + 4) (8 + 1) (7 + 2)
Se nos dan dos listas enlazadas ya ordenadas. Se debe devolver otra lista enlazada con los elementos de ambas listas pero ordenadas.
- Input:
4 => 8 => 15 => 19 || 7 => 9 => 10 => 16
- Output:
4 => 7 => 8 => 9 => 10 => 15 => 16 => 19
Dada una funcion, calcular la complejidad de sus lineas y su complejidad total.
function funChallenge(input) {
let a = 10;
a = 50 +3;
for (let i = 0; i < input.length; i++) {
anotherFunction();
let stranger = true;
a++;
}
return a;
}
function anotherFunChallenge(input) {
let a = 5;
let b = 10;
let c = 50;
for (let i = 0; i < input; i++) {
let x = i + 1;
let y = i + 2;
let z = i + 3;
}
for (let j = 0; j < input; j++) {
let p = j * 2;
let q = j * 2;
}
let whoAmI = "I don't know";
}
Calcular la complejidad ESPACIAL de las siguientes dos funciones.
function test(n) {
for (let i = 0; i < n.length; i++) {
console.log('test');
}
}
function arrayTimes(n) {
let array = []
for (let i = 0; i < n.length; i++){
array[i] = "hola"
}
return array;
}
Dados dos array, devolver true o false si comparten items en común
- Input:
[1,2,3,4] [4,5,6,7]
- Output:
true
Tratar de NO usar los metodos nativos de JS que facilitan esto.
Implementar las funciones basicas (y nativas, agregar, quitar, etc..) de un Array en tu lenguaje preferido de programacion. Tambien con clases.
Se nos dan dos listas ya ordenadas. Se debe devolver otra lista con los elementos de ambas listas pero ordenadas.
- Input:
[4,6,8,9] || [3,8,10,11]
- Output:
[3,4,6,8,9,10,11]
Dado un array, devolver el elemento que mas se repite (y si ninguno se repite, devolver undefined)
- Input:
[2,5,2,2,2,1]
- Output:
2
Implementar un Double Linked List en tu lenguaje favorito (Double es porque posee dos punteros, uno al siguiente nodo y otro al anterior)
Voltear un LinkedList
- Input:
[1 => 2 => 3]
- Output:
[3 => 2 => 1]
Encontrar el numero de fibonacci de un numero dado usando ahora recursion.
- Input:
3
- Output:
2
0 + 1 + 1 = 2
Imprimir una serie de numeros hasta el numero pasado por parametro pero usando recursion.
Contar los digitos de un numero usando recursion.
- Input:
33
- Output:
2
Sumar todos los digitos del numero pasado por parametro usando recursion.
- Input:
323
- Output:
8
(3 + 2 + 3)
Sumar el primer numero por parametros n veces por si mismo. Resolver con recursion.
- Input:
(8, 4)
- Output:
8
32
Dados 2 Binary Tree, chequear si son iguales
- Input:
(8, 4)
- Output:
8
32
Implementar una cola (Queue) en tu lenguaje de programacion preferido - Con nodos y arrays
Dado un array de numeros y un numero, devolver true si la suma de alguno de los numeros del array dan como resultado ese numero
- Input:
[5,7,1,2,8,4,3]
- Output:
true
=> 7 + 3 y 2 + 8
Dado un Binary Tree, resolver si es un Binary Search Tree Valido (para que lo sea, se debe cumplir la regla de que a la derecha debe ser mayor y la izquierda menor)
Se debe usar Recursion y un Inorder Transversal para resolver esto.
Dada una palabra y un diccionario de palabras, definir si esta palabra se puede separar en dos para formar dos palabras del diccionario.
Se recomienda usar recursion.
- Input:
"holadenu", ["hola", "denu", "ho", "la]
- Output: "Este String puede ser segmentado"
Dado un String de varias palabras, voltearlas.
- Input:
Hola Mundo
- Output:
Mundo Hola
¿En que orden se va a ejecutar el codigo escrito? (Ver ejer96.js para ver la respuesta y el código)
Con SetIntervals y setTimeouts
¿En que orden se va a ejecutar el codigo escrito? (Ver ejer97.js para ver la respuesta y el código)
Con llamadas a servicios.
¿En que orden se va a ejecutar el codigo escrito? (Ver ejer98.js para ver la respuesta y el código)
Con promises, perfecto para Micro y macrotasks examples.
const print = () => {
const a = [1];
const b = a;
b.push(2);
console.log(a, b);
}
¿Que se va a imprimir en ese codigo? (Ver ejer99.js para ver la respuesta) Perfecto para entender objetos.
Escribir una funcion que, dada una lista de ciudades, imprima las primeras 5 ciudades mas repetidas por orden de repeticiones
- Input:
['italy', 'bs as', 'denu', 'italy', 'italy', 'bs as']
- Output:
Italy, bs as, denu
// With more cities
Escribir una funcion que elimine todas las cookies de una pagina.
Escribir una funcion que genere un valor hex random.
Crea una función en JavaScript que resuelva el problema de las Torres de Hanoi para un número dado de discos
Desarrolla un algoritmo que resuelva un tablero de Sudoku utilizando técnicas de backtracking o alguna otra estrategia de resolución de problemas.
Genera un laberinto aleatorio y crea un algoritmo para encontrar la salida del laberinto utilizando un algoritmo de búsqueda como BFS (Breadth-First Search) o DFS (Depth-First Search).
Se tiene una funcion que recibe 2 o mas arrays. La idea es devolver un Array que solo obtenga los repetidos entre cada uno de los Array.
- Input: [1,2,3][5,3,1][7,5,3]
- Output: [1,3]
Comparar y actualizar el inventario almacenado en una matriz 2D contra una segunda matriz 2D de una entrega nueva. Actualizar las cantidades de los elementos del inventario existentes actualmente (en arr1). Si no se puede encontrar un elemento, añadir el nuevo elemento y cantidad a la matriz de inventario. La matriz de inventario devuelta debe estar en orden alfabético por elemento.
- Input: [[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]]
[[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]]
- Output:
[[88, "Bowling Ball"], [2, "Dirty Sock"], [3, "Hair Pin"], [3, "Half-Eaten Apple"], [5, "Microphone"], [7, "Toothpaste"]].
Devuelve el número total de permutaciones de la cadena proporcionada que no tienen letras consecutivas repetidas. Supón que todos los caracteres en la cadena proporcionada son únicos.
Por ejemplo, para la cadena "aab", debería retornar 2 porque tiene 6 permutaciones totales (aab, aab, aba, aba, baa, baa), pero solo 2 de ellas (aba y aba) no tienen la misma letra (en este caso "a") repitiéndose.
- Input:
aab
- Output:
2
Dados cinco enteros positivos, encuentre los valores mínimo y máximo que pueden calcularse sumando exactamente cuatro de los cinco enteros. A continuación, imprima los respectivos valores mínimo y máximo como una sola línea de dos enteros largos separados por espacios.
La suma debe hacerse entre 4 de 5 elementos.
- Input:
[1,3,5,7,9]
- Output:
[16 24]
1 + 3 + 5 + 7 = 16 (Minimo) 3 + 5 + 7 + 9 = 24 (Maximo)
Se recibe un String con una hora en particular en formato AM/PM, devolver un String con esa misma hora convertida a 24hs, teniendo en cuenta que 12 AM son 00 en el formato de 24 hs.
- Input:
01:00:00PM
- Output:
13:00:00
Dado un String, comprobar si todos los caracteres son unicos o no
- Input:
abcde
yabcded
- Output:
true
-false
Dado un array de numeros enteros y un target, devolver los indices de dos numeros para que la suma de ambos sea igual al target. Asumir solo una solucion.
- Input:
nums=[9,2,5,6] target= 7
- Output:
[1,2]
nums[1] + nums[2] = 7 (2 + 5)
Un anagrama es una palabra creada a partir de la reordenacion de las letras de otra palabra. Por ejemplo, saco - caso. Dado un array de Strings, devolver los anagramas agrupados. No importa el orden
- Input: words=
["saco", "arresto", "programa", "rastreo", "caso"]
- Output:
[["saco", "caso"], ["arresto", "rastreo"], ["programa"]]
Tener en cuenta que la respuesta es un array de arrays, donde dentro se encuentra el par que es anagrama. Si hay una palabra que no posee su anagrama, queda solo.
Dada una matriz, escribir un algoritmo para establecer todos los elementos de la fila y la columna correspondientes a 0 si un elemento de la matriz es 0.
- Input:
[
[1, 2, 3],
[4, 0, 6],
[7, 8, 9]
]
- Output: (Columna 2 y fila 2 son todos ceros por el cero del medio)
[
[1, 0, 3],
[0, 0, 0],
[7, 0, 9]
]
Escribir un algoritmo para eliminar los elementos duplicados de una lista enlazada
- Input: 1>2>2>3>4>1
- Output: 1>2>3>4
Escribir un algoritmo para combinar dos listas enlazadas simples ordenadas. El resultado debe ser una unica lista enlazada ordenada.
- Input: 1>2>4>6 2>3>5
- Output: 1>2>2>3>4>5>6
Dada una lista enlazada y un numero N, devolver el nodo N empezando por el final y desde cero.
- Input: 1>2>4>6 2
- Output: 4 (1,2,4)
Implementar una pila (stack) en tu lenguaje de programacion preferido - Con nodos
Dado un String que solo contiene los caracteres () [] y {}
implementar un algoritmo para determinar si es valido
- Input:
([]){} ({)}
- Output:
true false
(Ya que la llave cierra por fuera del parentesis)
Ordenar un stack de forma que los elementos mas pequenios queden arriba de todo del Stack (Pila). Se puede usar un Stack adicional pero no se puede copiar elementos a otra estructura de datos como arrays.
- Input:
(tope) 5-1-4-2
- Output:
(tope) 1-2-4-5
Diseniar un algoritmo que obtenga el valor minimo de un Stack.
- Input:
(tope) 5-1-4-2
- Output:
1
Alice y Bob crearon cada uno un problema para HackerRank. Un revisor califica los dos desafíos y otorga puntos en una escala del 1 al 100 para tres categorías: claridad del problema, originalidad y dificultad.
La calificación para el desafío de Alice es el triplete a = (a[0], a[1], a[2]), y la calificación para el desafío de Bob es el triplete b = (b[0], b[1], b [2]).
La tarea es encontrar sus puntos de comparación comparando a[0] con b[0], a[1] con b[1] y a[2] con b[2].
Si a[i] > b[i], entonces Alice recibe 1 punto. Si a[i] < b[i], entonces Bob recibe 1 punto. Si a[i] = b[i], entonces ninguna persona recibe un punto. Los puntos de comparación son los puntos totales que obtuvo una persona.
Dados a y b, determine sus respectivos puntos de comparación.
- Input:
a = [5, 6, 7] b = [3, 6, 10]
- Output:
[1, 1]
(Alice 1 punto, Bob 1 punto)
Implementacion de un arbol binario en Javascript junto con sus busquedas con llamadas recursivas.
Dada la raiz de un arbol binario, devolver el arbol invertido.
-
Input: 4 /
2 7 / \ /
1 3 6 9 -
Output: 4 /
7 2 / \ /
9 6 3 1
Dado un arbol, devolver una lista enlazada de los nodos de cada nivel. Si el arbol tiene N niveles se devuelven N listas enlazadas
-
Input: 3 /
9 20 /
15 7 -
Output: 3 9>20 15>7
Implementar en Javascript un Heap con todos sus metodos correspondientes
Una operación de rotación hacia la izquierda en un arreglo desplaza cada uno de los elementos del arreglo una unidad hacia la izquierda. Por ejemplo, si se realizan 2 rotaciones hacia la izquierda en el arreglo 12345, entonces el arreglo se convertiría en 34512. Observa que el elemento de índice más bajo se mueve al índice más alto en una rotación. Esto se llama un arreglo circular.
Dado un arreglo de enteros y un número, realiza rotaciones hacia la izquierda en el arreglo. Retorna el arreglo actualizado para ser impreso como una sola línea de enteros separados por espacios.
- Input:
5 4 1 2 3 - 2
- Output:
12354
Es el Día de Año Nuevo y la gente está en fila para el viaje en la montaña rusa de Wonderland. Cada persona lleva una pegatina que indica su posición inicial en la cola, desde 1 hasta n. Cualquier persona puede sobornar a la persona directamente delante de ellos para intercambiar posiciones, pero todavía llevan su pegatina original. Una persona puede sobornar a lo sumo a otras dos. Determina el número mínimo de sobornos que tuvieron lugar para llegar a un orden de cola dado. Imprime el número de sobornos, o, si alguien ha sobornado a más de dos personas, imprime "Too chaotic".
Dado un array de listas enlazadas, cada una de ellas ordenada de forma ascendente, combinarlas para devolver una unica lista enlazada ordenada.
- Input: 1>4>5 1>3>4 2>6
- Output: 1>1>2>3>4>4>5>6
Armar un diccionario que mediante la funcion isOnDict devuelva si la palabra existe en el diccionario. No es una funcion, es una clase.
- Diccionario recibe: ["hola", "como", "estas"] y isOnDict("hola") devuelve true
Se tiene un objeto con nombres y cantidad de llamadas. Devolver un objecto con la cantidad de llamadas acumuladas y por nombre.
- Input: [{name: "denu", numOfCalls: 7}, {name: "pedro", numOfCalls: 3}, {name: "denu", numOfCalls: 2}]
- Output: {denu: 9, pedro: 3}
Como agregado al ejercicio anterior, ordenar esta lista por cantidad mayor de llamados.
Como agregado al ejercicio anterior, agregar una funcion de busqueda por nombre.
Crear una funcion que guarde una palabra secreta que no pueda ser accedida ni cambiada desde fuera de la funcion.
Dado un array de palabras, devolver la palabra mas repetida de la misma
- Input: ["hola", "como", "estas", "hola", "hola"]
- Output: "hola 3"
Dado un string, devolver true si el mismo tiene todos caracteres unicos o false si no los tiene.
- Input: "hola" "aaee"
- Output: true false
En el archivo se encontraran todas las soluciones a los siguientes mini-problemas:
Suma de todos los números en un arreglo: Escribe una función que reciba un arreglo de números y devuelva la suma de todos los números en el arreglo.
Encontrar el número más grande en un arreglo: Escribe una función que encuentre el número más grande en un arreglo de números.
Filtrar números pares en un arreglo: Escribe una función que reciba un arreglo de números y devuelva un nuevo arreglo que contenga solo los números pares.
Contar la frecuencia de elementos en un arreglo: Escribe una función que tome un arreglo como entrada y devuelva un objeto con la frecuencia de cada elemento en el arreglo.
Imagine que le han dado una serie de números enteros y un número de consulta k. Su tarea es escribir una función que encuentre todos los tripletes en la matriz que suman el número de consulta k
- Input: nums = [1, 2, 3, 4, 5] k = 6
- Output: 1 - Solo 1,2,3 suman 6
Se le proporciona una matriz N-dimensional (una lista anidada) y su tarea es convertirla en una matriz 1D. La matriz N-dimensional puede tener cualquier cantidad de listas anidadas y cada lista anidada puede contener cualquier cantidad de elementos. Los elementos de las listas anidadas son números enteros. Escriba una función que tome una matriz N-dimensional como entrada y devuelva una matriz 1D
- Input:
[1, [2, 3], [4, [5, 6]], 7]
- Output:
[1, 2, 3, 4, 5, 6, 7]
Se le proporciona una matriz desordenada que consta de números enteros consecutivos [1, 2, 3, ..., n] sin duplicados. Se le permite intercambiar dos elementos cualesquiera. Encuentre la cantidad mínima de intercambios necesarios para ordenar la matriz en orden ascendente.
- Input: 4312
- Output: 3
Dado un array de 6x6 de dos dimensiones con 16 relojes de arena, devolver la maxima suma de la hora de cada reloj de arena.
- Input:
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
- Output: 19
Dada una matriz de números enteros, ordene la matriz en orden ascendente usando el algoritmo Bubble Sort anterior. Una vez ordenado, imprima las siguientes tres líneas:
Array is sorted in numSwaps swaps., dóndees el número de intercambios que tuvieron lugar. First Element: firstElement, dóndees el primer elemento de la matriz ordenada. Last Element: lastElement, dóndees el último elemento de la matriz ordenada.
Sugerencia: Para completar este desafío, debe agregar una variable que mantenga un recuento actualizado de todos los intercambios que ocurren durante la ejecución
- Los problemas los saqué en su mayoria del curso de Udemy "Master en Logica de Programacion" de Victor Robles. Recomendadisimo curso y explicacion.
- Algunos problemas los tenia guardados entre repositorios y otros salieron de Hackerrank, excelente plataforma para practicar
- Algunas resoluciones se hicieron basadas en el libro Clean Code de Robert C. Martin, excepto la parte de TDD.
- https://pastranamoreno.files.wordpress.com/2012/05/ejercicios-resueltos.pdf