Te pediré que resuelvas algunos problemas de programación usando Python y que me des el código, que debe ser lo suficientemente comprensible y el algoritmo debe ser eficiente y considerar todos los posibles casos especiales y manejar entradas grandes de manera eficiente. Cuentas con 10 minutos como tiempo maximo para realizar cada tarea ¿Está bien?
Si no has visto la primera parte donde te explico como proceder, aca te dejo el link!
https://thewhitecode.com/blog/2567
Ejercicio #4: Borrar valores duplicados
Escriba una función que dada una cadena de entrada s
devuelva el promedio redondeado hacia abajo de todos los números en la cadena.
los valores de entrada están separados por comas, ignore los valores que no sean números. Si la entrada no contiene ningún número, la funcion debe regresar cero, por ejemplo entrada: 1, 2.5, e, 7
, salida: 3
1 2 3 4 5 6 7 8 9 10 | def rounded_average(s): numbers = [] for x in s.split(','): try: numbers.append(float(x)) except ValueError: pass if len(numbers) == 0: return 0 return int(sum(numbers) // len(numbers)) |
La función toma una cadena de entrada s
como entrada y devuelve el promedio redondeado hacia abajo de todos los números de la cadena. Los valores de entrada están separados por una coma. Los valores no numéricos se ignoran. Si la cadena de entrada no contiene ningún número, la salida es cero.
La función primero inicializa una lista vacía
de números para almacenar todos los números en la cadena de entrada. Luego itera
sobre la cadena, dividiéndola en comas usando el método split()
. Para cada elemento x
en la lista
resultante, intenta convertirlo en un float
usando la función float()
dentro de un bloque try-except
.
Si la conversión es exitosa, el valor float
se agrega a la lista de números. Si no, el elemento es ignorado.
A continuación, la función comprueba si el input esta vacío. Si es así, la función devuelve 0
. De lo contrario, calcula la suma
de todos los números en la lista de números usando la función sum()
, la divide por la longitud de la lista de números usando la función len()
y redondea hacia abajo usando el operador //
. Luego, la función devuelve el promedio redondeado a la baja como un número entero.
Ten en cuenta que esta implementación asume que la cadena de entrada contiene solo números válidos separados por comas. Si la cadena de entrada puede contener una entrada no válida en un formato diferente, es posible que se deba modificar el código para manejar ese caso. Sin embargo no hubo ninguna exigencia mas por parte del locutor, asi que, trabajo echo.
¿Puedes generar un código mejor y más rápido usando una estructura de datos?
El código que proporcionamos anteriormente ya usa una estructura de datos simple, una lista
, para almacenar los números en la cadena de entrada. Sin embargo, podemos optimizar
el código utilizando una lamda expresion
en lugar de una lista de comprensión para analizar la cadena de entrada, lo que evita la necesidad de almacenar todos los números en la memoria. Aquí está el código actualizado:
1 2 3 | def rounded_average(s): numbers = (float(x) for x in s.split(',') if x.strip().replace('.', '', 1).isdigit()) return int(sum(numbers) // len(numbers)) if numbers else 0 |
La variable de números ahora es una lamda expresion
en lugar de una lista de comprensión. La expresión genera una secuencia de flotantes
dividiendo la cadena de entrada en comas usando el método split()
, eliminando los espacios en blanco iniciales y finales de cada elemento usando el método strip()
y verificando si la cadena resultante contiene solo dígitos y como máximo un decimal punto utilizando el método isdigit()
y el método replace()
.
El resto del código es similar a la implementación anterior. Si los números están vacíos, la función devuelve 0
. De lo contrario, calcula la suma y el promedio redondeado hacia abajo de la secuencia de flotantes y devuelve el resultado como un número entero.
Esta implementación debería ser más eficiente en memoria que la anterior, especialmente para cadenas de entrada grandes.
El Manual de los algoritmos y las estructuras de datos.
¿Quieres estar preparado para cualquier entrevista
de trabajo en programación? El Manual es la guía esencial que todo programador debe tener. Con explicaciones
detalladas y ejemplos
prácticos, aprenderás
los algoritmos más usados y complejos que necesitas conocer para destacar en cualquier entrevista
. ¡No pierdas la oportunidad de obtener esta herramienta invaluable para tu carrera!
Descarga el manual directamente desde este enlace
https://leanpub.com/elmanualdelosalgoritmosylasestructurasdedatosfondoblanco
No te pierdas la segunda parte con otro ejemplo de ejercicio en una oferta de trabajo!
¿Te ha gustado?, como lo solucionarías tu?
Dejame saber tu opinion en los comentarios!