Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Panic0 en 30 Enero 2022, 22:59 pm



Título: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
Publicado por: Panic0 en 30 Enero 2022, 22:59 pm
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.
Código:
 
       
#!/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!!!


Título: Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
Publicado por: stack en 30 Enero 2022, 23:42 pm
Citar
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.


Título: Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
Publicado por: Panic0 en 31 Enero 2022, 00:39 am
Pues deberias exponer como lo hiciste......así te podran dar mejor info.

Me olvidé de ponerlo, ahí lo dejo.


Gracias !!


Título: Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
Publicado por: MinusFour en 31 Enero 2022, 15:37 pm
¿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

Código:
         
#!/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)


Título: Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
Publicado por: Panic0 en 31 Enero 2022, 21:34 pm
¿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ó.



Título: Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
Publicado por: MinusFour en 1 Febrero 2022, 01:23 am
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:

Código:
[]{}[[]]{()}{Hello()}

Lo que significa que:

Código
  1.            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.