Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)
Autor
|
Tema: Reto/Juego Ejercicios en Python (Leído 9,120 veces)
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
Buenas ... Revivamos esto, si funciona funciona, y sino lo dejamos tirado como siempre  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  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: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  Saludos P.D: si nadie responde en tres días, desaparezco el post xD
|
|
|
|
« Última modificación: 3 Septiembre 2010, 00:03 por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
criskapunk
Desconectado
Mensajes: 255
|
Buenas, Una pequeña duda que me surgio  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 
|
|
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
Buena pregunta, lo dejamos en True para hacerlo más sencillo, así no es necesario agrupar los factores  Saludos
|
|
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
|
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
Dejo la solución que tenía  def p(n): for i in range(2,n): if(n%i==0): return False return True n=int(input('Numero: ')) m=int(input('Cantidad de factores: ')) i,c=2,0 while i<=n: if p(i) and n%i==0: n/=i c+=1 else: i+=1 if c>=m: print(True) else: print(False) Saludos
|
|
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.507
El Dictador y Verdugo de H-Sec
|
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. 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.
|
|
|
|
« Última modificación: 3 Septiembre 2010, 03:55 por Lord R.N.A. »
|
En línea
|
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.507
El Dictador y Verdugo de H-Sec
|
asi Novlucker no me asesina: from math import sqrt M=float(raw_input("Ingrese la Masa: ")) D=float(raw_input("Ingrese la Distancia: ")) F=float(raw_input("Ingrese la Fuerza: ")) N=float(raw_input("Ingrese la Coeficiente de Friccion: ")) if F<(N*M*9.8):print "La velocidad en " + str(D) + " es 0.0m/s" else:print "La velocidad a los " +str(D) + "Mts. es " + str(round(sqrt(((2*D)/M)*(F-(N*M*9.8))),1)) + "m/s"
|
|
|
|
|
En línea
|
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.507
El Dictador y Verdugo de H-Sec
|
El Nuevo reto sera... Dado dos valores A y B, localizar todos los numero primos entre ese intervalo, incluyendolos. Valores de entrada Primer numero: 6 Segundo Numero: 17
Valor de salida
7 11 13 17
|
|
|
|
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Colaborador
 
Desconectado
Mensajes: 2.710
Nie Dam Sie
|
from math import sqrt def isprime(num): if num <2: return False i=2 while i <=sqrt(abs(num)): if num%i == 0: return False i+=1 return True min=int(raw_input("Min: ")) max=int(raw_input("Max: ")) for num in range(min,max+1): if isprime(num): print num No lo probé todavía pero debería funcionar si no exageran con el rango  . Se podría hacer una implementación por probabilidades pero igualmente por lo menos para mi no lo vale.  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. 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! 
|
|
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.507
El Dictador y Verdugo de H-Sec
|
 el otro esta muy complicado... y me gusta irme por lo simple #Funciona correctamente en Python 2.7 cadena = raw_input("Inserte la secuencia de numeros: ") if cadena.isdigit(): while len(cadena)%8!=0:cadena="0"+cadena s=list(cadena) for n in range(((len(cadena)/4)-1),0,-1): if n%2!=0:list.insert(s,n*4,"-") else:list.insert(s,n*4,".") s = str(s) s = s.translate(None,"[],' ") 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: 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.
|
|
|
|
« Última modificación: 6 Septiembre 2010, 18:03 por Lord R.N.A. »
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Colaborador
 
Desconectado
Mensajes: 2.710
Nie Dam Sie
|
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.
|
|
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
Lo hice de la manera difícil, pero eficiente  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
|
|
|
|
« Última modificación: 7 Septiembre 2010, 02:59 por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.507
El Dictador y Verdugo de H-Sec
|
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)
|
|
|
|
« Última modificación: 6 Septiembre 2010, 22:22 por Lord R.N.A. »
|
En línea
|
|
|
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
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  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
|
|
|
|
« Última modificación: 7 Septiembre 2010, 15:20 por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
Y la solución al reto de Lord R.N.Aimport 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  Saludos
|
|
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
|
|