-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #5650 from Majinka10/main
- Loading branch information
Showing
2 changed files
with
100 additions
and
0 deletions.
There are no files selected for viewing
65 changes: 65 additions & 0 deletions
65
Retos/Reto #37 - COLORES HEX Y RGB [Media]/python/majinka10.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
#Tabla de conversion. | ||
#La clave corresponde a su conversión en decimal y el valor a hexadecimal. | ||
conversion={0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, | ||
9:9, 10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'} | ||
|
||
valores = list(conversion.values()) # Consigo los valores de la tabla para trabajar | ||
# con ellos facilmente luego | ||
|
||
# Conversión de HEX a RGB | ||
|
||
def HEX2RGB(hex:str): | ||
""" | ||
Transforma un color HEX a RGB. | ||
Args: | ||
- hex (str): Color en formato HEX a convertir. | ||
Returns: | ||
- rgb (list): Lista con el valor de cada uno de los canales (red, blue, green). | ||
""" | ||
|
||
# Obtengo los valores hex correspondientes a cada canal. | ||
red = hex[1:3] | ||
green = hex[3:5] | ||
blue = hex[5:] | ||
|
||
rgb = [] # Inicializo una lista vacía que guardará el valor decimal de cada color. | ||
|
||
# En el siguiente for se itera cada valor hexagecimal de cada canal. | ||
for hexa in red, green, blue: | ||
|
||
# Esta super linea lo que hace es iterar en hexa (valor hexagecimal) y luego | ||
# obtiene el valor decimal de la tabla de conversión, lo multiplica por 16 elevado | ||
# al indice (proceso de conversión de hexagecimal a decimal) y por ultimo lo agrega a la lista rgb. | ||
rgb.append(sum((valores.index(valor) if valor in valores else valor.index(str(valor))) * 16 ** i for i, valor in enumerate(hexa[::-1]))) | ||
|
||
return rgb | ||
|
||
ejemplo_hex = '#000000' | ||
color_rgb = HEX2RGB(ejemplo_hex) | ||
print(f"r: {color_rgb[0]}, g: {color_rgb[1]}, b: {color_rgb[2]}") | ||
|
||
# Conversión de RGB a HEX | ||
|
||
def RGB2HEX(red:int, green:int, blue:int): | ||
""" | ||
Transforma un color RGB a HEX. | ||
Args: | ||
- red (int): Valor del canal rojo. | ||
- green (int): Valor del canal verde. | ||
- blue (int): Valor del canal azul. | ||
Returns: | ||
- hexadecimal (str): Color en formato HEX. | ||
""" | ||
|
||
hexadecimal = '#' | ||
|
||
for decimal in red, green, blue: | ||
hexadecimal += str(hex(decimal)[2:]) | ||
|
||
return hexadecimal | ||
|
||
ejemplo_rgb = [0, 0, 0] | ||
color_hex = RGB2HEX(ejemplo_rgb[0], ejemplo_rgb[1], ejemplo_rgb[2]) | ||
print(color_hex) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
def sumaObjetivo(numeros:list, objetivo:int): | ||
""" | ||
Encuentra todas las combinaciones de los números de una | ||
lista que suman el valor objetivo. | ||
Args: | ||
- numeros (list): Lista de numeros, enteros positivos, de la que quiero | ||
encontrar las combinaciones. | ||
- objetivo (int): Valor entero positivo objetivo. | ||
Returns: | ||
- combinaciones (list): Lista con las combinaciones encontradas. | ||
""" | ||
# Caso base de la recursión (que la suma de la lista sea el numero) | ||
if sum(numeros) == objetivo: | ||
return [numeros] | ||
|
||
# Defino la lista donde guardadaré las combinaciones | ||
combinaciones = [] | ||
|
||
for i in range(len(numeros)): | ||
# Evaluo cada lista posible | ||
resto_numeros = numeros[:i] + numeros[i+1:] | ||
# Encuentro las listas que cumplen | ||
combinaciones_resto = sumaObjetivo(resto_numeros, objetivo) | ||
|
||
# Para cada combinacion encontrada, si no está en las combinaciones, la añado | ||
# el if lo aplico para evitar listas repetidas | ||
for combinacion in combinaciones_resto: | ||
if combinacion not in combinaciones: | ||
combinaciones.append(combinacion) | ||
|
||
return combinaciones | ||
|
||
resultado = sumaObjetivo([1, 5, 3, 2, 3, 6], 6) | ||
print(f"Soluciones: {resultado}") |