@@VikM-y9t tomate tu tiempo para hacerlo, de verdad tiene concepto muy buenos y muy bien explicados, es pesado de seguir? Por supuesto es Harvard. Yo voy en la semana 4 y bastante impresionado.
Podrías usar la función de normalize() sobre TODO el texto antes del for y evitar aún mas consumo innecesario (ya que lo usas 3 veces por cada ciclo) suponiendo que JS guarde en memoría la primera vez que usas normalize() sobre una palabra aún lo estaría haciendo una vez por palabra en vez de una vez en total.
Excelente video! He notado que no muchas personas lo usan, pero JavaScript trae consigo una implementación de Hash Map (new Map()) y Hash Set (new Set()) para este tipo de casos (a pesar de que es prácticamente igual que el objeto o {}). En mi caso mi solución fue la siguiente: text = text.toLowerCase().replace(/[^a-zA-Z ]/g, "").split(/\s/); const appearances = text.reduce((acc, val) => { if (!acc.has(val)) { acc.set(val, 1); } else { acc.set(val, acc.get(val) + 1); } return acc; }, new Map());
Eso estaba en un ejercicio en la primer materia de la carrera de sistemas. Ni siquiera de examen. En python era el curso. Mi solución: 1. Hacer todo minúscula. Es una linea. Todos se rompían la cabeza a falta de esto. 2. Crear un diccionario. 3. Comenzar detectando palabras desde la primera letra a la última usando isalpha (esta otra sí estaba recomendada por el ejercicio mismo) Volcar al diccionario sumando 1. No veo mayores ineficiencias salvando que es un lenguaje de alto nivel y no tengo la más pálida de idea de como hace todo... Lo mismo sucede en casi todo lenguaje. Lowercase+isalpha+sumar en un contenedor str:int. Debería bastar y el único trabajo es tener cuidado para construir el control de palabras, que donde comienza, termina y el final de la cadena para evitar fallos.
Buen video! Yo hubiese normalizado la cadena y luego del split ordenado alfabéticamente, entonces comparaba con la palabra anterior: si matchea incremento contador, sino, agrego entrada al diccionario con contador en 1 y avanzo a la próxima.
Me siento muy orgulloso de haber pensado en las tablas hash para hacer eso. 😭 No fueron al carajo las trasnochadas con estructuras de datos intentando que salieran las estructuras.
Bro, no se absolutamente nada de programacion, pero me entretuve tanto que vi todo el video, y entendi poco, pero dan ganas de aprender. Gracias Crack.
Con la conclusión que me quedo (dentro de mi vulgaridad) es que es mejor pensar en una solución en la que solo sea necesario recorrer el array objetivo una vez. Gran vídeo!!!!!!!!!!. Primer vídeo que veo tuyo, suscripción obligada
¡Excelente explicación! gracias. me gustaria agregar que tambien se podrian normalizar los simbolos (como punto, coma, y demás) con una expresión regular que elimine todo lo que no sea letra o número. Por ejemplo, está: [^a-zA-Z0-9] ...de esta manera nos asegurariamos que si o si se eliminaran todos. Y tomar en cuenta también los acentos y demas cositas raras que pueden ir sobre las letras 😆 Hay muchas formas de hacer esto, y muchos ejemplos en internet. No estoy segura de cual sea la mas rapida. También, no estoy completamente segura, pero, ¿normalizar todo el string al comienzo no es más eficiente que llamar a la función por cada palabra?
Hay que tener en cuenta que esa regEx también elimina los espacios en blanco, por tanto si se aplica al texto de entrada, luego el resultado no será el esperado
Soluciona el problema, sí. Es por si misma una solución ocupando estructuras de datos, no tanto. Es como ordenar un arreglo usando un método Sort. La explicación es clara y precisa, eso sin duda. Saludos!
Amigo muchas gracias por compartir éste vídeo, me pareció divertido e interesante, para mi estos son Mini Challengers ó Mini desafíos. Te quería comentar que éste código tiene una debilidad, tendrías que ingresar todos los caracteres extraños posibles para normalizar, creo que sería mejor normalizar considerando que las letras mayúsculas de la "A" a la "Z" van desde el carácter 65 hasta el 90. (esto es devolviendo el valor del caracter) y las letras minúsculas de la "a" a la "z" van desde el 97 hasta el 122. Cualquier carácter que esté fuera de ese rango lo sustituyo por un espacio en blanco, de esa forma elimino todos los caracteres extraños (sin tomar en cuenta los acentos). Espero haberme explicado amigo y sería interesante ver que lo implementaras. Yo lo que pasa es que no programo en éste lenguaje, pero tengo conocimientos de otros lenguajes.
Este canal es increíble. El contenido como la calidad, mejor no puede ser. Explicas de 10. Espero que continúes con este tipo de vídeos, que, a mi parecer, ayudan muchísimo. También me encanta tu serie de patrones de diseño.
Hola, me ha gustado mucho tu video es el primero que veo y queria decir este fue el mismo ejercicio que me pidieron hacer en una entrevista que tuve unas semanas atrás. No la pase satisfactoriamente debido a que no pude completar el algoritmo. Ahora se ya se en que fallé. Nuevo suscriptor; saludos!
No tengo mucho conocimiento teórico de algoritmos, solamente me gusta entrar a codewars y resolver problemas según mi analisis he investigación en google xd. Ese es un problema de memoizacion según como lo conozco. No tenia idea de como resolver un problema de ese tipo hasta que conocí ese concepto lo que me hizo ver cuan importante y útil es el conocimiento teórico y de conceptos. Buen video!
Está muy bueno lo que comentas sobre lo malo de usar el replace, así nomás, porque tendrías que crear un caso para cada caracter especial, en el texto puede haber comillas (simples, dobles, caligráficas, etc.), apóstrofes y un sinfín de caracteres más que deberías comprobar "a mano". Claramente no es el modo idóneo de encarar el problema, mejor matchear las palabras "words" y limpiar a partir de ahí. Excelentes como siempre tus videos, saludos desde Argentina!
Hola, muchas gracias. Justo esa prueba me pasaron en una entrevista de trabajo. Únicamente que con la variante que no había que contar palabras. Había que contar letras y devolver la letra que mas se repetía.
Genial que usaras REGEXP para los replaces, me parece que se subutilizan mucho las expresiones regulares en el día a día de nuestro trabajo y eso genera que nos malacostumbremos a no usar esta poderosa herramienta.
Apenas tuve una entrevista técnica en cual el problema fue el siguiente: recibir una cadena string y evaluar cuántas vocales y consonantes existían en esa cadena y después retornar las vocales y consonantes de forma ascendente y descendente. Me gustaría poder ver cómo lo implementarias por favor.
Una manera simple de bajar el costo computacional junto con la complejidad, perfecto para un ambiente de entrevista. Otras ideas que se me ocurre para reducir la constante aledañas al algoritmo, en términos de tiempos son: * DefiniR un máquina de estado, dónde se hay un estado que es la culminación de una palabra, dónde agregamos la palabra al hash. *Usar un trie con la particularidad que las hojas del mismo tienen una referencia una lista enlazada y la cantidad. Cuando encontramos una palabra, si no existe la agregamos al trie por ende adicionamos a la lista enlazada, y empezamos de nuevo por la raíz.
Un genio, me encanta tu contenido. Tengo intención de ponerme al día con tu canal! Explicas muy bien y haces llegar conocimiento que suele estar un poco menos accesible, como la complejidad algorítmica.
Al hacer .split() ya estás iterando todo el texto implicitamente, lo mismo al hacer .toLower() e incluso .replace(), asi que esta solución está bastante lejos de O(n). Puede hacerse en O(n) si iteras cada char y vas leyendo las palabras a mano
Excelente video y muy buena data! En uno de los cursos de js que hice uno de los challenges era hacer un encriptador de texto y empleamos el replace con regex. Nuevo suscriptor!
Yo hace mucho tiempo que hice, pero si no me falla la memoria, las preguntas se podrían encajar en estos 3 tipos: - Te ponen un código (en mi caso Java) y tienes que encontrar errores - Te ponen otro código y tienes que decir cuál es su salida - Te plantean X problema y tienes que escribir (en código o pseducódigo) cómo lo resolverías Y básicamente se podrían encuadrar en esos tipos. Al menos por mi experiencia.
Que interesante que este tipo de problema, lo he tenido en algunos proyectos con Python de hecho el tipo de estructura se llama diccionario, me hace feliz que he ido por el buen camino. Me suscribo acabo de descubrir tu canal :)
buen video, y pudedo decirles que es real en un proyecto me encontré con este problema no siempre con palabras sino con registros de una DB cuando haces un dasboard tienes que sacar estadisticas de varias cosas y para eso hay que contar y hay ocaciones en el que hacerle un GROUP BY a la DB no alcanza.
Soy ingeniero electromecánico, pero quiero y estoy empezando a meterme en el mundo de la programación, este video está muy bueno para darse una idea del entorno laboral, gracias.
Hermano que buen video!!!! para todos aquellos que nos estamos iniciando y estamos en el nivel llamado junior de verdad muchas GRACIAS!!! POR SU APORTE.
Muy buenas. Buen video y explicaciones muy claras. Felicidades. He de decir que he echado en falta un poco la explicación del coste asociado a un split o a un regex. Y también "la magia" de los costes constantes de las tablas hash. ¿Qué coste tiene recorrer una tabla hash? Estamos de acuerdo que es un O(n), pero hay detalles que deberían tenerse en cuenta también y que se dan por supuestos. ¡Buen trabajo! Te descubrí hace poco y, por supesto, te seguiré viendo. Sigue así. Un abrazo.
Buena explicación. Dos detalles: no llames tanto a `normalize()` y pegale una mirada a Map() para hash tables en Js/ TS ;) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
Increíble video! Quisiera comentar mi ejercicio de una entrevista que tuve hace poco haber, y no la pase por no saber mucho de APIS si pudieras hacer un video de ella seria genial: --Crear una aplicación movil o pagina web (cualquiera de las dos). para visualizar películas tomadas de una API. - Debe tener un top 10, un filtro por actores y un buscador funcional donde al ingresar el nombre de la película pues lleve a ella. -La API es del sitio The Movie Data Base. Es la primera ves que me sale una prueba de este tipo.
Wow, nunca pensé en tablas hash, pensé mas en una lista para guardar las palabras repetidas, pero veo que al final viene siendo lo mismo que el primero
Muchas gracias por la info. La resolución de algoritmos es super importante en las entrevistas. Hay que invertir tiempo en Hackerrank :D. Por otro lado, posiblemente un enfoque mas compacto seria el siguiente. function wordRepetitions(text) { let words = text.toLowerCase().split(/[\s|\.|\,]/g) return words .filter(p => p) .reduce((totales, p) => { if (!totales[p]) totales[p] = 0 totales[p]++; return totales; }, {}) } Abrazo!!!
gracias, simple algebra lineal y matrices, eso es todo en estructura de datos. La gente hoy en dia tiende a memorizar funciones y procesos y se olviden de donde viene todo, matemáticas, Nuevamente gracias y saludos
Excelente video. Al decir que ibas hacer el ejercicio me puse a resolverlo antes de ver el video. No pensé en lo de eliminar los signos. De resto se logro. Gracias por traer tan buen material.
Hola, me gustó mucho su video. Me gustaría que hablara sobre soluciones lineales y soluciones cuadraticas, saber diferenciar cuando utilizar las soluciones
Creo que utilizando reduce podría quedar más elegante. Muy buen video igualmente! Podrías traer alguno de pruebas técnicas más a nivel de system design y arquitectura?
Con reduce quedaría mucho más elegante si, aunque creo que se entiende más con un for y un if. Un día haremos algún video revisando las capacidades funcionales de js :D Sobre lo de system design, lo apunto! Puede ser muy interesante. Gracias por el comentario!
@@lucasgonzalez5123 Lineal ya es con el for, ya que solo recorres una vez los elementos del array. Con el reduce lo implementas con herramientas de programacion funcional, pero las dos implementaciones son lineales
Pienso que para hacerlo aún más eficiente debería suprimirse el método Split. Hacer un único bucle que mientras que parte las palabras realiza la comparativa. En ese caso el coste sería de N y no de 2N.
Me encanto seria padre que colocaras mas sobre temas de evaluación al momento de una entrevista o de resolver típicos problemas con los que podríamos conseguirnos
Yo hice eso para aprender ingles en mi 2 año de universidad para Licenciatura en informática, ni analista era aun. Lo hice en ruby y usando diccionarios.
Gran video, saludos desde Mexico, oye pero nunca implementaste la búsqueda en tablas hash, hice exactamente lo mismo que tú en donde spliteas el string sin caracteres como comas, puntos etc. Y el programa hasta este momento sería lineal no es cierto? Porque tienes un ciclo for hasta n que es el número de palabras
Por lo poco que sé de Python, el primer ejemplo que pusiste sobre contar palabras es bastante sencillo de hacer, no recuerdo bien pero creo que era count o contar (no me hagas mucho caso), el punto es que habia una linea que hacia eso de manera muy simple, ¿esa solución que diste es pensando en otros lenguajes?
No estoy seguro de cuantas cosas comparten js y ts, pero en js hay una función reduce(), la ultima parte del for con el reduce quedaria algo asi como arrayPalabras.reduce((acc,elem)=> acc[elem] ? acc[elem]+=1 : acc[elem] = 1, {} ) y el resultado seria el mismo
Deberías subir + vídeos de este estilo, se aprende muy bien a programar viendo a un profesional experimentado haciéndolo.
Un saludo Betta
Has un mini curso sobre estructura de datos estaría genial, buen video 👌
Buenisimo bro , salio o no el mini curso sobre estructura de datos ?? ksdjlas
Eso estaría increíble
Podrías ver el CS50 de Harvard, explican muuy bien, en la semana 5 específicamente.
@@gonove97 gracias bro, datos asi te alegran el dia, vi ese curso pero justo me quedé antes de esa semana, ahora lo chequeo. Suerte.
@@VikM-y9t tomate tu tiempo para hacerlo, de verdad tiene concepto muy buenos y muy bien explicados, es pesado de seguir? Por supuesto es Harvard. Yo voy en la semana 4 y bastante impresionado.
Podrías usar la función de normalize() sobre TODO el texto antes del for y evitar aún mas consumo innecesario (ya que lo usas 3 veces por cada ciclo) suponiendo que JS guarde en memoría la primera vez que usas normalize() sobre una palabra aún lo estaría haciendo una vez por palabra en vez de una vez en total.
Woooooo! Estaría genial que vieras listas de problemas des icpc
Excelente video!
He notado que no muchas personas lo usan, pero JavaScript trae consigo una implementación de Hash Map (new Map()) y Hash Set (new Set()) para este tipo de casos (a pesar de que es prácticamente igual que el objeto o {}). En mi caso mi solución fue la siguiente:
text = text.toLowerCase().replace(/[^a-zA-Z ]/g, "").split(/\s/);
const appearances = text.reduce((acc, val) => {
if (!acc.has(val)) {
acc.set(val, 1);
} else {
acc.set(val, acc.get(val) + 1);
}
return acc;
}, new Map());
Eso estaba en un ejercicio en la primer materia de la carrera de sistemas. Ni siquiera de examen.
En python era el curso.
Mi solución:
1. Hacer todo minúscula. Es una linea. Todos se rompían la cabeza a falta de esto.
2. Crear un diccionario.
3. Comenzar detectando palabras desde la primera letra a la última usando isalpha (esta otra sí estaba recomendada por el ejercicio mismo) Volcar al diccionario sumando 1.
No veo mayores ineficiencias salvando que es un lenguaje de alto nivel y no tengo la más pálida de idea de como hace todo...
Lo mismo sucede en casi todo lenguaje. Lowercase+isalpha+sumar en un contenedor str:int. Debería bastar y el único trabajo es tener cuidado para construir el control de palabras, que donde comienza, termina y el final de la cadena para evitar fallos.
bro, he aprendido más en un video de 10 mins que en 3 meses de carrera jajajajaja.
Buen video! Yo hubiese normalizado la cadena y luego del split ordenado alfabéticamente, entonces comparaba con la palabra anterior: si matchea incremento contador, sino, agrego entrada al diccionario con contador en 1 y avanzo a la próxima.
Codewars y hackerrank sirve mucho para este tipo de ejercicios! DATO
Es cierto gracias
Si es correcto ahí hay muchos ejercicios parecidos, yo lo resolví con 'reduce' de los arrays que me pareció más sencillo
Me siento muy orgulloso de haber pensado en las tablas hash para hacer eso. 😭 No fueron al carajo las trasnochadas con estructuras de datos intentando que salieran las estructuras.
Los métodos de búsqueda uff
@@osiris7998 mc Donalds
Parecerá tonto, pero pensé la solución sin saber que son las tablas Hash jajajajaja
@@osiris7998 Una empresa de Estados Unidos.
@@GerdSa Plot twist: Trabaja programando las maquinas de hacer pedidos D:
Bro, no se absolutamente nada de programacion, pero me entretuve tanto que vi todo el video, y entendi poco, pero dan ganas de aprender. Gracias Crack.
Con la conclusión que me quedo (dentro de mi vulgaridad) es que es mejor pensar en una solución en la que solo sea necesario recorrer el array objetivo una vez. Gran vídeo!!!!!!!!!!. Primer vídeo que veo tuyo, suscripción obligada
¡Excelente explicación! gracias.
me gustaria agregar que tambien se podrian normalizar los simbolos (como punto, coma, y demás) con una expresión regular que elimine todo lo que no sea letra o número. Por ejemplo, está: [^a-zA-Z0-9] ...de esta manera nos asegurariamos que si o si se eliminaran todos.
Y tomar en cuenta también los acentos y demas cositas raras que pueden ir sobre las letras 😆
Hay muchas formas de hacer esto, y muchos ejemplos en internet. No estoy segura de cual sea la mas rapida.
También, no estoy completamente segura, pero, ¿normalizar todo el string al comienzo no es más eficiente que llamar a la función por cada palabra?
Lo dice él mismo en el video...
Hay que tener en cuenta que esa regEx también elimina los espacios en blanco, por tanto si se aplica al texto de entrada, luego el resultado no será el esperado
pudiera quedar de esta forma [^\sa-zA-Z0-9]
El conocimiento dado por un experto como tú es muy valioso!
Soluciona el problema, sí. Es por si misma una solución ocupando estructuras de datos, no tanto. Es como ordenar un arreglo usando un método Sort.
La explicación es clara y precisa, eso sin duda. Saludos!
Amigo muchas gracias por compartir éste vídeo, me pareció divertido e interesante, para mi estos son Mini Challengers ó Mini desafíos. Te quería comentar que éste código tiene una debilidad, tendrías que ingresar todos los caracteres extraños posibles para normalizar, creo que sería mejor normalizar considerando que las letras mayúsculas de la "A" a la "Z" van desde el carácter 65 hasta el 90. (esto es devolviendo el valor del caracter) y las letras minúsculas de la "a" a la "z" van desde el 97 hasta el 122. Cualquier carácter que esté fuera de ese rango lo sustituyo por un espacio en blanco, de esa forma elimino todos los caracteres extraños (sin tomar en cuenta los acentos). Espero haberme explicado amigo y sería interesante ver que lo implementaras. Yo lo que pasa es que no programo en éste lenguaje, pero tengo conocimientos de otros lenguajes.
Mee encanta porque siempre estoy inseguro de lo que puedo hacer o lograr con los conocimientos adquiridos que tengo por la presión o demanda
Este canal es increíble. El contenido como la calidad, mejor no puede ser. Explicas de 10. Espero que continúes con este tipo de vídeos, que, a mi parecer, ayudan muchísimo. También me encanta tu serie de patrones de diseño.
Hola, me ha gustado mucho tu video es el primero que veo y queria decir este fue el mismo ejercicio que me pidieron hacer en una entrevista que tuve unas semanas atrás. No la pase satisfactoriamente debido a que no pude completar el algoritmo. Ahora se ya se en que fallé.
Nuevo suscriptor; saludos!
Gracias! Una lastima que no pasaras la prueba 😕 Mucho ánimo para las siguientes!
No tengo mucho conocimiento teórico de algoritmos, solamente me gusta entrar a codewars y resolver problemas según mi analisis he investigación en google xd. Ese es un problema de memoizacion según como lo conozco. No tenia idea de como resolver un problema de ese tipo hasta que conocí ese concepto lo que me hizo ver cuan importante y útil es el conocimiento teórico y de conceptos. Buen video!
Está muy bueno lo que comentas sobre lo malo de usar el replace, así nomás, porque tendrías que crear un caso para cada caracter especial, en el texto puede haber comillas (simples, dobles, caligráficas, etc.), apóstrofes y un sinfín de caracteres más que deberías comprobar "a mano". Claramente no es el modo idóneo de encarar el problema, mejor matchear las palabras "words" y limpiar a partir de ahí. Excelentes como siempre tus videos, saludos desde Argentina!
O utilizar una expresión regular:
replace(/[^\w|\s]/g,"");
Cambiar a String vacío lo que no sean letras o espacios en blanco 😁
Hola, muchas gracias. Justo esa prueba me pasaron en una entrevista de trabajo. Únicamente que con la variante que no había que contar palabras.
Había que contar letras y devolver la letra que mas se repetía.
Genial que usaras REGEXP para los replaces, me parece que se subutilizan mucho las expresiones regulares en el día a día de nuestro trabajo y eso genera que nos malacostumbremos a no usar esta poderosa herramienta.
Apenas tuve una entrevista técnica en cual el problema fue el siguiente: recibir una cadena string y evaluar cuántas vocales y consonantes existían en esa cadena y después retornar las vocales y consonantes de forma ascendente y descendente. Me gustaría poder ver cómo lo implementarias por favor.
Buenísimo, si tienes la oportunidad, sigue con este tipo de videos!!
Muy interesante los videos de este tipo, a mi me pidieron implementar un juego de poker, y ni siquiera se jugarlo, jajaja
Yo pensaba que en una entrevista no se podían usar pre-built functions del lenguaje 🥴
Este video me aclaró esa duda, me parece un alivio, gracias!
Una manera simple de bajar el costo computacional junto con la complejidad, perfecto para un ambiente de entrevista.
Otras ideas que se me ocurre para reducir la constante aledañas al algoritmo, en términos de tiempos son:
* DefiniR un máquina de estado, dónde se hay un estado que es la culminación de una palabra, dónde agregamos la palabra al hash.
*Usar un trie con la particularidad que las hojas del mismo tienen una referencia una lista enlazada y la cantidad. Cuando encontramos una palabra, si no existe la agregamos al trie por ende adicionamos a la lista enlazada, y empezamos de nuevo por la raíz.
He aprendido en un día un poco de phyton usando videos de youtube y pude aproximar me a la solución, buen video
Wow, que simple lo haces ver, da gusto, felicidades.
Quiero y *necesito* este tipo de contenidos. Gracias!
Bettatech, eres un grande, idolo, te quiero fiera ! Un ejemplo a seguir
Gracias máquina! Crack figura 😙💪💪
Un genio, me encanta tu contenido. Tengo intención de ponerme al día con tu canal! Explicas muy bien y haces llegar conocimiento que suele estar un poco menos accesible, como la complejidad algorítmica.
Al hacer .split() ya estás iterando todo el texto implicitamente, lo mismo al hacer .toLower() e incluso .replace(), asi que esta solución está bastante lejos de O(n).
Puede hacerse en O(n) si iteras cada char y vas leyendo las palabras a mano
Excelente video y muy buena data! En uno de los cursos de js que hice uno de los challenges era hacer un encriptador de texto y empleamos el replace con regex.
Nuevo suscriptor!
Genial el video! Para mi que recién estoy empezando a programar es muy útil e importante ver videos como estos y codigo real.
Yo hace mucho tiempo que hice, pero si no me falla la memoria, las preguntas se podrían encajar en estos 3 tipos:
- Te ponen un código (en mi caso Java) y tienes que encontrar errores
- Te ponen otro código y tienes que decir cuál es su salida
- Te plantean X problema y tienes que escribir (en código o pseducódigo) cómo lo resolverías
Y básicamente se podrían encuadrar en esos tipos. Al menos por mi experiencia.
.
SIIIIIIII PLS, SIGUE SUBIENDO ESTE TIPO DE COSAS, QUIERO TRABAJO AJLKDSAJD
Que interesante que este tipo de problema, lo he tenido en algunos proyectos con Python de hecho el tipo de estructura se llama diccionario, me hace feliz que he ido por el buen camino.
Me suscribo acabo de descubrir tu canal :)
buen video, y pudedo decirles que es real en un proyecto me encontré con este problema no siempre con palabras sino con registros de una DB cuando haces un dasboard tienes que sacar estadisticas de varias cosas y para eso hay que contar y hay ocaciones en el que hacerle un GROUP BY a la DB no alcanza.
woooow, cuando lo puso justo pensé en la tabla hash, no creí que fuera la solución óptima, lastima que aún no la domino bien, una cosa para estudiar!
Soy ingeniero electromecánico, pero quiero y estoy empezando a meterme en el mundo de la programación, este video está muy bueno para darse una idea del entorno laboral, gracias.
Genial! soy estudiante aún y me inspira mucho tus vídeos , gracias !
Esto es muy bueno sigue subiendo estos vídeos sobre ejercicios reales, saludos desde Argentina
Muchas gracias por la información. Ya que es súper útil para que nos contraten🥰. Gracias por ayudarnos a encontrar trabajo jaja😂
Genio total!! Desde Ururguay! Me encanta tus videos, un abrazo grande CRACK!
Hermano que buen video!!!! para todos aquellos que nos estamos iniciando y estamos en el nivel llamado junior de verdad muchas GRACIAS!!! POR SU APORTE.
Muy buen tutorial, seria bueno que subieras mas videos acerca de esto. Saludos desde Venezuela.
Es importante hablar tanto de estos algoritmos, como aquellos que son in situ, también es un valor añadido muyyyyy valioso que este algoritmo no posee
Gracias,es un super video, replique el código en javascript y Python, es genial
Muy buenas. Buen video y explicaciones muy claras. Felicidades. He de decir que he echado en falta un poco la explicación del coste asociado a un split o a un regex. Y también "la magia" de los costes constantes de las tablas hash. ¿Qué coste tiene recorrer una tabla hash? Estamos de acuerdo que es un O(n), pero hay detalles que deberían tenerse en cuenta también y que se dan por supuestos. ¡Buen trabajo! Te descubrí hace poco y, por supesto, te seguiré viendo. Sigue así. Un abrazo.
Buena explicación. Dos detalles: no llames tanto a `normalize()` y pegale una mirada a Map() para hash tables en Js/ TS ;) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
Podrías hablar sobre cursos de estructuras de datos en java o libros, te lo agradecería bastante 🥺
Increíble video! Quisiera comentar mi ejercicio de una entrevista que tuve hace poco haber, y no la pase por no saber mucho de APIS si pudieras hacer un video de ella seria genial:
--Crear una aplicación movil o pagina web (cualquiera de las dos). para visualizar películas tomadas de una API.
- Debe tener un top 10, un filtro por actores y un buscador funcional donde al ingresar el nombre de la película pues lleve a ella.
-La API es del sitio The Movie Data Base.
Es la primera ves que me sale una prueba de este tipo.
Recuerdo haber visto algo similar en un curso de Django.
Edit: De hecho, creo que era lo mismo.
buenisimo video, me estoy iniciando en el mundo de la programacion y cada vex me parece más interesante, gracias por el video
Están geniales estos vídeos resolviendo ejercicios. Por favor continúa haciendo más
Wow, nunca pensé en tablas hash, pensé mas en una lista para guardar las palabras repetidas, pero veo que al final viene siendo lo mismo que el primero
Muchas gracias por la info. La resolución de algoritmos es super importante en las entrevistas. Hay que invertir tiempo en Hackerrank :D. Por otro lado, posiblemente un enfoque mas compacto seria el siguiente.
function wordRepetitions(text) {
let words = text.toLowerCase().split(/[\s|\.|\,]/g)
return words
.filter(p => p)
.reduce((totales, p) => {
if (!totales[p])
totales[p] = 0
totales[p]++;
return totales;
}, {})
}
Abrazo!!!
No entiendo absolutamente nada, pero me subscribo!
gracias, simple algebra lineal y matrices, eso es todo en estructura de datos. La gente hoy en dia tiende a memorizar funciones y procesos y se olviden de donde viene todo, matemáticas, Nuevamente gracias y saludos
Me ha encantado tu vídeo. Muchísimas gracias. Like y suscrita.
Buen video, apenas mencionaste el enunciado se me ocurrió hacerlo con un Mapeo. Buena solución. Saludos
Excelente video. Al decir que ibas hacer el ejercicio me puse a resolverlo antes de ver el video. No pensé en lo de eliminar los signos. De resto se logro. Gracias por traer tan buen material.
Genial, super bien explicado, 👍gracias
CLARISIMO. Muchas gracias!
Me encanta este canal y estoy aprendiendo mucho. Saludos desde Costa Rica 🇨🇷
Muy buen video, está clarísimo y es util. saludos
Hola, me gustó mucho su video. Me gustaría que hablara sobre soluciones lineales y soluciones cuadraticas, saber diferenciar cuando utilizar las soluciones
Soy la definición de novato hecha humano en la programación y estuvo muy interesante el como analistaste y solucionaste el ejercicio.
Me alegra de haber pensado bien la solución
Creo que utilizando reduce podría quedar más elegante. Muy buen video igualmente! Podrías traer alguno de pruebas técnicas más a nivel de system design y arquitectura?
Con reduce quedaría mucho más elegante si, aunque creo que se entiende más con un for y un if. Un día haremos algún video revisando las capacidades funcionales de js :D
Sobre lo de system design, lo apunto! Puede ser muy interesante.
Gracias por el comentario!
@@BettaTech No solo más elegante, no sería lineal? Estarías recorriendo solamente los elementos del array.
@@lucasgonzalez5123 Lineal ya es con el for, ya que solo recorres una vez los elementos del array. Con el reduce lo implementas con herramientas de programacion funcional, pero las dos implementaciones son lineales
Escribí antes de terminar de ver el video. Por lo tanto, con el reduce es igual pero mas "elegante" :P
Pienso lo mismo, reduce personalmente es más sencillo.
const wordRepetitions=str =>{
let paso1=str.toLowerCase().replace(/[.,!]/g,"").split(' ');
let paso2=paso1.reduce((acc,el)=>{
if(acc[el]){
acc[el]++
}else{
acc[el]=1
}
return acc;
},{})
return Object.entries(paso2)
}
Wow, quiero llegar a tener tantos conocimientos y mucha habilidad como tú 😯
Pienso que para hacerlo aún más eficiente debería suprimirse el método Split. Hacer un único bucle que mientras que parte las palabras realiza la comparativa. En ese caso el coste sería de N y no de 2N.
cual seria la solucion ?
QUEREMOS MAS VIDEO ASI!!!!!!!! Muchas gracias. :)
Para un mismo problema hay varias soluciones, lo importante es saber cuál algoritmo aplicar 🙌
Me encanto seria padre que colocaras mas sobre temas de evaluación al momento de una entrevista o de resolver típicos problemas con los que podríamos conseguirnos
Excelente solución y excelente explicación. ¡Gracias por crear contenido de calidad!
muy buen video , estoy en mi primer año de carrera y me das la vida con este contenido
Excelente video, ayuda demasiado
Gracias por tu contenido
Ver que pensé algo así me hizo sentir bien conmigo mismo
me gusto la resolución, un curso sobre estructura de datos hace falta!!
Bro...genial que incorpores este tipo de videos..
Genial, debo reforzar la parte de estructuras de datos
Gran Explicación! Enhorabuena por tus conocimientos. Muchas gracias por compartirlos.
Cuando quieras usar diccionarios como ese en typescript puedes usar el tipo record. Ejemplo: "Record"
No lo conocía, gracias!!
Exijo más contenido como ésto. Gracias y porfavor.
Con gusto!
Esto es oro puro! muchas gracias por este gran aporte!
Saludos
Este tipo de videos son los que valen la pena. Saludos!!
Gran explicación, recién empiezo en este mundo y lo entendí relativamente rápido! Gracias!
Buenísimo el vídeo, haz más así. Muchas gracias!
Muchas gracias por este video, será de muchísima ayuda si los sigues haciendo!
Yo hice eso para aprender ingles en mi 2 año de universidad para Licenciatura en informática, ni analista era aun. Lo hice en ruby y usando diccionarios.
Mas de estos por favor...
Pero también podrías hacer la versión ¿orientada a objetos y la versión con programación funcional? GRACIAS MIL
Gran video, saludos desde Mexico, oye pero nunca implementaste la búsqueda en tablas hash, hice exactamente lo mismo que tú en donde spliteas el string sin caracteres como comas, puntos etc.
Y el programa hasta este momento sería lineal no es cierto? Porque tienes un ciclo for hasta n que es el número de palabras
Por lo poco que sé de Python, el primer ejemplo que pusiste sobre contar palabras es bastante sencillo de hacer, no recuerdo bien pero creo que era count o contar (no me hagas mucho caso), el punto es que habia una linea que hacia eso de manera muy simple, ¿esa solución que diste es pensando en otros lenguajes?
Que explicacion genial ! Super video.
No estoy seguro de cuantas cosas comparten js y ts, pero en js hay una función reduce(), la ultima parte del for con el reduce quedaria algo asi como arrayPalabras.reduce((acc,elem)=> acc[elem] ? acc[elem]+=1 : acc[elem] = 1, {} ) y el resultado seria el mismo
Gracias por compartir tus conocimientos! Nuevamente gracias..
Antes de ver el vídeo comento para ver si tengo idea , usando un diccionario o hashtable utilizando memoization