Reto/Juego Ejercicios en Python

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

0 Miembros y 1 Visitante están viendo este tema.

Littlehorse

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.
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Novlucker

#11
Lo hice de la manera difícil, pero eficiente :D

Código (python) [Seleccionar]
n = int(input('Ingresa numero de empleados: '))
l = []
for i in range(n):
   t = input('Empleado '+str(i+1)+' :').split(' ')
   l.append([int(t[0]),int(t[1]),int(t[2])])
i,c = 0,0
while i<len(l)-1:
   e = i
   while e<len(l):
       if l[e][0]>l[i][0] and l[e][1]>l[i][1] and l[e][2]<l[i][2]:
           l.pop(i)
           i += -1
           c += 1
           break
       elif l[i][0]>l[e][0] and l[i][1]>l[e][1] and l[i][2]<l[e][2]:
           l.pop(e)
           e += -1
           c += 1
       e += 1
   i += 1

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:
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
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

[L]ord [R]NA

#12
Código (python) [Seleccionar]
from math import sqrt
lista = []
e=0
a=int(raw_input("Introduzca el numero: "))
res=set()

if a>1:
for i in range(2,int(sqrt(a))+1):
if i not in res:
for j in range(i,a/i+1):
res.add(i*j)
for i in range(2,a+1):
if i not in res:
if not a%i:
lista.append([i,0])
e+=1
while a%i==0:
lista[e-1][1]+=1
a/=i
s=""
for i in range(0,len(lista)):
if lista[i][1]<2:
s += str(lista[i][0])
else:
s += str(lista[i][0])+"^"+str(lista[i][1])
if i<len(lista)-1:
s+=" x "
else: s=a
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
---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)

Novlucker

#13
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 (python) [Seleccionar]
import urllib.request

userid = 'u'+input('Ingresa id de perfil: ')
whocont = ''
start = 0
while whocont.find('Visitante') == -1:
    whocont = str(urllib.request.urlopen('http://foro.elhacker.net/who.html;start='+str(start)+';sort=user').read())
    whousrs = whocont.split('/profiles/')
    for user in whousrs:
        if user.find(userid) != -1:
            username = user[user.find('>')+1:user.find('</')]
            sts = user.find('<td>')+4
            status = user[sts:user.find('</td>',sts)]
            print(username + ' - ' + status)
            break
    start+=15


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

Y la solución al reto de Lord R.N.A
Código (python) [Seleccionar]
import math

n = int(input('Ingrese numero de puntos: '))
cp = eval(input('Ingrese coordenadas de punto central: '))
points,a = [],[]
for i in range(n):
    points.append(eval(input('Coordenadas del Punto('+str(i+1)+') :')))

c = 0
for i in points:
    point = (cp[0]-i[0],cp[1]-i[1],cp[2]-i[2])
    d = math.sqrt(point[0]**2+point[1]**2+point[2]**2)
    a.append([c,d])
    c+=1

a.sort(key=lambda i: i[1])
for i in a:
    print(points[i[0]])


Pensando en un reto :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

Novlucker

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:
---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
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

[L]ord [R]NA

#16
Aqui esta la respuesta... pongo reto cuando vuelva de la universidad... unas 6 horas.

Código (python) [Seleccionar]
cantidad = int(raw_input("Introduce la cantidad de numeros: "))
amigos = []
res = []

def friend(x):
res = 0
for i in range(1,x):
if x%i==0:
res+=i
return res


for i in range(cantidad):
a = int(raw_input("Introduce el valor numero "+str(i)+": "))
amigos.append([a,0])
amigos[i][1] = friend(amigos[i][0])

for i in range(len(amigos)):
for j in range(i,len(amigos)):
if (amigos[i][0] == amigos[j][1]) and (amigos[i][1] == amigos[j][0]):
print "("+str(amigos[i][0])+","+str(amigos[j][0])+")"

[L]ord [R]NA

#17
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.


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.
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.
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.

[L]ord [R]NA

Si alguien desea obvie el reto y continuen con otro.

[L]ord [R]NA

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.
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.
=>Secuencia Correcta: 00:00:00 01/01/0000