Reto/Juego Ejercicios en Python

Iniciado por Novlucker, 2 Septiembre 2010, 15:48 PM

0 Miembros y 2 Visitantes están viendo este tema.

lDanny

#20
Hola, es la primera vez que posteo codigo y recien he empezado con python asi que si me dicen como puedo reducir codigo o hacerlo mas optimo, lo agradeceria.
Lord R.N.A. creo que tengo el Reto:Hombre de Negocios  la parte Dificil

Cuando te pide ingresar las horas de la reunion tiene que ser de la siguiente manera:
09:00-10:00 ya que si pone 9:00-10:00 da error
Aver si siguen poniendo mas retos.
Código (python) [Seleccionar]
def descomponer(L):
M=[]
j=-3
for i in range(4):
M.append(int(L[j+3:j+5]))
j+=3
return M

def esSecuencia(L,nreuniones):
M=[]
M.append(L[0])
b= True
for i in range(nreuniones):
for j in range (len(M)):
if ((L[i][2]<M[j][0]) or (L[i][0]>M[j][2])
or (L[i][2]==M[j][0] and L[i][3]<M[j][1]) or (L[i][0]==M[j][2] and L[i][1]>M[j][3])):
b= b and True
else:
b = False
if (b):
M.append(L[i])
b=True
return M
a = input('Cantidad de Reuniones:  ')
if (a>1440):
print 'El numero de reuniones a las que se puede asistir son 1440 no mas'
exit()
L=[]
for i in range(a):
L.append(raw_input('Pon las horas de la reunion %d:  '%i))
for i in range(a):
L[i]=descomponer(L[i])
L=esSecuencia(L,a)
print 'Valor de Salida'
print 'Cantidad de Reuniones Aptas:  ',len(L)
for i in range (len(L)):
print '%d)'%i,L[i][0],':',L[i][1],'-',L[i][2],':',L[i][3]



Como hacen para que poner el codigo en colores al postearlo. Gracias

Novlucker

#21
Buenas lDanny, decir que para recién haber empezado lo tienes bastante bien planteado, pero ten en cuenta algo, estas omitiendo los horarios en los que la hora de entrada coincide con una de salida, ej:
CitarCantidad de Reuniones: 4
Pon las horas de la reunion 0: 06:00-07:00
Pon las horas de la reunion 1: 07:00-08:00
Pon las horas de la reunion 2: 08:00-09:00
Pon las horas de la reunion 3: 09:00-10:00
Valor de Salida
Cantidad de Reuniones Aptas: 2
0) 6 : 0 - 7 : 0
1) 8 : 0 - 9 : 0

Además ten en cuenta otra cosa, como lo tienes partes de la idea de que siempre va a tener esa primera reunión, pero eso siempre y cuando se ingresen en orden, además de que quizás el empezar por la reunión 1 (indice 0) quizas no es la mejor opción, y si empezara por la dos sería más optimo :P, ej:
CitarCantidad de Reuniones: 3
Pon las horas de la reunion 0: 10:00-14:00
Pon las horas de la reunion 1: 11:00-12:00
Pon las horas de la reunion 2: 13:00-14:00
Valor de Salida
Cantidad de Reuniones Aptas: 1
0) 10 : 0 - 14 : 0

Según el script el número máximo de reuniones es 1, pero que si en lugar de ir a la 1 voy a la 2 y 3? :D

Para ponerle color, tienes la etiqueta de nombre Geshi, que es lo mismo que poner la etiqueta de código normal sumandole el lenguaje, ej: [code=python][/code]

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

lDanny

Hola, bueno buscando cosas para programar me tope con projecto euler bueno el problema 12, me da problemas no por el codigo si no como optimizarlo ya que se demora mucho.
Queria saber si puedo poner el problema aqui aver si ponen codigo que sean optimos. Para aprender mas cosas.
Gracias

Novlucker

Claro que si, pero abre otro post con el problemita ;)

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Novlucker

#24
Hoy he recordado que el reto de Hombre de Negocios de Lord R.N.A. estaba pendiente, así que ...
Código (python) [Seleccionar]
import itertools
import time

n = input('Cantidad de reuniones: ')
text = [raw_input('Reunion (%i): '%(i+1)).split('-') for i in range(n)]

horarios = [[time.strptime(r,'%H:%M') for r in h] for h in text]
permuta = list(itertools.permutations(horarios))
posibles, maximo = [], 0

for horario in permuta:
   temp = [horario[0]]
   for hora in horario[1:]:
       if temp[len(temp)-1][1] <= hora[0]:
           temp.append(hora)
   if temp not in posibles:
       posibles.append(temp)
       if len(temp)>maximo:
           maximo = len(temp)
   
horarios = [[time.strftime('%H:%M',r[0])+'-'+time.strftime('%H:%M',r[1]) for r in i] for i in posibles]

n = 1
print '\nEl numero maximo de reuniones es %i'%maximo
for hora in horarios:
   if len(hora)==maximo:
       print '\n-- Opcion %i --' % n
       m = 1
       for h in hora:
           print '%i)%s' % (m,h)
           m += 1
       n += 1


Creo que no es el método más optimo y seguramente se pueda mejorar el código, pero da igual :P

Cantidad de reuniones: 5
Reunion (1): 7:30-10:00
Reunion (2): 16:50-18:00
Reunion (3): 11:00-17:00
Reunion (4): 9:00-12:00
Reunion (5): 15:00-16:00

El numero maximo de reuniones es 3

-- Opcion 1 --
1)07:30-10:00
2)15:00-16:00
3)16:50-18:00

-- Opcion 2 --
1)09:00-12:00
2)15:00-16:00
3)16:50-18:00


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

n1co

esto ya murio e ?, soy nuevo y esta bueno eso de participar en los juegitos/ejercicios, bueno si quieren publicar mas, ya cuenten con uno mas :D

Novlucker

n1co, de hecho no esta del todo muerto, fijate que más arriba Lord R.N.A había dejado otro ejercicio que aún esta pendiente.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

n1co

pero bueno aunque haya un ejercicio pendiente no han posteado mas nada, de todas formas voy a hacerlo :D y vemos que sale!!!
graciass

n1co

Cita de: Novlucker en 29 Noviembre 2010, 11:41 AM
n1co, de hecho no esta del todo muerto, fijate que más arriba Lord R.N.A había dejado otro ejercicio que aún esta pendiente.

Saludos

No entiendo bien el ejercicio en que consta, tal vez soy muy novato, o tal vez me parece muy facil, si puedes contarme un poquito te agradeceria. :D

Novlucker

Basicamente tienes que tener sockets escuchando en esos puertos y ver si hay intentos de conexión en esa secuencia :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein