Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: Novlucker en 2 Septiembre 2010, 15:48 pm



Título: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 2 Septiembre 2010, 15:48 pm
Buenas ...
Revivamos esto (http://foro.elhacker.net/ejercicios/juego_ejercicios_python-t278592.0.html), si funciona funciona, y sino lo dejamos tirado como siempre :xD

El tema consiste en que alguien publica un "reto", y el siguiente que lo conteste y una vez dado el visto bueno a su código, publica el siguiente, digamos que ya hay varios post como este así que no tiene nada de raro. Lo único que si es obligatorio es que quién publica el reto luego tiene que publicar su solución también, así evitamos caer en códigos que ni el que lo propone lo hace :xD

La idea del post va por el lado de crear un algoritmo para tal o cual cosa, como por ejemplo el imprimir todos los primos mayores que y menores que, y no por proponer por ejemplo el crear un juego de tres en raya para jugar en remoto (eso se hizo en el anterior)

Por útimo, decir que no es necesario el uso de try y exception para los input de usuario, se asume que el usuario ingresa un valor válido para la operación, excepto que se pida explicitamente.

A continuación el primer "ejercicio" cortito (como ejercicio y como ejemplo):
"Crear un script que dado dos números a y b, indique si la factorización de a se realiza en más de b factores. (o igual)"
Ej:

Código:
a = 130
b = 5
Factorizacion = 2 x 5 x 13
Resultado = False
-----------------
a = 130
b = 3
Factorizacion = 2 x 5 x 13
Resultado = True
A ver si alguien se anota :P

Saludos

P.D: si nadie responde en tres días, desaparezco el post xD


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: criskapunk en 2 Septiembre 2010, 16:18 pm
Buenas,

Una pequeña duda que me surgio :xD

Si por ejemplo tengo a=160 y b=3. Los factores serian 2-2-2-2-2-5.

El programa deberia devolver False (Considerando 2**5 y 5) o True (Considerando 2-2-2-2-2-5)?

Un saludo ;)



Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 2 Septiembre 2010, 16:19 pm
Buena pregunta, lo dejamos en True para hacerlo más sencillo, así no es necesario agrupar los factores :P

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 2 Septiembre 2010, 23:42 pm
Código
  1. from math import sqrt
  2.  
  3. a=int(raw_input("Introduzca el numero: "))
  4. b=int(raw_input("Introduzca la mayor cantidad de factores: "))
  5. factores=set()
  6. res=set()
  7.  
  8. for i in range(2,int(sqrt(a))+1):
  9. if i not in res:
  10. for j in range(i,a/i+1):
  11. res.add(i*j)
  12.  
  13. for i in range(2,a):
  14. if i not in res:
  15.  
  16. while a%i==0:
  17. a=a/i
  18. if i not in factores: factores.add(i)
  19.  
  20. if b>=len(factores): print "Verdadero"
  21. else: print "Falso"


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 3 Septiembre 2010, 00:01 am
Dejo la solución que tenía :P
Código
  1. def p(n):
  2.    for i in range(2,n):
  3.        if(n%i==0):
  4.            return False
  5.    return True
  6.  
  7. n=int(input('Numero: '))
  8. m=int(input('Cantidad de factores: '))
  9. i,c=2,0
  10. while i<=n:
  11.    if p(i) and n%i==0:
  12.        n/=i
  13.        c+=1
  14.    else:
  15.        i+=1
  16. if c>=m:
  17. print(True)
  18. else:
  19. print(False)

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 3 Septiembre 2010, 00:10 am
Un bloque de masa M, inicialmente en reposo, se jala hacia la derecha a lo largo de una superficie horizontal mediante una fuerza horizontal constante F. Este se mueve una distancia(metros) D sobre una superficie con un coeficiente de friccion N. El resultado debe de ser la velocidad final del bloque exactamente al recorrer esa distancia.

Código:
Entradas:

Masa = 6.0
Fuerza = 12.0
Distancia = 3.0
Friccion = 0.15

El resultado por pantalla sera:

Velocidad Final del Bloque 1.8 m/s.


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 3 Septiembre 2010, 05:04 am
asi Novlucker no me asesina:

Código
  1. from math import sqrt
  2. M=float(raw_input("Ingrese la Masa: "))
  3. D=float(raw_input("Ingrese la Distancia: "))
  4. F=float(raw_input("Ingrese la Fuerza: "))
  5. N=float(raw_input("Ingrese la Coeficiente de Friccion: "))
  6.  
  7. if F<(N*M*9.8):print "La velocidad en " + str(D) + " es 0.0m/s"
  8. else:print "La velocidad a los " +str(D) + "Mts. es " + str(round(sqrt(((2*D)/M)*(F-(N*M*9.8))),1)) + "m/s"


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 3 Septiembre 2010, 05:11 am
El Nuevo reto sera... Dado dos valores A y B, localizar todos los numero primos entre ese intervalo, incluyendolos.

Código:
Valores de entrada
 
Primer numero: 6
Segundo Numero: 17

Valor de salida

7
11
13
17


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Littlehorse en 4 Septiembre 2010, 22:17 pm
Código
  1. from math import sqrt
  2.  
  3. def isprime(num):
  4.    if num <2:
  5.      return False
  6.    i=2
  7.    while i <=sqrt(abs(num)):
  8.      if num%i == 0:
  9.         return False
  10.      i+=1
  11.    return True
  12.  
  13. min=int(raw_input("Min:  "))
  14. max=int(raw_input("Max: "))
  15.  
  16. for num in range(min,max+1):
  17.   if isprime(num):
  18.      print num

No lo probé todavía pero debería funcionar si no exageran con el rango  ;D. Se podría hacer una implementación por probabilidades pero igualmente por lo menos para mi no lo vale.   :D

Voy a tomarme la libertad de poner dos retos, uno fácil y otro no tanto, así vemos si se suma mas gente.

El único reto que hay que completar para elegir el próximo reto es el fácil, pero por supuesto el de dificultad media lo pongo para quien quiera hacerlo.  :D

Reto fácil:

Desarrollar una función que permita insertar en una secuencia de dígitos los caracteres guión
cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito.
Si la cantidad de dígitos no fuera múltiplo de 8 se deberá adicionar ceros por la izquierda.
Ejemplo: 

472348237388539055823012 queda como 4723-4823 7388-5390 5582-3012.


Reto medio:

Desarrollar una función que permita insertar el nombre de X usuario y devolver cual es su actividad, siempre que sea posible, analizando https://foro.elhacker.net/who.html.

Saludos!  :D


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 5 Septiembre 2010, 08:19 am
:xD el otro esta muy complicado... y me gusta irme por lo simple

Código
  1. #Funciona correctamente en Python 2.7
  2. cadena = raw_input("Inserte la secuencia de numeros: ")
  3.  
  4. if cadena.isdigit():
  5. while len(cadena)%8!=0:cadena="0"+cadena
  6.  
  7. s=list(cadena)
  8. for n in range(((len(cadena)/4)-1),0,-1):
  9. if n%2!=0:list.insert(s,n*4,"-")
  10. else:list.insert(s,n*4,".")
  11.  
  12. s = str(s)
  13. s = s.translate(None,"[],' ")
  14. print s.replace("."," ")


RETO: Un Empresario ha realizado una reunion para recortar gastos en la empresa, por lo tanto ha tomado la decision de despedir los empleados con menor taza de exito, a los empleados se les tomara en cuenta 3 factores... Ganancia Generadas, Horas de Trabajo Diario y Sueldo, en base a esto el Empresario a decidido que despedira a los empleados que sean menos efectivos que otro. El Empresario medira esto de la siguiente manera: Si un empleado A Genera mas ganancia, trabaja mas tiempo diario  y tiene un menor sueldo que un empleado B, el empleado B sera despedido.

*Reglas:
-> La cantidad de empleados sera entre 1 y 1,000
->Las Ganancias no sobrepasaran 1,000,000.
->Las horas diarias trabajadas no sobrepasaran las 24 horas.
->El sueldo no sera menor o igual a 0 ni mayor a 1,000,000.
->Solo se permitiran numeros enteros.

=>Valores de entrada, cantidad de empleados, luego cada valor (Ganancia, Horas de Trabajo, Sueldo), separadas por 1 espacio.
=>Valor de Salida, la cantidad de empleados despedidos.

Ejemplo:
Código:
Cantidad de Empleados: 5
Empleado 1: 500 12 300
Empleado 2: 400 14 400
Empleado 3: 100 10 500 #Este sera Despedido.
Empleado 4: 450 11 1000000 #Este sera despedido 4vs1
Empleado 5: 50 1 10000 #Este tambien sera Despedido.

Cantidad de Empleados Despedidos: 2


Edito: No me habia fijado que era multiple de 8... lo lei una vez y me fui a codearlo... ya esta solucionado.


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Littlehorse en 5 Septiembre 2010, 08:42 am
R.N.A esta mal el código, agregas la cantidad de ceros incorrectos y por el lado incorrecto. Hasta que sea múltiplo de 8 y por la izquierda!

Igualmente deja tu reto que esta interesante así lo vamos haciendo mientras corriges el anterior.


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 6 Septiembre 2010, 19:00 pm
Lo hice de la manera difícil, pero eficiente :D

Código
  1. n = int(input('Ingresa numero de empleados: '))
  2. l = []
  3. for i in range(n):
  4.    t = input('Empleado '+str(i+1)+' :').split(' ')
  5.    l.append([int(t[0]),int(t[1]),int(t[2])])
  6. i,c = 0,0
  7. while i<len(l)-1:
  8.    e = i
  9.    while e<len(l):
  10.        if l[e][0]>l[i][0] and l[e][1]>l[i][1] and l[e][2]<l[i][2]:
  11.            l.pop(i)
  12.            i += -1
  13.            c += 1
  14.            break
  15.        elif l[i][0]>l[e][0] and l[i][1]>l[e][1] and l[i][2]<l[e][2]:
  16.            l.pop(e)
  17.            e += -1
  18.            c += 1
  19.        e += 1
  20.    i += 1
  21.  
  22. print('Cantidad de Empleados Despedidos: '+ str(c))

El reto será:
Crear un script que reciba un número como parámetro y muestre su factorización, tomando en cuenta además, que los factores repetidos deben de ser mostrados como potencia.
Ejemplo:
Código:
Numero: 432
Resultado: 2^4 x 3^3
Numero: 168
Resultado: 2^3 x 3 x 7

Y el reto "plus" para quienes quieran hacerlo será:
Crea un script que reciba un directorio (no es necesario recorrer subdirectorios) como parametro, calcule hash para los archivos dentro del mismo, y consulte virustotal en busca de un análisis previo. Se deberá de mostrar fecha y número total de AV que lo detectan, o un mensaje en caso de no haber un análisis.

:http://www.virustotal.com/advanced.html#publicapi

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 6 Septiembre 2010, 20:48 pm
Código
  1. from math import sqrt
  2. lista = []
  3. e=0
  4. a=int(raw_input("Introduzca el numero: "))
  5. res=set()
  6.  
  7. if a>1:
  8. for i in range(2,int(sqrt(a))+1):
  9. if i not in res:
  10. for j in range(i,a/i+1):
  11. res.add(i*j)
  12. for i in range(2,a+1):
  13. if i not in res:
  14. if not a%i:
  15. lista.append([i,0])
  16. e+=1
  17. while a%i==0:
  18. lista[e-1][1]+=1
  19. a/=i
  20. s=""
  21. for i in range(0,len(lista)):
  22. if lista[i][1]<2:
  23. s += str(lista[i][0])
  24. else:
  25. s += str(lista[i][0])+"^"+str(lista[i][1])
  26. if i<len(lista)-1:
  27. s+=" x "
  28. else: s=a
  29. print s

Reto: Dado un punto en un plano tridimensional y una cantidad N de puntos en el plano, organizar los puntos con respecto a su cercania con el punto dado.Nota: La salida sera representada con un numero de orden con respecto a cercania y las coordenadas del punto en el plano.

Nota: Los valores de los puntos seran introducidos como tuplas
Código:
---Valores de entrada---
Cantidad de puntos: 3
Coordenadas del Punto Central: (3,-1,0)
Coordenadas del Punto(1): (4,2,4)
Coordenadas del Punto(2): (3,4,1)
Coordenadas del Punto(3): (0,5,2)

---Valor de Salida---
1) (3,4,1)
2) (4,2,4)
3) (0,5,2)


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 7 Septiembre 2010, 15:18 pm
Sobre el reto 2 que había dejado Littlehorse, el de who, lo había empezado pero me da pereza seguir parseando el html a mano, así que dejo el desastre que llevaba :xD

Código
  1. import urllib.request
  2.  
  3. userid = 'u'+input('Ingresa id de perfil: ')
  4. whocont = ''
  5. start = 0
  6. while whocont.find('Visitante') == -1:
  7.    whocont = str(urllib.request.urlopen('http://foro.elhacker.net/who.html;start='+str(start)+';sort=user').read())
  8.    whousrs = whocont.split('/profiles/')
  9.    for user in whousrs:
  10.        if user.find(userid) != -1:
  11.            username = user[user.find('>')+1:user.find('</')]
  12.            sts = user.find('<td>')+4
  13.            status = user[sts:user.find('</td>',sts)]
  14.            print(username + ' - ' + status)
  15.            break
  16.    start+=15

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 7 Septiembre 2010, 19:40 pm
Y la solución al reto de Lord R.N.A
Código
  1. import math
  2.  
  3. n = int(input('Ingrese numero de puntos: '))
  4. cp = eval(input('Ingrese coordenadas de punto central: '))
  5. points,a = [],[]
  6. for i in range(n):
  7.    points.append(eval(input('Coordenadas del Punto('+str(i+1)+') :')))
  8.  
  9. c = 0
  10. for i in points:
  11.    point = (cp[0]-i[0],cp[1]-i[1],cp[2]-i[2])
  12.    d = math.sqrt(point[0]**2+point[1]**2+point[2]**2)
  13.    a.append([c,d])
  14.    c+=1
  15.  
  16. a.sort(key=lambda i: i[1])
  17. for i in a:
  18.    print(points[i[0]])

Pensando en un reto :P

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 8 Septiembre 2010, 21:47 pm
Y aquí va el ejercicio.
Crear un script que dada una cantidad N de numeros (se le pediran al usuario), determine si hay numeros amigos entre ellos e imprima los pares de números en tuplas
Ejemplo:
Código:
---Valores de entrada---
Cantidad de numeros: 3
Numero 1: 230
Numero 2: 220
Numero 3: 284

---Valores de salida---
(220, 284)

Los números amigos son aquellos para los cuales la suma de los divisores de uno, es igual al otro valor. Siguiendo con el ejemplo.
Divisores de 220 -> 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110 = 284
Divisores de 284 -> 1, 2, 4, 71 y 142 = 220

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 8 Septiembre 2010, 22:30 pm
Aqui esta la respuesta... pongo reto cuando vuelva de la universidad... unas 6 horas.

Código
  1. cantidad = int(raw_input("Introduce la cantidad de numeros: "))
  2. amigos = []
  3. res = []
  4.  
  5. def friend(x):
  6. res = 0
  7. for i in range(1,x):
  8. if x%i==0:
  9. res+=i
  10. return res
  11.  
  12.  
  13. for i in range(cantidad):
  14. a = int(raw_input("Introduce el valor numero "+str(i)+": "))
  15. amigos.append([a,0])
  16. amigos[i][1] = friend(amigos[i][0])
  17.  
  18. for i in range(len(amigos)):
  19. for j in range(i,len(amigos)):
  20. if (amigos[i][0] == amigos[j][1]) and (amigos[i][1] == amigos[j][0]):
  21. print "("+str(amigos[i][0])+","+str(amigos[j][0])+")"


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 9 Septiembre 2010, 20:21 pm
Reto:Hombre de Negocios

Un hombre de negocios tiene una secretaria... la muy tonta (Rubia al fin y al cabo) ha aceptado todas las reuniones que llegaban, que sucede, que ahora no puede ir a todas debido a algunos choques.

Código:
Valor de Entrada
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

Reto Facil: Colocar en secuencia las reuniones y quitar las que interfieran en espacios ocupados.
Código:
Valor de Salida
Cantidad de Reuniones Aptas: 2
1) 7:30-10:00
2) 11:00-17:00


Reto Dificil: Lograr ir al mayor numero de reuniones posibles.
Código:
Valor de Salida
Cantidad de Reuniones Aptas: 3
1) 7:30-10:00
2) 15:00-16:00
3) 16:50-18:00

Nota: La secretaria podria anotar un maximo de 1440 reuniones... total, ella no tendra que ir.


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 26 Septiembre 2010, 06:41 am
Si alguien desea obvie el reto y continuen con otro.


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 30 Septiembre 2010, 07:06 am
Bueno ya que nadie se motivo a hacer un reto dejare uno sencillo para que alguien siga.

Reto: Quien toca.

Realizar un script que haga la funcion de demonio para un portknocker.


Ejemplo: Se recibiran 5 intentos de conexiones seguidas a puertos diferentes en la siguiente secuencia.
Código:
1) 64000
2)32000
3)16000
4)8000
5)4000

Si esa es la secuencia el script imprimira en pantalla secuencia correcta y colocara la hora y fecha actual.
Código:
=>Secuencia Correcta: 00:00:00 01/01/0000


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: lDanny en 6 Octubre 2010, 13:00 pm
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
  1. def descomponer(L):
  2. M=[]
  3. j=-3
  4. for i in range(4):
  5. M.append(int(L[j+3:j+5]))
  6. j+=3
  7. return M
  8.  
  9. def esSecuencia(L,nreuniones):
  10. M=[]
  11. M.append(L[0])
  12. b= True
  13. for i in range(nreuniones):
  14. for j in range (len(M)):
  15. if ((L[i][2]<M[j][0]) or (L[i][0]>M[j][2])
  16. 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])):
  17. b= b and True
  18. else:
  19. b = False
  20. if (b):
  21. M.append(L[i])
  22. b=True
  23. return M
  24. a = input('Cantidad de Reuniones:  ')
  25. if (a>1440):
  26. print 'El numero de reuniones a las que se puede asistir son 1440 no mas'
  27. exit()
  28. L=[]
  29. for i in range(a):
  30. L.append(raw_input('Pon las horas de la reunion %d:  '%i))
  31. for i in range(a):
  32. L[i]=descomponer(L[i])
  33. L=esSecuencia(L,a)
  34. print 'Valor de Salida'
  35. print 'Cantidad de Reuniones Aptas:  ',len(L)
  36. for i in range (len(L)):
  37. print '%d)'%i,L[i][0],':',L[i][1],'-',L[i][2],':',L[i][3]
  38.  
  39.  

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


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 6 Octubre 2010, 13:14 pm
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:
Citar
Cantidad 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:
Citar
Cantidad 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


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: lDanny en 7 Octubre 2010, 12:33 pm
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


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 7 Octubre 2010, 12:35 pm
Claro que si, pero abre otro post con el problemita ;)

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 25 Noviembre 2010, 17:56 pm
Hoy he recordado que el reto de Hombre de Negocios de Lord R.N.A. estaba pendiente, así que ...
Código
  1. import itertools
  2. import time
  3.  
  4. n = input('Cantidad de reuniones: ')
  5. text = [raw_input('Reunion (%i): '%(i+1)).split('-') for i in range(n)]
  6.  
  7. horarios = [[time.strptime(r,'%H:%M') for r in h] for h in text]
  8. permuta = list(itertools.permutations(horarios))
  9. posibles, maximo = [], 0
  10.  
  11. for horario in permuta:
  12.    temp = [horario[0]]
  13.    for hora in horario[1:]:
  14.        if temp[len(temp)-1][1] <= hora[0]:
  15.            temp.append(hora)
  16.    if temp not in posibles:
  17.        posibles.append(temp)
  18.        if len(temp)>maximo:
  19.            maximo = len(temp)
  20.  
  21. horarios = [[time.strftime('%H:%M',r[0])+'-'+time.strftime('%H:%M',r[1]) for r in i] for i in posibles]
  22.  
  23. n = 1
  24. print '\nEl numero maximo de reuniones es %i'%maximo
  25. for hora in horarios:
  26.    if len(hora)==maximo:
  27.        print '\n-- Opcion %i --' % n
  28.        m = 1
  29.        for h in hora:
  30.            print '%i)%s' % (m,h)
  31.            m += 1
  32.        n += 1

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

Código:
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


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: n1co en 27 Noviembre 2010, 19:43 pm
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


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: 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


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: n1co en 29 Noviembre 2010, 20:03 pm
pero bueno aunque haya un ejercicio pendiente no han posteado mas nada, de todas formas voy a hacerlo :D y vemos que sale!!!
graciass


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: n1co en 29 Noviembre 2010, 20:12 pm
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


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 29 Noviembre 2010, 20:29 pm
Basicamente tienes que tener sockets escuchando en esos puertos y ver si hay intentos de conexión en esa secuencia :P

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: n1co en 29 Noviembre 2010, 21:41 pm
Bueno es la primera vez que posteo, y me da verguenza publicar esto, no porque sea la primera vez, sino porque es una chanchada.. jaja perdon, son mis inicios en estos juegitos, y lo hice apuradamente para que aparezca otro. Espero a que respondan si esta bien o si esta como el ort..'

Saludoss..


Código
  1. '''
  2. Created on 29/11/2010
  3.  
  4. @author: nicolas
  5. '''
  6. import threading
  7. import socket
  8. from datetime import datetime
  9.  
  10. class Resultado():
  11.    def __init__(self, puerto, tiempo):
  12.        self.puerto = puerto
  13.        self.tiempo = tiempo
  14.  
  15.    @staticmethod
  16.    def ObtenerTiempoResultado(resultado):
  17.        return resultado.tiempo
  18.  
  19. class Escucha(threading.Thread):    
  20.    def __init__(self, puerto, lista):
  21.        threading.Thread.__init__(self)
  22.        self.puerto = puerto
  23.        self.lista = lista
  24.  
  25.    def run(self):        
  26.        socket_ = socket.socket()
  27.        socket_.bind(('localhost', self.puerto))
  28.        socket_.listen(1)
  29.        socket_.accept()        
  30.        socket_.close()
  31.        self.lista.append(Resultado(self.puerto, datetime.today()))
  32.  
  33. resultados = []    
  34. resultados_esperados = [64000, 32000, 16000, 8000, 4000]  
  35. puerto1 = Escucha(64000, resultados)
  36. puerto2 = Escucha(32000, resultados)
  37. puerto3 = Escucha(16000, resultados)
  38. puerto4 = Escucha(8000, resultados)
  39. puerto5 = Escucha(4000, resultados)
  40. puerto1.start()
  41. puerto2.start()
  42. puerto3.start()
  43. puerto4.start()
  44. puerto5.start()
  45.  
  46. while len(resultados) != 5:
  47.    pass
  48.  
  49. correcto = True
  50. cont = 0
  51. for resultado in sorted(resultados, key=Resultado.ObtenerTiempoResultado):
  52.    if resultado.puerto != resultados_esperados[cont]:
  53.        correcto = False
  54.        break
  55.    cont += 1
  56.  
  57. if correcto:
  58.    print '=>Secuencia Correcta: %s' % (datetime.today().strftime("%H:%M:%S %d/%m/%y"))
  59.  


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 30 Noviembre 2010, 13:45 pm
Esta muy bien :P

Cosas que yo haría ...
Código
  1. for i in resultados_esperados:
  2.    p = Escucha(i,resultados)
  3.    p.start()
... de este modo no queda tan feo :xD

Y luego lo principal del script iría dentro de un bucle, ya que de este modo cuando realizas los 5 intentos de manera incorrecta se cierra, debería de ir algo como "Secuencia incorrecta".

De cualquier manera creo que se podría dar por bueno, ahora te toca a ti ponernos un ejercicio ya que en eso consiste este post, alguien pone reto, otro soluciona, el que lo soluciona pone nuevo reto, etc etc :P

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: n1co en 30 Noviembre 2010, 20:47 pm
Muchas gracias por los comentarios, tienes toda la razon con ese codigo que añades...
Sobre el ejercicio dejame unos minutos para pensarme algo y ya posteo algo :D


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: n1co en 30 Noviembre 2010, 21:49 pm
Buenas, posteo mi ejercicio:

Hay que hacer un programita  que extraiga información de una web y la guarde en un archivo txt(Ofertas.txt).
Datos importantes:

web: http://www.computrabajo.com.ar/

Hay que extraer todas las ofertas del día de hoy del sector "Ingeniería/Técnico"

el txt deberá tener el siguiente formato:

Código:
Puesto vacante: ***
Localidad: ***
Provincia: ***
Salario: ***
Empresa: ***

##########

Puesto vacante: ***
Localidad: ***
Provincia: ***
Salario: ***
Empresa: ***

##########
y así sucesivamente
Obviamente los *** son cambiados por los datos, en caso de que algún data no esté, dejamos vacío(ej: Salario: ).

Otro detalle, me gustaria que no utilicen modulos que no vienen por defecto con python, o sea no conozco mucho pero se que hay un "Beautiful Soup" que facilita algo porque valida y formatea el html para hacerlo xml y poder utilizar xpath.

Creo que xon urllib, o urllib2 y un par de expresiones regulares ya tienen todo. :D


Saludos.


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 1 Diciembre 2010, 17:30 pm
Detenganse!!!... el reto anterior no esta realizado correctamente, lo puerto n1co los abre y deben estar cerrados.


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 1 Diciembre 2010, 17:46 pm
:huh: No termino de entender lo que dices, si el script hace exactamente lo que pides :-\

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: n1co en 1 Diciembre 2010, 19:32 pm
jajaja si a ver si explicas un poco mejor, y por lo menos ahora empiezan a aparecer :D y yo que pensaba que esto estaba muerto :)


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Dnk! en 1 Diciembre 2010, 20:11 pm
No muerto no, aqui uno se une a los retos, pero ya me espero al siguiente que tengo tarea que hacer  :rolleyes:


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 2 Diciembre 2010, 17:37 pm
Cito: Realizar un script que haga la funcion de demonio para un portknocker.

El Script debe mantenerse recogiendo los paquetes que lleguen pero los puertos deben estar cerrados... de caso contrario no funcionaria como portknocker.


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Novlucker en 2 Diciembre 2010, 17:45 pm
Que pesado, y dale con los raw_sockets, que conste que aún no he visto ningún código de los ejercicios que planteas, así que no sabemos ni si tu puedes hacerlo :rolleyes:

Saludos


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: n1co en 2 Diciembre 2010, 21:00 pm
y bueno... alguien que lo haga ? :D ami ya me dio fatiga..


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 3 Diciembre 2010, 03:24 am
:xD ya el plazo de 3 dias paso hace mucho, si quieren pongan otro reto.


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: ace332 en 20 Diciembre 2010, 03:04 am
 :laugh: No supo responder a su propio reto


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 20 Diciembre 2010, 03:26 am
A que te refieres con eso BeetleJuice?


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: Littlehorse en 20 Diciembre 2010, 03:31 am
Supongo que se refiere a esto:

Que pesado, y dale con los raw_sockets, que conste que aún no he visto ningún código de los ejercicios que planteas, así que no sabemos ni si tu puedes hacerlo :rolleyes:

así que te toca codificar Lord R.N.A. ;D


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 20 Diciembre 2010, 03:46 am
Supongo que se refiere a esto:

así que te toca codificar Lord R.N.A. ;D

xDDD ya no tengo el codigo pero denme unas 2 horas y coloco el daemon y el cliente


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: ace332 en 20 Diciembre 2010, 03:53 am
Esperando estamos  :D


Título: Re: Reto/Juego Ejercicios en Python
Publicado por: [L]ord [R]NA en 20 Diciembre 2010, 06:47 am
Esperando estamos  :D

Aqui esta el codigo...  en respuesta al reto (http://foro.elhacker.net/ejercicios/retojuego_ejercicios_en_python-t303762.0.html;msg1521465#msg1521465) que nadie pudo resolver... al parecer si se hacer el reto que propuse, por lo tanto propondre otro cuando este menos ocupado.

Source Knocker:
Código
  1. import socket,time
  2. MainSocket = socket.socket()
  3. a=[64000,32000,16000,8000,4000]
  4. while 1:
  5.    time.sleep(3)
  6.    for i in range(5):
  7.        try:
  8.            MainSocket.connect(("127.0.0.1",a[i]))
  9.        except:
  10.            b=0

Source Daemon:
Código
  1. import socket, datetime
  2. sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
  3. while 1:
  4.    c=0
  5.    d=0
  6.    while 1:
  7.        data = sock.recv(22)
  8.        header = ["%i"%ord(x) for x in data]
  9.        s = "%x"%int(header[20])
  10.        s+="%02x"%int(header[21])
  11.        if s==str(hex(64000))[2:] and c==0:
  12.            c+=1
  13.        elif s==str(hex(32000))[2:] and c==1:
  14.            c+=1
  15.        elif s==str(hex(16000))[2:] and c==2:
  16.            c+=1
  17.        elif s==str(hex(8000))[2:] and c==3:
  18.            c+=1
  19.        elif s==str(hex(4000))[2:] and c==4:
  20.            c+=1
  21.        else:
  22.            d+=1
  23.  
  24.        if c==5 and d<10:
  25.            a = str(datetime.datetime.today())
  26.            print "=>Secuencia Correcta:",a[:len(a)-7]
  27.            break
  28.        elif d>10:
  29.            break

El codigo se puede mejorar filtrando la IP para evitar tomar los datos salientes del propio PC pero no era parte del reto.