Skip to content

Commit 683b639

Browse files
committed
Refactor find_first_sum function for efficiency; switch from nested loops to a dictionary for tracking seen numbers
1 parent 0f5fb2c commit 683b639

File tree

3 files changed

+118
-8
lines changed

3 files changed

+118
-8
lines changed

04_logic/03_challenge_find_first_sum.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,26 @@
77
find_first_sum(nums, goal) # [2, 3]
88
"""
99

10+
# def find_first_sum(nums, goal):
11+
# # early return, una validación rápida
12+
# if len(nums) == 0: return None
13+
14+
# for i in range(len(nums)):
15+
# for j in range(i + 1, len(nums)):
16+
# if nums[i] + nums[j] == goal:
17+
# return [i, j]
18+
19+
# return None # no se encontró ninguna combinación
20+
1021
def find_first_sum(nums, goal):
11-
# early return, una validación rápida
12-
if len(nums) == 0: return None
22+
seen = {} # diccionario para guardar el numero y su índice
1323

14-
for i in range(len(nums)):
15-
for j in range(i + 1, len(nums)):
16-
if nums[i] + nums[j] == goal:
17-
return [i, j]
18-
19-
return None # no se encontró ninguna combinación
24+
for index, value in enumerate(nums):
25+
missing = goal - value
26+
if missing in seen: return [seen[missing], index]
27+
seen[value] = index # guardar el número actual a los vistos, porque no hemos encontrado la combinación
2028

29+
return None
2130

2231
nums = [4, 5, 6, 2]
2332
goal = 8

04_logic/04_dictionaries.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
###
2+
# 04 - Dictionaries
3+
# Los diccionarios son colecciones de pares clave-valor.
4+
# Sirven para almacenar datos relacionados.
5+
###
6+
7+
# ejemplo tipico de diccionario
8+
persona = {
9+
"nombre": "midudev",
10+
"edad": 25,
11+
"es_estudiante": True,
12+
"calificaciones": [7, 8, 9],
13+
"socials": {
14+
"twitter": "@midudev",
15+
"instagram": "@midudev",
16+
"facebook": "midudev"
17+
}
18+
}
19+
20+
# para acceder a los valores
21+
print(persona["nombre"])
22+
print(persona["calificaciones"][2])
23+
print(persona["socials"]["twitter"])
24+
25+
# cambiar valores al acceder
26+
persona["nombre"] = "madeval"
27+
persona["calificaciones"][2] = 10
28+
29+
# eliminar completamente una propiedad
30+
del persona["edad"]
31+
# print(persona)
32+
33+
es_estudiante = persona.pop("es_estudiante")
34+
print(f"es_estudiante: {es_estudiante}")
35+
print(persona)
36+
37+
# sobreescribir un diccionario con otro diccionario
38+
a = { "name": "miduev", "age": 25 }
39+
b = { "name": "madeval", "es_estudiante": True }
40+
41+
a.update(b)
42+
print(a)
43+
44+
# comprobar si existe una propiedad
45+
print("name" in persona) # False
46+
print("nombre" in persona) # True
47+
48+
# obtener todas las claves
49+
print("\nkeys:")
50+
print(persona.keys())
51+
52+
# obtener todas los valores
53+
print("\nvalues:")
54+
print(persona.values())
55+
56+
# obtener tanto clave como valor
57+
print("\nitems:")
58+
print(persona.items())
59+
60+
for key, value in persona.items():
61+
print(f"{key}: {value}")

04_logic/05_challenge_battle.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
"""
2+
Tienes dos listas de números, lista_a y lista_b, ambas de la misma longitud.
3+
4+
Cada número en lista_a se "enfrenta" al número en la misma posición en lista_b.
5+
6+
- Si el número en lista_a es mayor, su valor se suma al siguiente número en lista_a.
7+
- Si el número en lista_b es mayor, su valor se suma al siguiente número en lista_b.
8+
- Si los dos números son iguales, ambos se eliminan y no afectan al siguiente par.
9+
10+
Debes simular estos enfrentamientos y devolver el resultado final:
11+
- Si al final queda un número en lista_a, devuelve ese número seguido de la letra "a" (por ejemplo, "3a").
12+
- Si al final queda un número en lista_b, devuelve ese número seguido de la letra "b" (por ejemplo, "2b").
13+
- En caso de empate, devuelve la letra "x".
14+
15+
lista_a = [2, 4, 2]
16+
lista_b = [3, 3, 4]
17+
18+
resultado = battle(lista_a, lista_b) # -> "2b"
19+
20+
# Explicación:
21+
# - 2 vs 3: gana 3 (+1)
22+
# - 4 vs 3+1: empate
23+
# - 2 vs 4: gana 4 (+2)
24+
# Resultado: "2b"
25+
26+
lista_a = [4, 4, 4]
27+
lista_b = [2, 8, 2]
28+
29+
resultado = battle(lista_a, lista_b) # -> "x"
30+
31+
# Explicación:
32+
# - 4 vs 2: gana 4 (+2)
33+
# - 4+2 vs 8: gana 8 (+2)
34+
# - 4 vs 2+2: empate
35+
# Resultado: "x"
36+
"""
37+
38+
# Fuerza bruta: buscar la solución A SACO.
39+
# Algoritmos ocultos o cálculos o fórmulas
40+
# Programación dinámica: buscar una solución mas eficiente

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy