elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]  (Leído 1,175 veces)
Panic0

Desconectado Desconectado

Mensajes: 203



Ver Perfil
Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
« 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!!!


« Ú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 Desconectado

Mensajes: 260



Ver Perfil
Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
« Respuesta #1 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.


En línea

ad maiora natus sum
Panic0

Desconectado Desconectado

Mensajes: 203



Ver Perfil
Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
« Respuesta #2 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 !!
En línea

Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
MinusFour
Moderador Global
***
Conectado Conectado

Mensajes: 5.466


I'm fourth.


Ver Perfil WWW
Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
« Respuesta #3 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)
En línea

Panic0

Desconectado Desconectado

Mensajes: 203



Ver Perfil
Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
« Respuesta #4 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ó.

En línea

Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
MinusFour
Moderador Global
***
Conectado Conectado

Mensajes: 5.466


I'm fourth.


Ver Perfil WWW
Re: Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
« Respuesta #5 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.
« Última modificación: 1 Febrero 2022, 01:25 am por MinusFour » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[firefox] mostrar pares de paréntesis
Software
lnvisible 0 827 Último mensaje 19 Septiembre 2011, 12:55 pm
por lnvisible
Devolver True si el numero es par [python]
Programación General
bichotg 5 6,110 Último mensaje 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 10,451 Último mensaje 21 Junio 2013, 15:21 pm
por Linton
[Python] Retornar valores en funciones de orden superior (Solucionado)
Scripting
DeMoNcRaZy 7 3,481 Último mensaje 19 Agosto 2015, 02:14 am
por DeMoNcRaZy
La condicion true de un while en python
Scripting
Ali Baba 2 1,609 Último mensaje 6 Mayo 2017, 19:25 pm
por Ali Baba
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines