Autor
|
Tema: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON] (Leído 3,102 veces)
|
Panic0
Desconectado
Mensajes: 218
|
Hola a todos, en una entrevista como Python dev (junior) me preguntaron lo siguiente: Dado un string Sequence, Retornar true si hay uno o más pares de paréntesis válidos, o si Sequence es un string vacío Ejemplos de inputs válidos: [] () []{}[[]]{()}{Hello()} No válidos (] {(}) {}(()[)] Lo logré hacer, pero la forma en la que yo lo hice para los entrevistadores no fue válido, por eso vengo a preguntar, como lo harían ustedes? Esta fue la forma en la que lo hice. #!/usr/bin/env python3 import fileinput from pprint import pprint
def find_corrupted(line): mapping = { "]": "[", "}": "{", ")": "(", ">": "<", }
stack = [] for char in line: if char in mapping.values(): stack.append(char) elif mapping[char] == stack[-1]: stack.pop() else: return char
def parse_input(input_stream): for line in input_stream: yield find_corrupted(line.strip())
def solve(input_stream): scores = { None: 0, ")": 3, "]": 57, "}": 1197, ">": 25137, }
return sum(scores[char] for char in parse_input(input_stream))
if __name__ == "__main__": answer = solve(fileinput.input()) print(answer)
Gracias!!!
|
|
« Última modificación: 31 Enero 2022, 00:38 am por Panic0 »
|
En línea
|
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
|
|
|
stack
Desconectado
Mensajes: 481
|
Lo logré hacer, pero la forma en la que yo lo hice para los entrevistadores no fue válido, Pues deberias exponer como lo hiciste......así te podran dar mejor info.
|
|
|
En línea
|
|
|
|
Panic0
Desconectado
Mensajes: 218
|
Pues deberias exponer como lo hiciste......así te podran dar mejor info.
Me olvidé de ponerlo, ahí lo dejo. Gracias !!
|
|
|
En línea
|
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
|
|
|
MinusFour
|
¿Y la suma que tiene que ver? Tampoco entiendo el return char que haces ahí... Tu función tenía que haber retornado true o false. Eso es lo que dice la pregunta del ejercicio. Espero que no hayas copiado y pegado código, los entrevistadores se dan cuenta de eso... Esto se ve muy claro que es una respuesta a un reto que alguien ha puesto en internet... https://adventofcode.com/2021/day/10 #!/usr/bin/env python3 import fileinput from pprint import pprint
def find_corrupted(line): mapping = { "]": "[", "}": "{", ")": "(", ">": "<", }
stack = [] for char in line: if char in mapping.values(): stack.append(char) elif mapping[char] == stack[-1]: stack.pop() else: return char
def parse_input(input_stream): for line in input_stream: yield find_corrupted(line.strip())
def solve(input_stream): scores = { None: 0, ")": 3, "]": 57, "}": 1197, ">": 25137, }
return sum(scores[char] for char in parse_input(input_stream))
if __name__ == "__main__": answer = solve(fileinput.input()) print(answer)
|
|
|
En línea
|
|
|
|
Panic0
Desconectado
Mensajes: 218
|
¿Y la suma que tiene que ver? Tampoco entiendo el return char que haces ahí... Tu función tenía que haber retornado true o false. Eso es lo que dice la pregunta del ejercicio. Espero que no hayas copiado y pegado código, los entrevistadores se dan cuenta de eso... Esto se ve muy claro que es una respuesta a un reto que alguien ha puesto en internet... https://adventofcode.com/2021/day/10¿¿Como estás?? ¿?/¿Todo bien?? Si lo se, eso era un solución de algo externo que se usó como referencia (ellos mismos, la pusieron (los entrevistadores)), no puse mi código porque no lo encontré (Mejor dicho, la pc que me prestaron para la entrevista en el momento hizo que no me pudiese llevar el código a casa)... Fue un error muy grande no citar el código de referencia!! Mil disculpas y ya lo agregó.
|
|
|
En línea
|
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
|
|
|
MinusFour
|
Pues sin saber que código usaste, difícil saber que estaba mal. El algoritmo que has puesto debería funcionar para poder obtener un total de errores... el enunciado del problema simplemente dice que debe regresar true o false dependiendo si hay brazos/corchetes/paréntesis correspondientes. No hay que contar nada, al primer error debe regresar false y si no hay errores pues regresar true. Contrario a ese código que cuenta "todos" los errores o 0 en caso de no haber errores. Y ese código tampoco funciona para el input dado, porque el código solo considera brazos/corchetes/paréntesis. Y tu tienes en una línea del input: []{}[[]]{()}{Hello()} Lo que significa que: return char
Debería fallar cuando llegue a la letra H. En cuanto a los otros aspectos del script, no se muy bien python para decir si la sintaxis es valida. Pero si puedo entender el algoritmo (o la intención del algoritmo). Por cierto, importaste pprint y nunca lo utilizaste.
|
|
« Última modificación: 1 Febrero 2022, 01:25 am por MinusFour »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[firefox] mostrar pares de paréntesis
Software
|
lnvisible
|
0
|
1,438
|
19 Septiembre 2011, 12:55 pm
por lnvisible
|
|
|
Devolver True si el numero es par [python]
Programación General
|
bichotg
|
5
|
7,211
|
22 Febrero 2012, 03:05 am
por [Case]
|
|
|
[JS] ¿Programa para sumar los números pares de un intervalo dado?
« 1 2 »
Scripting
|
Linton
|
11
|
12,541
|
21 Junio 2013, 15:21 pm
por Linton
|
|
|
[Python] Retornar valores en funciones de orden superior (Solucionado)
Scripting
|
DeMoNcRaZy
|
7
|
4,650
|
19 Agosto 2015, 02:14 am
por DeMoNcRaZy
|
|
|
La condicion true de un while en python
Scripting
|
Ali Baba
|
2
|
2,507
|
6 Mayo 2017, 19:25 pm
por Ali Baba
|
|