Reto/Juego Ejercicios en Python

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

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

Novlucker

Buenas ...
Revivamos esto, 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:

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

criskapunk

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 ;)


Novlucker

Buena pregunta, lo dejamos en True para hacerlo más sencillo, así no es necesario agrupar los factores :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

[L]ord [R]NA

#3
Código (python) [Seleccionar]
from math import sqrt

a=int(raw_input("Introduzca el numero: "))
b=int(raw_input("Introduzca la mayor cantidad de factores: "))
factores=set()
res=set()

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):
if i not in res:

while a%i==0:
a=a/i
if i not in factores: factores.add(i)

if b>=len(factores): print "Verdadero"
else: print "Falso"


Novlucker

Dejo la solución que tenía :P
Código (python) [Seleccionar]
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
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

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

[L]ord [R]NA

asi Novlucker no me asesina:

Código (python) [Seleccionar]

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"

[L]ord [R]NA

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

Littlehorse

Código (python) [Seleccionar]
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  ;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
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

[L]ord [R]NA

#9
:xD el otro esta muy complicado... y me gusta irme por lo simple

Código (python) [Seleccionar]

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