Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@


# Checkpoints will not be pushed.
.ipynb_checkpoints
.venv
.env
322 changes: 321 additions & 1 deletion notebook/problems.es.ipynb
Original file line number Diff line number Diff line change
@@ -1 +1,321 @@
{"cells":[{"attachments":{},"cell_type":"markdown","id":"27b09e13","metadata":{},"source":["# Problemas de optimización de algoritmos"]},{"attachments":{},"cell_type":"markdown","id":"ed05e9bf","metadata":{},"source":["## Ejercicio 1\n","### Optimización de código para procesamiento de texto\n","\n","Se te ha entregado un código de procesamiento de texto que realiza las siguientes operaciones:\n","\n","1. Convierte todo el texto a minúsculas.\n","2. Elimina los signos de puntuación.\n","3. Cuenta la frecuencia de cada palabra.\n","4. Muestra las 5 palabras mas comunes.\n","\n","El código funciona, pero es ineficiente y puede optimizarse. Tu tarea es identificar las áreas que pueden ser mejoradas y reescribir esas partes para hacer el código mas eficiente y legible.\n"]},{"cell_type":"code","execution_count":1,"id":"8467465b","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["'the': 5 times\n","'of': 3 times\n","'in': 2 times\n","'a': 2 times\n","'she': 2 times\n"]}],"source":["import string\n","\n","def process_text(text):\n"," # Texto a minuscula\n"," text = text.lower()\n","\n"," # Eliminación de puntuaciones\n"," for p in string.punctuation:\n"," text = text.replace(p, \"\")\n","\n"," # Split text into words\n"," words = text.split()\n","\n"," # Conteo de frecuencias\n"," frequencies = {}\n"," for w in words:\n"," if w in frequencies:\n"," frequencies[w] += 1\n"," else:\n"," frequencies[w] = 1\n","\n"," sorted_frequencies = sorted(frequencies.items(), key = lambda x: x[1], reverse = True)\n","\n"," # Obtener las 5 palabras más comunes\n"," top_5 = sorted_frequencies[:5]\n"," \n"," for w, frequency in top_5:\n"," print(f\"'{w}': {frequency} times\")\n","\n","text = \"\"\"\n"," In the heart of the city, Emily discovered a quaint little café, hidden away from the bustling streets. \n"," The aroma of freshly baked pastries wafted through the air, drawing in passersby. As she sipped on her latte, \n"," she noticed an old bookshelf filled with classics, creating a cozy atmosphere that made her lose track of time.\n","\"\"\"\n","process_text(text)"]},{"cell_type":"markdown","id":"29040779","metadata":{},"source":["Puntos a optimizar:\n","\n","1. **Eliminar los signos de puntuación**: Usar `replace` en un ciclo puede ser ineficiente, especialmente con textos largos. Busca una formas eficiente de eliminar los signos de puntuación.\n","2. **Contador de frecuencia**: El código verifica la existencia de cada palabra en el diccionario y luego actualiza su cuenta. Esto puede hacerse mas eficientemente con ciertas estructuras de datos en Python.\n","3. **Ordenar y seleccionar:** Considera si hay una forma mas directa o efectiva de obtener las 5 palabras mas frecuentes sin ordenar todas las palabras.\n","4. **Modularidad**: Divide el código en funciones mas pequeñas para que cada una puede realizar una tarea específica. Esto no solo optimizará el desempeño, sino también hará el código mas legible y mantenible."]},{"cell_type":"code","execution_count":2,"id":"57cd6641","metadata":{},"outputs":[],"source":["# TODO"]},{"attachments":{},"cell_type":"markdown","id":"011996bc","metadata":{},"source":["## Ejercicio 2\n","### Optimización de código para procesamiento de listas\n","\n","Se te ha dado el siguiente código que realiza operaciones en una lista de números para:\n","\n","1. Filtrar los números pares.\n","2. Duplicar cada número.\n","3. Sumar todos los números.\n","4. Verificar si el resultado es un número primo.\n","\n","El código entregado logra los objetivos, pero puede ser ineficiente. Tu tarea es identificar y mejorar las partes de ese código para mejorar su eficiencia."]},{"cell_type":"code","execution_count":3,"id":"783d03a0","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Result: 60, ¿Prime? No\n"]}],"source":["import math\n","\n","def is_prime(n):\n"," if n <= 1:\n"," return False\n"," for i in range(2, int(math.sqrt(n)) + 1):\n"," if n % i == 0:\n"," return False\n"," return True\n","\n","def process_list(list_):\n"," filtered_list = []\n"," for num in list_:\n"," if num % 2 == 0:\n"," filtered_list.append(num)\n"," \n"," duplicate_list = []\n"," for num in filtered_list:\n"," duplicate_list.append(num * 2)\n"," \n"," sum = 0\n"," for num in duplicate_list:\n"," sum += num\n","\n"," prime = is_prime(sum)\n"," \n"," return sum, prime\n","\n","list_ = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n","result, result_prime = process_list(list_)\n","print(f\"Result: {result}, ¿Prime? {'Yes' if result_prime else 'No'}\")"]},{"cell_type":"markdown","id":"128d564e","metadata":{},"source":["Puntos a optimizar:\n","\n","1. **Filtrar las números**: El código recorre la lista original para filtrar los números pares. Considera una forma mas eficiente de filtrar la lista.\n","2. **Duplicación**: La lista es atravesada varias veces. ¿Hay alguna manera de hacer esto mas eficientemente?\n","3. **Suma**: Los números en la lista se suman a traves de un bucle. Python trae incluidas unas funciones que pueden optimizar esto.\n","4. **Función `is_prime`**: Aunque ésta función es relativamente eficiente, investiga si hay maneras de hacerla aun más rápida.\n","5. **Modularidad**: Considera dividir el código en funciones más pequeñas, cada una enfocada en una tarea específica."]},{"cell_type":"code","execution_count":4,"id":"f40e35d6","metadata":{},"outputs":[],"source":["# TODO"]},{"attachments":{},"cell_type":"markdown","id":"1af70806","metadata":{},"source":["Ambos ejercicios ayudarán a mejorar tu habilidad de optimizar el desempeño del código y te darán un mejor entendimiento de como las diferentes estructuras de datos y técnicas de programación pueden afectar la eficiencia de tu código."]}],"metadata":{"interpreter":{"hash":"9248718ffe6ce6938b217e69dbcc175ea21f4c6b28a317e96c05334edae734bb"},"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.4"}},"nbformat":4,"nbformat_minor":5}
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"id": "27b09e13",
"metadata": {},
"source": [
"# Problemas de optimización de algoritmos"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "ed05e9bf",
"metadata": {},
"source": [
"## Ejercicio 1\n",
"### Optimización de código para procesamiento de texto\n",
"\n",
"Se te ha entregado un código de procesamiento de texto que realiza las siguientes operaciones:\n",
"\n",
"1. Convierte todo el texto a minúsculas.\n",
"2. Elimina los signos de puntuación.\n",
"3. Cuenta la frecuencia de cada palabra.\n",
"4. Muestra las 5 palabras mas comunes.\n",
"\n",
"El código funciona, pero es ineficiente y puede optimizarse. Tu tarea es identificar las áreas que pueden ser mejoradas y reescribir esas partes para hacer el código mas eficiente y legible.\n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "8467465b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'the': 5 times\n",
"'of': 3 times\n",
"'in': 2 times\n",
"'a': 2 times\n",
"'she': 2 times\n"
]
}
],
"source": [
"import string\n",
"\n",
"def process_text(text):\n",
" # Text to lowercase\n",
" text = text.lower()\n",
"\n",
" # Remove punctuation\n",
" for p in string.punctuation:\n",
" text = text.replace(p, \"\")\n",
"\n",
" # Split text into words\n",
" words = text.split()\n",
"\n",
" # Count frecuencies\n",
" frequencies = {}\n",
" for w in words:\n",
" if w in frequencies:\n",
" frequencies[w] += 1\n",
" else:\n",
" frequencies[w] = 1\n",
"\n",
" sorted_frequencies = sorted(frequencies.items(), key = lambda x: x[1], reverse = True)\n",
"\n",
" # Get 5 most-common words\n",
" top_5 = sorted_frequencies[:5]\n",
" \n",
" for w, frequency in top_5:\n",
" print(f\"'{w}': {frequency} times\")\n",
"\n",
"text = \"\"\"\n",
" In the heart of the city, Emily discovered a quaint little café, hidden away from the bustling streets. \n",
" The aroma of freshly baked pastries wafted through the air, drawing in passersby. As she sipped on her latte, \n",
" she noticed an old bookshelf filled with classics, creating a cozy atmosphere that made her lose track of time.\n",
"\"\"\"\n",
"process_text(text)"
]
},
{
"cell_type": "markdown",
"id": "29040779",
"metadata": {},
"source": [
"Puntos a optimizar:\n",
"\n",
"1. **Eliminar los signos de puntuación**: Usar `replace` en un ciclo puede ser ineficiente, especialmente con textos largos. Busca una formas eficiente de eliminar los signos de puntuación.\n",
"2. **Contador de frecuencia**: El código verifica la existencia de cada palabra en el diccionario y luego actualiza su cuenta. Esto puede hacerse mas eficientemente con ciertas estructuras de datos en Python.\n",
"3. **Ordenar y seleccionar:** Considera si hay una forma mas directa o efectiva de obtener las 5 palabras mas frecuentes sin ordenar todas las palabras.\n",
"4. **Modularidad**: Divide el código en funciones mas pequeñas para que cada una puede realizar una tarea específica. Esto no solo optimizará el desempeño, sino también hará el código mas legible y mantenible."
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "57cd6641",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Las 5 palabras mas comunes en el texto son:\n",
"'the': 5\n",
"'of': 3\n",
"'in': 2\n",
"'a': 2\n",
"'she': 2\n"
]
}
],
"source": [
"import string\n",
"from collections import Counter\n",
"\n",
"# Eliminar los signos de puntuación\n",
"def eliminar_signos(text):\n",
" signos_puntuacion = str.maketrans('', '', string.punctuation)\n",
" return text.translate(signos_puntuacion)\n",
"\n",
"#Contador de frecuencia\n",
"def contador_frecuencia(text):\n",
" palabras = text.split()\n",
" return Counter(palabras)\n",
"\n",
"#Ordenar y seleccionar \n",
"def palabras_comunes(frequencies, n=5):\n",
" return frequencies.most_common(n)\n",
"\n",
"def procesar_texto(text):\n",
" text = text.lower()\n",
" text=eliminar_signos(text)\n",
" contador = contador_frecuencia(text)\n",
" top5 = palabras_comunes(contador)\n",
"\n",
" for palabra, frequency in top5:\n",
" \n",
" print(f\"'{palabra}': {frequency}\")\n",
"\n",
"text = \"\"\"\n",
" In the heart of the city, Emily discovered a quaint little café, hidden away from the bustling streets. \n",
" The aroma of freshly baked pastries wafted through the air, drawing in passersby. As she sipped on her latte, \n",
" she noticed an old bookshelf filled with classics, creating a cozy atmosphere that made her lose track of time.\n",
"\"\"\"\n",
"print(\"Las 5 palabras mas comunes en el texto son:\")\n",
"procesar_texto(text)\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "011996bc",
"metadata": {},
"source": [
"## Ejercicio 2\n",
"### Optimización de código para procesamiento de listas\n",
"\n",
"Se te ha dado el siguiente código que realiza operaciones en una lista de números para:\n",
"\n",
"1. Filtrar los números pares.\n",
"2. Duplicar cada número.\n",
"3. Sumar todos los números.\n",
"4. Verificar si el resultado es un número primo.\n",
"\n",
"El código entregado logra los objetivos, pero puede ser ineficiente. Tu tarea es identificar y mejorar las partes de ese código para mejorar su eficiencia."
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "783d03a0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Result: 60, ¿Prime? No\n"
]
}
],
"source": [
"import math\n",
"\n",
"def is_prime(n):\n",
" if n <= 1:\n",
" return False\n",
" for i in range(2, int(math.sqrt(n)) + 1):\n",
" if n % i == 0:\n",
" return False\n",
" return True\n",
"\n",
"def process_list(list_):\n",
" filtered_list = []\n",
" for num in list_:\n",
" if num % 2 == 0:\n",
" filtered_list.append(num)\n",
" \n",
" duplicate_list = []\n",
" for num in filtered_list:\n",
" duplicate_list.append(num * 2)\n",
" \n",
" sum = 0\n",
" for num in duplicate_list:\n",
" sum += num\n",
"\n",
" prime = is_prime(sum)\n",
" \n",
" return sum, prime\n",
"\n",
"list_ = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
"result, result_prime = process_list(list_)\n",
"print(f\"Result: {result}, ¿Prime? {'Yes' if result_prime else 'No'}\")"
]
},
{
"cell_type": "markdown",
"id": "128d564e",
"metadata": {},
"source": [
"Puntos a optimizar:\n",
"\n",
"1. **Filtrar las números**: El código recorre la lista original para filtrar los números pares. Considera una forma mas eficiente de filtrar la lista.\n",
"2. **Duplicación**: La lista es atravesada varias veces. ¿Hay alguna manera de hacer esto mas eficientemente?\n",
"3. **Suma**: Los números en la lista se suman a traves de un bucle. Python trae incluidas unas funciones que pueden optimizar esto.\n",
"4. **Función `is_prime`**: Aunque ésta función es relativamente eficiente, investiga si hay maneras de hacerla aun más rápida.\n",
"5. **Modularidad**: Considera dividir el código en funciones más pequeñas, cada una enfocada en una tarea específica."
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "f40e35d6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(120, False)"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import math\n",
"\n",
"# Paso 1: Filtrar números pares \n",
"def lista_filtrada(lista):\n",
" return [num for num in lista if num % 2 == 0]\n",
"\n",
"# Paso 2: Duplicar los números de la lista\n",
"def lista_duplicada(lista):\n",
" return [num * 2 for num in lista_filtrada(lista)]\n",
"\n",
"# Paso 3: Sumar los números de la lilsta duplicada\n",
"def lista_sumada(lista):\n",
" return sum(lista_duplicada(lista))\n",
"\n",
"# Paso 4: Hacer mas eficiente la función is_prime\n",
"def es_primo(n):\n",
" if n <= 1:\n",
" return False\n",
" for i in range(2, int(math.sqrt(n)) + 1):\n",
" if n % i == 0:\n",
" return False\n",
" return True\n",
"\n",
"def procesar_lista(list):\n",
" \n",
" filtrada = lista_filtrada(list)\n",
" duplicada = lista_duplicada(filtrada)\n",
" sumada = lista_sumada(duplicada)\n",
" primo = es_primo(sumada)\n",
" return sumada, primo\n",
"\n",
"\n",
"procesar_lista(list_)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "1af70806",
"metadata": {},
"source": [
"Ambos ejercicios ayudarán a mejorar tu habilidad de optimizar el desempeño del código y te darán un mejor entendimiento de como las diferentes estructuras de datos y técnicas de programación pueden afectar la eficiencia de tu código."
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}