-
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 #5484 from lfd1983/main
Reto #14 - Python
- Loading branch information
Showing
3 changed files
with
258 additions
and
0 deletions.
There are no files selected for viewing
19 changes: 19 additions & 0 deletions
19
Retos/Reto #14 - OCTAL Y HEXADECIMAL [Fácil]/python/lfd1983.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,19 @@ | ||
def convertToBase(decimal,base): | ||
digitos = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"] | ||
resultado = [] | ||
while decimal >= base: | ||
resultado.append(digitos[decimal % base]) | ||
decimal = decimal // base | ||
resultado.append(digitos[decimal]) | ||
return "".join(resultado[::-1]) | ||
|
||
def convertirDecimalToOctal(decimal): | ||
return convertToBase(decimal,8) | ||
|
||
def convertDecimalToHexa(decimal): | ||
return convertToBase(decimal,16) | ||
|
||
print(convertToBase(8596,16)) | ||
print(convertDecimalToHexa(8596)) | ||
print(convertToBase(8596,8)) | ||
print(convertirDecimalToOctal(8596)) |
20 changes: 20 additions & 0 deletions
20
Retos/Reto #39 - TRIPLES PITAGÓRICOS [Media]/python/lfd1983.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,20 @@ | ||
# /* | ||
# * Crea una función que encuentre todos los triples pitagóricos | ||
# * (ternas) menores o iguales a un número dado. | ||
# * - Debes buscar información sobre qué es un triple pitagórico. | ||
# * - La función únicamente recibe el número máximo que puede | ||
# * aparecer en el triple. | ||
# * - Ejemplo: Los triples menores o iguales a 10 están | ||
# * formados por (3, 4, 5) y (6, 8, 10). | ||
# */ | ||
|
||
def triples_pitagoricos(n): | ||
resultado = [] | ||
for c in range(1,n+1): | ||
for b in range(1,c+1): | ||
for a in range(1,b+1): | ||
if a**2+b**2 == c**2: | ||
resultado.append([a,b,c]) | ||
return resultado | ||
|
||
print(triples_pitagoricos(50)) |
219 changes: 219 additions & 0 deletions
219
Retos/Reto #41 - LA CASA ENCANTADA [Difícil]/python/lfd1983.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,219 @@ | ||
# /* RETO #41: LA CASA ENCANTADA DE MOUREDEV | ||
# * Este es un reto especial por Halloween. | ||
# * Te encuentras explorando una mansión abandonada llena de habitaciones. | ||
# * En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente. | ||
# * Tu misión es encontrar la habitación de los dulces. | ||
# * | ||
# * Se trata de implementar un juego interactivo de preguntas y respuestas por terminal. | ||
# * (Tienes total libertad para ser creativo con los textos) | ||
# * | ||
# * - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4 | ||
# * que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma. | ||
# * (16 habitaciones, siendo una de entrada y otra donde están los dulces) | ||
# * Esta podría ser una representación: | ||
# * 🚪⬜️⬜️⬜️ | ||
# * ⬜️👻⬜️⬜️ | ||
# * ⬜️⬜️⬜️👻 | ||
# * ⬜️⬜️🍭⬜️ | ||
# * - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto. | ||
# * Si no lo aciertas no podrás desplazarte. | ||
# * - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte. | ||
# * (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles) | ||
# * - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces. | ||
# * - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y | ||
# * tengas que responder dos preguntas para salir de ella. | ||
# */ | ||
|
||
def generarMansion(): | ||
#devuelve una lista con 16 elementos de la mansion: habitaciones vacías, fantasmas random | ||
#puerta de entrada y habitación de los dulces | ||
|
||
import random | ||
|
||
vectorMansion = list('⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜') | ||
|
||
# vector posiciones mantiene las posiciones no asignadas | ||
posiciones = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] | ||
|
||
posicionEntrada = posiciones[random.randint(0,len(posiciones)-1)] | ||
# elimino las posiciones ya sorteadas, para no sobreescribir | ||
posiciones.remove(posicionEntrada) | ||
|
||
posicionDulces = posiciones[random.randint(0,len(posiciones)-1)] | ||
posiciones.remove(posicionDulces) | ||
|
||
vectorMansion[posicionEntrada]="🚪" #genero entrada en posicion random | ||
vectorMansion[posicionDulces]="🍭" | ||
|
||
for pos in posiciones: #10% de probabilidad de encontrar un fantasma en los cuartos restantes | ||
if random.randint(0,9) == 0: | ||
vectorMansion[pos] = "👻" | ||
return vectorMansion | ||
|
||
|
||
def mostrarMansionCompleta(vectorMansion): | ||
#función para prueba, muestra la mansion completa | ||
# | ||
mansion = [vectorMansion[0:4],vectorMansion[4:8],vectorMansion[8:12],vectorMansion[12:16]] | ||
for m in mansion: | ||
print(m) | ||
|
||
def mostrarMansion(vectorMansion,posicionActual,juegoTerminado): | ||
|
||
copiaMansion = vectorMansion.copy() | ||
print("\nEste es el plano de la Mansión Embrujada:") | ||
for i in range(0,len(copiaMansion)): | ||
if copiaMansion[i] != "🚪" : | ||
copiaMansion[i] = "⬜" | ||
|
||
copiaMansion[posicionActual]= "🧑" | ||
if juegoTerminado: #en caso de juegoTerminado reemplazo la persona por la habitación de los dulces | ||
copiaMansion[posicionActual]="🍭" | ||
|
||
mansionMatriz = [copiaMansion[0:4],copiaMansion[4:8],copiaMansion[8:12],copiaMansion[12:16]] | ||
for m in mansionMatriz: | ||
print(" ".join(m)) | ||
print("") | ||
|
||
def obtenerMovimientosPosibles(posicionActual): | ||
direcciones = { | ||
"N":["Norte",True], | ||
"S":["Sur",True], | ||
"E":["Este",True], | ||
"O":["Oeste",True] | ||
} | ||
if posicionActual in [0,1,2,3]: | ||
direcciones["N"] = ["Norte",False] | ||
if posicionActual in [12,13,14,15]: | ||
direcciones["S"] = ["Sur",False] | ||
if posicionActual in [0,4,8,12]: | ||
direcciones["O"] = ["Oeste",False] | ||
if posicionActual in [3,7,11,15]: | ||
direcciones["E"] = ["Este",False] | ||
|
||
return direcciones #retorna diccionario con las direcciones | ||
|
||
def obtenerDireccion(posicionActual): | ||
#muestra las opciones posibles de dirección y obtiene la elección del usuario | ||
|
||
print("¿En qué dirección quieres desplazarte?") | ||
direcciones = obtenerMovimientosPosibles(posicionActual) | ||
opcionesDisponibles=[] | ||
|
||
for clave,valor in direcciones.items(): | ||
if valor[1]: | ||
print(f'Ingresa {clave} para desplazarte al {valor[0]}') | ||
opcionesDisponibles.append(clave) | ||
|
||
direccionElegida = input("-->").upper() | ||
|
||
if not direccionElegida in opcionesDisponibles: | ||
print("Opción Incorrecta") | ||
|
||
else: | ||
return direccionElegida | ||
|
||
|
||
def desplazar(posicionActual,direccionElegida): | ||
#retorna nueva posición según la dirección elegida | ||
|
||
if direccionElegida == "N": | ||
posicionActual -=4 | ||
elif direccionElegida == "S": | ||
posicionActual += 4 | ||
elif direccionElegida == "E": | ||
posicionActual += 1 | ||
elif direccionElegida == "O": | ||
posicionActual -= 1 | ||
|
||
return posicionActual | ||
|
||
def generarEnigmasPorHabitacion(mansion): | ||
#construye un diccionario con el nro de habitación como clave y los acertijos como valor | ||
|
||
import random | ||
|
||
enigmas = [["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"],["5-2= ","3"],["17-7= ","10"],["98-18= ","80"],["25-20= ","5"],["50*4= ","200"]] | ||
|
||
enigmasPorHabitación = {} | ||
|
||
for i in range(0,len(mansion)): | ||
if mansion[i] == "👻": #la habitación del fantasma tiene 2 enigmas | ||
aleatorio = random.randint(0,len(enigmas)-1) | ||
enigma1 = enigmas[aleatorio] | ||
del(enigmas[aleatorio]) # los enigmas utilizados se van eliminando | ||
|
||
aleatorio = random.randint(0,len(enigmas)-1) | ||
enigma2 = enigmas[aleatorio] | ||
del(enigmas[aleatorio]) | ||
|
||
enigmasPorHabitación[i] = [enigma1, enigma2] | ||
|
||
elif mansion[i] == "🚪" or mansion[i]== "🍭": #la puerta no tiene enigma | ||
enigmasPorHabitación[i] = [] | ||
|
||
elif mansion[i]== "⬜": #la habitación vacía tiene un enigma | ||
aleatorio = random.randint(0,len(enigmas)-1) | ||
enigmasPorHabitación[i] = [enigmas[aleatorio]] | ||
del(enigmas[aleatorio]) | ||
|
||
return enigmasPorHabitación | ||
|
||
|
||
def resolverEnigmas(habitacion,mansion,enigmasPorHabitacion): | ||
|
||
|
||
if mansion[habitacion] == "👻" or mansion[habitacion] == "⬜": | ||
#en estos casos debe responder preguntas | ||
|
||
pregunta="pregunta" #para mostrar "pregunta" o "preguntas" según corresponda | ||
if mansion[habitacion] == "👻": | ||
pregunta="preguntas" | ||
|
||
print(f'Para salir de esta habitación: {mansion[habitacion]} debes responder {len(enigmasPorHabitacion[habitacion])} {pregunta}') | ||
|
||
for i in enigmasPorHabitacion[habitacion]: | ||
respuesta = input(f'Responde: {i[0]}') | ||
if respuesta == i[1]: | ||
print("Respuesta correcta") | ||
continue | ||
else: | ||
print("Respuesta incorrecta, no puedes salir de esta habitación") | ||
return False #al responder incorrectamente una de las preguntas de la habitación retorna False | ||
return True | ||
|
||
def juego(): | ||
import os | ||
mansion = generarMansion() | ||
enigmasPorHabitacion = generarEnigmasPorHabitacion(mansion) | ||
|
||
posicionActual = mansion.index("🚪") | ||
|
||
print("***** Bienvenido al Juego de la Mansión Embrujada ******") | ||
print("Debes moverte por las habitaciones de la Mansión Embrujada hasta encontrar la Habitación de los Dulces \nPara salir de una habitación vacía debes resolver un enigma\nPara salir de una habitación con fastasma debes resolver dos enigmas\n M ¡Mucha Suerte!!!") | ||
# mostrarMansionCompleta(mansion) | ||
|
||
while True: | ||
|
||
mostrarMansion(mansion,posicionActual,False) | ||
|
||
if mansion[posicionActual] == "🍭": # el juego ha terminado | ||
break | ||
|
||
elif resolverEnigmas(posicionActual,mansion,enigmasPorHabitacion): #si ha resuelto los enigmas | ||
direccionElegida = obtenerDireccion(posicionActual) | ||
if direccionElegida: | ||
posicionActual = desplazar(posicionActual,direccionElegida) | ||
|
||
else: #si no ha resuelto los enigmas | ||
input("Presiona una tecla para continuar") | ||
os.system('cls') | ||
|
||
os.system('cls') | ||
print("********** GANASTE!!! \n\nEncontraste la habitación de los dulces\ny lograrse salir de la Mansión Embrujada") | ||
mostrarMansion(mansion,posicionActual,True) | ||
input("Presiona una tecla para Salir") | ||
|
||
juego() | ||
|
||
|