Te ganaste un suscriptor que te va a comentar TODOS los videos. Lo bien que explicas y lo motivante que es este contenido es increíble! Gracias
@tonybravo58253 жыл бұрын
Hola! Me he encontrado con tu canal y me ha encantado, hace poco hice un exámen para un trabajo con ese tipo de ejercicios y hubo uno que no me salió, tenía que hacerlo en python, aquí lo dejo esperando puedas asesoramos, Dado el siguiente diccionario, genera un programa que reciba dos números ‘x’ y ‘y’, posteriormente entrega como salida el mismo diccionario donde la llave “a” tendrá su contenido original más ‘x’ y la llave ‘b’ tendrá su contenido original más ‘y’. CMD = {"ID": 55, "Data": "hola", "More": [ {"a": 1}, {"b":2}]}
@jjmadeo4 жыл бұрын
Martin, me encetaría que realizaras un video explicando el análisis de complejidad computacional de algún algoritmo, ya que en mi ultima entrevista no me fue bien por este tema, no supe analizar el costo computacional de mi algoritmo. saludos, me enseñas mucho
@Hadji4044 жыл бұрын
Lo mas sencillo que se me ocurre a esta hora es esto: function autocompletadoConFilter(palabras: string[], prefijo: string) { return palabras.filter(palabra => palabra.substring(0, prefijo.length) === prefijo) } Pero si no estuviese permitido hacerlo con el filter de ECMAScript, entonces optaria por el forEach que mantiene una legibilidad bastante similar (aunque ya pasaria a tambien ser O(N) de almacenamiento) Aca estan ambas soluciones implementadas con un test de unas 10.000 palabras: codepen.io/javierlazzarino/pen/YzWdWEg
@luisarturodelagarza1334 жыл бұрын
El for else en Python funciona si al iterar no se interrumpe con un break, se ejecuta el código dentro del else. Saludos.
@RoylanMartinez4 жыл бұрын
Hola, me acabo de suscribir por el simple hecho de fomentar este tipo de ejercicios de programación competitiva. Ojalá pongas algún otro reto u ejercicio a resolver entre los suscriptores
@aglon42884 жыл бұрын
Yo lo que haria, sin ver este video ni nada, haría una estructura de pila (con una lista o lo si ya está implementada..), recorreria el string posicion a posicion apilando cada elemento que abre ( (, { , [). Cada vez que encuentro uno que cierra ( ), }, ]) desapilaría y compararia si el que desapile es el mismo que el que lei, si son iguales prosigo, si son distintos informo de error y paro el algoritmo. Cabe destacar que pueden pasar tres escenarios: Pila con elementos y fin de hilera: ERROR Pila vacia e hilera con algun elemento que cierra (cosa que no puede desapilar): ERROR Pila vacia y fin de hilera: Exito
@bettinimarcelo3 жыл бұрын
Muy buena la opción de usar pares clave valor donde clave es el signo de apertura y valor el de cierre. Como novato que soy, no se me había ocurrido y es bastante obvio una vez que te lo enseñan. Gracias titán.
@acwolf8494 жыл бұрын
Contenido de calidad 🔥🔥🔥🔥🔥
@BettaTech4 жыл бұрын
Mil gracias!!!!
@ivanlhz4 жыл бұрын
Muy buenas, desde mi punto de vista antes de ponerme a programar una solición a un problema como este me gusta aplicar TDD. Es decir, primero hacer los tests, con todas las casuisticas posibles, e ir creando / modificando el código que vaya dando positivo en cada casuistica. Un saludo.
@Detodounpocoenyoutube4 жыл бұрын
Saludos, muy buen video, llamemos a los carácteres por su nombre, por lo menos asi lis conozco yo: paréntesis ( ) llaves { } y corchetes [ ] Gracias
@EduiNMarShalL3 жыл бұрын
Es verdad jeje
@nmarcel3 жыл бұрын
Recuerdo haber hecho ese mismo ejercicio en Clipper (allá por 1995) y fui el único del curso que lo tuvo 100% bueno (también usé un stack), je je.
@sanguchet36463 жыл бұрын
Yo lo había hecho haciendo un Split del string, sacando todos los (),[],{} que haya y le saco los espacios vacíos, asique solo cuento cuántos carácteres hay, si es par entonces está bien, si es impar entonces salta el return con el False
@Ditmaros14 жыл бұрын
function validate(test) { let regx1 = /\{\}/g; let regx2 = /\(\)/g; let regx3 = /\[\]/g; let len = test.length; for (let i = 0; i < len; i++) { test = test.replace(regx1, ""); test = test.replace(regx2, ""); test = test.replace(regx3, ""); if (test.length == 0) { return true; } } return false; }
@yeleqcrnoratasnipearataban58684 жыл бұрын
Hola betta! Creo que la implementacion correcta al nuevo problema seria usar una estructura Trie
@monofachero79413 жыл бұрын
Cuando mencionó el problema pensé en el uso de contadores y recorrer el string caracter por caracter, es una solución que con arreglos de caracteres es muy eficiente.
@JorgeLPausa2 жыл бұрын
Donde se puede encontrar el video donde se hace la revision del ultimo ejercicio?
@dwlince64734 жыл бұрын
En una materia de la universidad nos enseñaron sobre lexico,sintactico y semantico. donde desarrollamos el lexico y sintactivo que es la parte que mencionas todo de acuerdo al BNF y EBNF para definirla :D Saludos
@brandpcalderon53432 жыл бұрын
Me encantó la útlima solución, hora de implementarlo en Java :3
@JoseOncina4 жыл бұрын
Bueno, abajo tienes una solución en C++. En realidad la solución es solo el último for (de las líneas 27 a 29), lo demás es la lectura y preprocesado. Para compilar: g++ -std=c++2a -Wall -Wextra -pedantic -O3 pru.cc -o pru (ya lo sé, soy un poco exagerado con los warnings) Notas: 1) La opción -std=c++2a es necesaria porque estoy usando la función miembro "starts_with" que debería salir en la versión de C++ a publicar este año. 2) Tal como indica la documentación (www.cplusplus.com/reference/algorithm/lower_bound/), la función "lower_bound" tiene una comlejidad de log(N), donde N es el tamaño del vector. 3) Si no me equivoco, la complejidad de la búsqueda es de O(log(N)+n), donde N es el número de palabras y n es número de cadenas que tienen el prefijo buscado. (por los comentarios no me ha quedado claro si esto último había que contarlo). 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int main() { 10 string wordfile = "spanish.lst"; 11 string prefix="hola"; 12 13 ifstream is(wordfile); 14 15 if( !is ) { 16 cerr
@ramontomasevic3 жыл бұрын
Lo mejor de esos de los parentices es abrirlo y cerrarlo altiro el de cierre dejarlo abajo por ultimo para dejarlo presente que no se te olvide cerrar.
@FedeRacun4 жыл бұрын
Me pasaron este y me parecio muy bueno: Una funcion recibe un dia de la semana expresado en 3 letras 'MON', 'TUE', 'WED', etc y un numero (puede ser de 0 a 500). La funcion debe devolver el dia que corresponde a la suma del dia dado y el numero. Ej funcion('MON', 7) debe devolver 'MON'. funcion('MON',2) debe devolver 'WED'. function('TUE',15) debe devolver 'WED'
@arntor8353 Жыл бұрын
En python: def get_day(day, num): days = ("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN") return days[(days.index(day) + num) % 7] if day in days and 0
@patolote774 жыл бұрын
Excelente video. Gracias por compartir tus conocimientos!!!
@carlosp11164 жыл бұрын
Gracias por el video Bettatech!!!! Aprendo y me divierte más curiosear tu contenido que la u 😁. Saludos desde Perú!
@gabo_xp4 жыл бұрын
recuerdo que lo vi en mi curso de compiladores! pero ya no recuerdo como lo implemente !
@bilfro373 жыл бұрын
Este problema está muy bueno para implementar un autómata finito de pila. Muy interesante para pensarlo desde la perspectiva de los autómatas y los lenguajes formales.
@jimmymontenegro85173 жыл бұрын
Que entretenido, me gustó la última solución.
@luismontiel28003 жыл бұрын
como se llama el editor de texto que utilizas??
@giopattoduck67854 жыл бұрын
trae màs contenido así por favor está de lujo casi no hay en español!! soy fan
@luis96xd3 жыл бұрын
Excelente video, muy buenas explicaciones, me gustó mucho aprender todas estas soluciones 😄👍
@JoseOncina4 жыл бұрын
Si quieres hacerlo con le Bash de linux, basta con hacer: $ grep "^pref" spanish.lst donde "pref" es el prefijo que búscas y "spanish.lst" es el fichero de palabras. Desgraciadamente, la complejidad es lineal :-(
@diegoguzman12854 жыл бұрын
Sería muy interesante que intentaras hacer las soluciones un poco más TDD. Al menos en mi país a veces se nota la falta de experiencia en Unit testing y en las entrevistas se pone en evidencia
@tusbackingtrackes2 жыл бұрын
Paréntesis, corchetes y llaves. Todo tiene su nombre amigo
@eliaspaniagua10694 жыл бұрын
Y esto se puede hacer en Java? Perdonen la ignorancia
@DiegolVeintimilla4 жыл бұрын
Claro, con cualquier lenguaje.
@eliaspaniagua10694 жыл бұрын
@@DiegolVeintimilla sabes de alguien que lo halla hecho o similar?
@aglon42884 жыл бұрын
Se podría hacer con una BNF o una maquina de turing, pero no se si es valido jaja. Saludos. Buen Video.
@angelbarboza32544 жыл бұрын
Soy estudiante ISI de primer año, y aquí estoy viendo esto sin entender casi que algo :) jajaja, preparandome para futuro xD
@nazarenoalderete1002 жыл бұрын
Vamos ureeee yo soy de tercero jejeje
@eudyreynoso18894 жыл бұрын
Alguien sabe cual será la fuente que usa?
@gastonarielarias4 жыл бұрын
Hola buenas Martin!! estaria bueno que dejes el link del codigo con tu solución!! Saludos y a seguir que es de mucha ayuda.
@sneydergarcia19533 жыл бұрын
Disculpen mi estupidez pero con que de estructuras de datos se podría resolver?
@pepeluis7664 жыл бұрын
Ahí va mi propuesta de autocompletado con un árbol en java: github.com/pepeluis76/autocompletado_arbol/tree/master/autocompletado_arbol/src Un saludo. Como mejora de optimización de la solución , podríamos asignar a cada nodo del arbol, aparte de la letra, el numero de veces que aparece ( en la creación del arbol se va incrementado el valor con cada nodo con cada nueva palabra que pasa por esa rama). Luego ordenamos los hijos de un nodo por el número de veces que apareció la letra. Así, al mostrar las opciones de autocompletado primarían los hijos con mayor valor. De todas formas la solución presentada parece rapidísima. Saludos nuevamente.
@Wuilson9963 жыл бұрын
Mi solución en python. entrada = "[()]{()}{[()()]()}" entrada2 = "[(])" #funcion que verifica la entrada def is_valid(entrada): dic = {'[':']','{':'}','(':')'} valid = True aux = [] #toma el primer caracter y empieza a verificar si es apertura o cierre for character in entrada: if character in '({[': aux.append(character) else: try: if dic[aux[len(aux)-1]] == character: aux.pop(len(aux)-1) else: break except: valid = False break if aux: valid = False return valid print(is_valid(entrada2))
@BettaTech4 жыл бұрын
Puntos para aquellos que consigan resolver el reto con coste por debajo de O(N)! 😈😈😈😈😈 Añado, el coste ha de contarse el de buscar el conjunto de los prefijos. Es decir, queremos que el coste de la funcion autocomplete sea el menor posible. Si se ha de preprocesar el conjunto, vamos a asumirlo y listo, ya que siempre se ha de leer la entrada en algun momento. Tampoco contarenos el tiempo que tardas en imprimir la solucion, ya que eso ya seria en si mismo coste lineal.
@Alejandro-jo1fu4 жыл бұрын
O(n!), tómalo o déjalo (?)
@rainbow-jw3og4 жыл бұрын
@@lolimilesi1291 analisis algoritmico, personalmente creo que es lo que separa los buenos devs de los malos devs xd
@ebetanzosm4 жыл бұрын
Estimado Martín, si la entrada no está ordenada creo que no es posible bajar de O(n)
@BettaTech4 жыл бұрын
@@ebetanzosm Sure? 🤔🙄
@javiergavilanmerida21334 жыл бұрын
@@BettaTech ¿vale un create table words (word varchar(255) primary key) con su select correspondiente? No creo que exista nada más rápido que eso (a menos que te programes un arbol B, donde al final simplemente estarás haciendo lo mismo xD)
@ricardoguevara76463 жыл бұрын
Saludos, también existe una solucion con recursividad y sin pila suplementaria. =)
@Crus7734 жыл бұрын
Un clásico de PRO1 en la FIB ;)
@sebastianc45574 жыл бұрын
que tema utilizas para vim/neovim?
@LocalGhost_80804 жыл бұрын
Un videito de buenas prácticas para escribir código, porfas
@SheigonSheffield3 жыл бұрын
Como se haría en C para crear los pares? "(" es par de ")" "{" es par de "}" Gracias de antemano.
@lokenderossii3 жыл бұрын
Podría ser una función que devuelva el cierre con un switch case
@Fran-kb2wi4 жыл бұрын
Excelente contenido, me suscribo ! un gusto conocerte.
@KoffeeCoding4 жыл бұрын
excelentes videos siempreeee
@JoseOncina4 жыл бұрын
No conozco el lenguaje de programación que estás usando, pero ¿qué pasaría si haces un pop de una pila vacía? ¿qué valdría "topChar"? ¿qué pasa si la cadena que le pasas es ")"?
@AlphariusOmegonREAL3 жыл бұрын
Así hice el mio con python: def close(TopChar, character): abre = '([{' cierre = ')]}' for k,j in enumerate(abre): if j == TopChar: indO = k break for e,l in enumerate(cierre): if l == character: indC = e break if indO == indC: return True return False def comprobador(str): abre = '([{' stack = [] for i in str: if i in abre: stack.append(i) else: topChar = stack[-1] if close(topChar,i): stack.pop() if stack == []: return True return False intento1 = '[()]{}{[()()]}' intento2 = '[(])' print(comprobador(intento1)) print(comprobador(intento2))
@jorgecauich33674 жыл бұрын
Eres un capo, este tipo de vídeo ayudan a mejorar
@BettaTech4 жыл бұрын
Gracias!!!
@andresmoncada86374 жыл бұрын
Hola! Una solución rápida y sencilla: var string = '{[({}[]())]}'; var length = string.length; var count = 0; while (0 < string.length && count < length) { string = string.replaceAll('{}', '').replaceAll('[]', '').replaceAll('()', ''); count++; } console.log(string.length == 0 ? 'valid' : 'invalid');
@kiferingas1294 жыл бұрын
Para este caso está excelente pero si hubiera algún texto ("32") ya no funcionaría pero muy buena esa
@ivanlhz4 жыл бұрын
No sería valido cuando el orden de los cierres no es el correcto, un ejemplo { [ { ] } }
@kiferingas1294 жыл бұрын
@@ivanlhz de hecho si sería válido por qué desde ya sabe que está mal por qué al no poder hacer un replace el string si tendrá length por ende en el .log saldrá invalid
@ivanlhz4 жыл бұрын
@@kiferingas129 Pues si, había leido mal la solucion. El problema radica cuando agregas texto en medio de los cierres y no en el orden de los cierres. Lo mismo usando una expresion regular en los replace se podria solventar ese problema.
@kiferingas1294 жыл бұрын
@@ivanlhz si era lo que comentaba para este caso está bien pero si añades texto ya no funciona aún que como dices con una expresión regular se solventa
@suchox4 жыл бұрын
suoer interesantes esta serie de video. 👌
@danielsarmientobolimbo67114 жыл бұрын
Saludos desde Perú, buen contenido tiene tus videos. 😀
@BettaTech4 жыл бұрын
Muchas gracias! 😊
@yaredg4 жыл бұрын
Excelente contenido 👌👌
@valderramaramirezangelgabr62894 жыл бұрын
hola, alguien sabe cómo instalar un autocompletado a Neovim? con vim-plug supuestamente tengo instalado YouCompleteMe, pero no autocompleta :( tengo Ubuntu 20.04 LTS
@valderramaramirezangelgabr62894 жыл бұрын
de antemano gracias
@juanmartinzuluagaacevedo7594 жыл бұрын
@@valderramaramirezangelgabr6289 Hola! Yo utilizo coc, quizá te sirva. github.com/neoclide/coc.nvim
@valderramaramirezangelgabr62894 жыл бұрын
@@juanmartinzuluagaacevedo759 muchas gracias!! lo probaré
@xjfw24 жыл бұрын
Soy novato, por qué no contar los simbolos y si la cantidad de { es diferente a la de } entonces es inválido?
@kiferingas1294 жыл бұрын
Por qué no tiene en cuenta el orden por ejemplo (}{) tiene la misma cantidad de ( ) y { } pero no están bien posicionados
@xjfw24 жыл бұрын
@@kiferingas129 tenés razón, lo tendria que haber scripteado y me daba cuenta al instante
@johncerpa37824 жыл бұрын
Excelente video
@michaelpaul71754 жыл бұрын
para resolver el ejercicio creo que se puede hace con arbol trie
@diegocazon52394 жыл бұрын
yo lo relice en python y creo que tenes razon, pero creo que es dificil pasar de un tiempo de ejecucion lineal
@BettaTech4 жыл бұрын
Cual seria el coste de encontrar el conjunto de palabras que buscamos en un TRIE?
@michaelpaul71754 жыл бұрын
@@BettaTech en el peor de los casos, O(n) porque si el prefix seria un carácter entonces las posibles palabras seria todas las palabras. o no ? también O(h) si el prefix.length == h, siendo h la altura de árbol entonces solo una posible palabra
@eloytolosagomez52983 жыл бұрын
El primer problema se podría solventar igual con un integer = 0. Cada vez que abras paréntesis, corchetes... sumas uno y cuando encuentres un cierre restas uno. ¡Así gastas menos memoria! Me encantan tus vídeos sigue así
@srealmoreno3 жыл бұрын
Se hace con un string ya que se debe saber el último carácter de apertura para verificarlo con el de cierre. Tu propuesta se rompería con: "((]]"
@andreperalta77204 жыл бұрын
Aquí está mi solución al problema del final: github.com/Andre-PeraltaM/DocumentosVarios/blob/master/Autocompletado.ipynb Es sencillo y fácil de entender , espero lo veas.
@royerguerrerop59824 жыл бұрын
Intenta pasarle un 1 millon de palabraas o mas
@royerguerrerop59824 жыл бұрын
github.com/royerguerrero/autocompleter
@andreperalta77204 жыл бұрын
@@royerguerrerop5982 Jajajaja en el ejemplo lo intenté con 270, podría intentar mandarle un libro en pdf
@edwarfrankponsbessio88213 жыл бұрын
Tarde, recién veo esto!!! "use strict" let anterior = ""; const validate = text => { let res = text.replace(/({}|\[\]|\(\))/g, ''); if (res != text && res != "" && anterior != res) return validate(anterior = res && res); return res == ""; } Cómo lo ves ?
@rimuhrimu4 жыл бұрын
me acabo de dar cuenta, ¿eso de allá atras es una gameboy de las super viejas? no se ve bien porque no está enfocado pero si lo parece
@BettaTech4 жыл бұрын
Si, lo es! jaja estoy pensando en restaurarla porque la pantalla esta mal =(
@rimuhrimu4 жыл бұрын
@@BettaTech JAJA lo sabia! yo tambien tengo una y pues tambien está dañada que sad :´u espero que puedas repararla es una reliquia
@tonatiuhislas80064 жыл бұрын
Esta es mi solucion. No soy programador experto, asi que una disculpa por lo burdo de la solucion. Aun le faltan algunas validaciones como por ejemplo un regex para validar si el string es puramente los caracteres, pero en si mi solucion seria esta. github.com/TonaIslas-Git/Python/blob/main/betatech.py
@bettymaldonado28804 жыл бұрын
👏🏻👏🏻👏🏻
@melchiah66033 жыл бұрын
Estaría padre que indique de color rojo el que no se cierta o no se abre.
@Wuilson9963 жыл бұрын
mi solución en js var entrada = "[()]{()}{[()()]()}"; var entrada2 = "[()"; function is_valid(entrada){ dic = [['[',']'],['{','}'],['(',')']]; var valid = true; var aux = []; var opening = "({["; var closed = ")}]"; //toma el primer caracter y empieza a verificar si es apertura o cierre if(!closed.includes(entrada.charAt(0))){ for(i = 0; i < entrada.length; i++){ character = entrada.charAt(i); if(opening.includes(character)){ aux[aux.length] = character; }else{ for(j = 0; j < 3; j++){ //char = dic[i][1]; if(dic[j][1] == character){ //console.log(char); if(dic[j][0] == aux[aux.length-1]){ console.log(aux,dic[j][1]); aux.pop(aux.length-1); }else{ break; } } } } } }else{ valid = false; } if(aux.length != 0){ valid = false; } return valid; } console.log(is_valid(entrada2));
@danielclow2 жыл бұрын
A mi se me ocurrió algo parecido ala tercera respuesta, pero lo hice en menos líneas, claro solo lo hice con js, estuvo bueno, pensé que me demoraría menos, pero me costo xd
@jsonft54174 жыл бұрын
Algoritmo de betta: un PDA
@uninhm4 жыл бұрын
Solución en Python: repl.it/@unaihernandez/Bettaproblem-2
@BettaTech4 жыл бұрын
Se os ocurre alguna solución que no sea O(N)? 😈
@uninhm4 жыл бұрын
@@BettaTech Lo único que se me ocurre sería si el conjunto de palabras está ordenado.
@uninhm4 жыл бұрын
@@BettaTech Ahí está, lo mejor que pude conseguir para la prueba fue una lista de 80300 palabras :P PD: El link está actualizado con la nueva solución O(log n)
@carlosarena98644 жыл бұрын
Como no sé de algoritmos lo haría con un query de MySQL conectado al PHP para mostrar el resultado en un html. Pensar correcto es lo que hago 😂
@juanandresmolina97044 жыл бұрын
En realidad el lenguaje es lo de menos, lo importante es que la lógica sea correcta y eficiente, así que un Query de MySQL sería totalmente válido.
@moisescaicedo40784 жыл бұрын
La tercera fue la manera de solucionarlo...!
@estebanruizrodriguez4 жыл бұрын
Más vale tarde que nunca. Aquí va mi propuesta: codepen.io/stevebass7/pen/vYKoowj Cargo un texto del Quijote repetido varias veces para superar 1.000.000 de palabras. Uso de debounce para suavizar la búsqueda con un límite de 1000 palabras para no colapsar (de sobra para un autocompletado, solo para probar el performance). Toma en cuenta los separadores (espacios, puntos, comas) con regex. Al final el código de búsqueda es lo de menos con tantas pijotadas.
@uninhm4 жыл бұрын
Solución en Nim: play.nim-lang.org/#ix=2Dm1
@Luis-ww1kx4 жыл бұрын
Les saluda un colega back-end. Se que muchos de aqui son desarrolladores front-end, sin embargo les dejo mi pequeña aplicación de "Autocompletado" al puro estilo BACK. Para los que se sientan dolidos en su alma, incluí Swagger para darle un poco de color y emoción como a ustedes les gusta :) ... github.com/luisorellana777/autocompletion-api
@JorgeLPausa2 жыл бұрын
Hola, el link de slack me pone que ya no funciona. Dejo por aca mi solucion function validate(text: string) { let stack: string[] = []; let parenthesisArray = text.split(""); let closers: { [key: string]: string } = { "[": "]", "(": ")", "{": "}", }; for (const character of parenthesisArray) { if (openCharacter(character)) { stack.push(character); } else if (character === closers[stack[stack.length - 1]]) { stack.pop(); } else { return false; } } return stack.length === 0; } function openCharacter(character: string): boolean { return ["{", "(", "["].includes(character); }
@micanaldaro4 жыл бұрын
( : paréntesis [ : Corchete { : Llave
@BettaTech4 жыл бұрын
Esooo 😂😂
@nahuelahumada93944 жыл бұрын
Lo que te dirían en una entrevista con la tercera solución es: "Resuelve, pero con más complejidad de la que debería". Siempre busquen hacer la menor cantidad de recorridos posibles
@blissofking33354 жыл бұрын
Gracias por el video
@BettaTech4 жыл бұрын
Gracias a tí por ver el vídeo! 😊
@petterjhuniorgarciainfante57323 жыл бұрын
La solucion que se me ocurrio en Kotlin: pl.kotl.in/tFT1P1ZuE
@aronjham.oviedojhamilaron49304 жыл бұрын
DIOS os bendiga. :D
@MrJDChavarro4 жыл бұрын
Aqui mi solucion: codepen.io/jdchavarro/pen/rNLZRLr Intente hacerlo por medio de un arbol, al final del codigo deje una solucion mas sencilla de implementar
@sebastiansuarezvalencia51144 жыл бұрын
Mi solución es más elegante (JS avanzado 😎): console.log(true); console.log(true); console.log(false);
@wilmerterrero4 жыл бұрын
En una entrevista real ¿cuánto tiempo te dan para resolver este tipo de ejercicios? Porque con los nervios y el estrés dudo que me salga una solución así jajaja
@yonatanaquinteror29894 жыл бұрын
A mi me dieron 15 minutos
@arntor8353 Жыл бұрын
@@yonatanaquinteror2989 alv
@angelzc9154 жыл бұрын
Ala si sabia que harias esto hubiera participado :c
@rainbow-jw3og4 жыл бұрын
tengo el examen de mercado libre de dev backend es una es la empresas mas importante de latam
@jdcr14254 жыл бұрын
compartelo bro
@wilermarinez3 жыл бұрын
DE
@locochon92684 жыл бұрын
ay :c pense que el reto era reciente y lo hice de todas formas
@locochon92684 жыл бұрын
execution_stack = [] adjective = { "bald", "attractive", "beautiful", "chubby", "brave", "calm", "delightful", "ckumsy", "big", "fat", "gigantic", "great", "huge", "inmense", "large" } singular_verb = { "is", "does", "has", "can", "could", "may", "might", "must", "will", "should", "would" } singular_noun = { "bed", "sister", "bike", "dog", "computer", "room", "cat", "bird", "tv", "guitar" } adverb = { "daily", "happily", "usually", "potentially", "helpfully", "crossly", "poorly", "solemmly", "softly", "heavily", "quicker" } # S -> NOUN_PHRASE VERB_PHRASE DOT S # S -> lambda # VERB_PHRASE -> # NOUN_PHRASE -> NOUN_PHRASE2 # NOUN_PHRASE2 -> NOUN_PHRASE # NOUN_PHRASE2 -> # DOT -> . # S = 4 # NOUN_PHRASE = 1 # NOUN_PHRASE2 = 5 # VERB_PHRASE = 2 # DOT = 3 # = 1000 # = 1001 # = 1003 # = 1002 # . = 1004 reverse_sugestion_dict = { 1000: singular_verb, 1001: adverb, 1002: adjective, 1003: singular_noun, 1004: {"."} } productions = { 1 : [4 ,3, 2, 1], 2: [], 3: [1001, 1000], 4: [5, 1002], 5: [1], 6: [1003], 7: [1004], } predict_table = { # First (4, 1002) : 1, (1, 1002) : 4, (2, 1000) : 3, (2, 1002) : 5, (3, 1004) : 7, (5, 1003) : 6, (5, 1002) : 5, # Follow (1, 1000) : 2, (2, 1004) : 2, (3, 1003) : 2, (3, 1002) : 2, } suggestions = { 1: [1002], 3: [1004], 2: [1000], 4: [1002], 5: [1002, 1003, 1000] } def parser(tokens): print(tokens) global execution_stack execution_stack = [1003, 4] for token in tokens: while True: top = execution_stack.pop() if top < 1000: # non terminal symbol axis = (top, terminal(token.lower())) print(axis) if axis in predict_table: row = predict_table[axis] execution_stack += productions[row] print(execution_stack) else: print("Error de sintaxis") else: # terminal symbol if terminal(token.lower()) == top: break else: print("Hubo un error con tu sintaxis") return if execution_stack[-1] == 1003: print("Felicidades sabes escribir :D") def terminal(token): if token in adjective: return 1002 if token in singular_verb: return 1000 if token in singular_noun: return 1002 if token in adverb: return 1001 if token == "EOF": return 1003 if token == ".": return 1004 return 1005 # any other phrase def getSugestions(): print("Tu autocompletado") global execution_stack global suggestions top = execution_stack[-1] if top >= 1000: if top in reverse_sugestion_dict: target = reverse_sugestion_dict[top] for suggestion in target: print(suggestion) elif top in suggestions: targets = suggestions[top] for target in targets: for sug in reverse_sugestion_dict[target]: print(sug) buffer_text = "" while True: print(f'Texto en el "corta papeles": {buffer_text}') text = input(f"Ingresa tu oración aqui y presiona enter para el autocompletado -> {buffer_text}") if text == ":c": buffer_text = "" else: buffer_text += text tokens = buffer_text.split() parser(tokens) getSugestions()
@locochon92684 жыл бұрын
Así fue como lo soluciones, con una analizador sintactico y separando todo por espacios, no tiene semantica, por eso el autocompletado es muy basico
@sebastiansuarezvalencia51144 жыл бұрын
Modifique un poco el ejercicio para que pudiera leer un string con "código" y con símbolos modificables, por si a alguien le interesa verlo y dar sugerencias: gist.github.com/SuarezValenciaSebastian/9332da8a7bb0519654e367dfc2351963
@bigWazaa2 жыл бұрын
Me acabo de mirar tu solución y veo que has llegado a la misma idea que yo, usar una cola LIFO. string test = "[({})]"; bool Check(string toCheck) { Stack[char] check = new Stack[char](); for (int i =0; i
@juanacosta78264 жыл бұрын
no entiendo ni bosta jajaj :(
@rinconfede4 жыл бұрын
no estas solo amigo xD
@warzonesincortes-espanol17472 жыл бұрын
Mac Miller programador.
@gattoalaparato4 жыл бұрын
Mi solución! github.com/debello/Bettatech-desafio2
@antonygiomarx4 жыл бұрын
Primer comentario, sos Grande Martín.
@BettaTech4 жыл бұрын
Vosotros sí que soys grandes :D
@lolimilesi12914 жыл бұрын
yo entendí que hay que hacer algo como esto codepen.io/taquion009/pen/XWXBMVZ?editors=0011
@braianledantes57724 жыл бұрын
Listo acá les dejo mi solución en Java: github.com/chutebnl/Autocompletdo/blob/master/problemas/Autocompletado.java
@royerguerrerop59824 жыл бұрын
github.com/royerguerrero/autocompleter El reto terminado, creo
@aralizavid3 жыл бұрын
///////////////////////////////////////////////////////////////////////// const array = ['hola','qundo','ivan', 'ivaN','samira,']; const result = array .map((item) => item.toLowerCase().replace(/[.,!]/g,'')) .reduce((acc,item) => { acc[item] = (acc[item] || 0)+1; return acc; },{}); console.log(result); //////////////////// mi solucion usando reduce y map , bueno esto teniendo ya el texto convertido en array
@voces3524 жыл бұрын
También se puede reemplazar los de apertura en 1 Y los de cierre en -1, se itera el array y se van sumando, si en algún momento la suma es -1 o si al final no es 0 entonces regresa falso 🤣
@BettaTech4 жыл бұрын
Y como distingues que {{)) es invalido? 🤔
@Totti619YT4 жыл бұрын
Hola! Aquí te dejo mi solución al problema del autocompletado github.com/Totti619/bettatech_autocompletado
@MaxJusth4 жыл бұрын
Lel
@BettaTech4 жыл бұрын
Se os ocurre alguna solución que no sea O(N)? 😈
@Totti619YT4 жыл бұрын
@@BettaTech sortear las palabras antes de aplicar el filtro seguiría siendo O(N)? 😅
@uninhm4 жыл бұрын
@@Totti619YT Sería peor, el hecho de ordenarlas suele tardar O(n log(n)), depende de la implementación del sort.
@uninhm4 жыл бұрын
Hay algunos sorts lineales, pero la solución seguiría siendo lineal.