martes, 17 de abril de 2012

Nuevo Blog

Ahora empezaré a escribir en este nuevo blog http://radical3d.blogspot.com/ ya no solo estoy programando solo en Python, también trabajo mucho con PHP y últimamente con JAVA, por eso decidí comenzar de nuevo y mostrar todo lo que he aprendido, espero que se pasen por ahí alguna vez, hoy ha sido el primer post Creando una aplicación Android I de VI y pues como verán es programación para móviles, no solo en Android, también meteré algo de J2ME y JQueryMobile.

Nos vemos por allá

jueves, 30 de junio de 2011

Potencia a 2

pfff hace rato no posteo nada en mi blog, pero siempre siempre estoy estudiando y aprendiendo algo nuevo y aunque este sea un post en muuuuuuucho tiempo, yo creo que a más de uno le servirá.

Pues estoy en unos retos de programación (no diré de dónde) y pusieron un problema que nunca había pensado que tendría que resolver y me saco canas, pero como siempre mi amado Python está ahí para ayudarme; el enunciado dice así:
Todo número entero positivo se puede expresar de muchas maneras como suma de potencias de dos. Por ejemplo, puede escribirse así:
19 = 2² + 2² + 2² + 2² + 2¹ + 2⁰
19 = 2³ + 2³ + 2¹ + 2⁰
19 = 2⁴ + 2¹ + 2⁰
Dado un número entero positivo n, Usted debe determinar la mínima cantidad de potencias de dos que sumadas dan exactamente n.
Descripción de la entrada
La primera línea de la entrada tiene un número natural T (1<=T<=200) indicando la cantidad de casos de prueba. Cada
caso de prueba se describe a través de una sola línea que contiene un número entero positivo n (1<=n<=10⁹).
Antes y después de la entrada de cada caso de prueba hay exactamente una línea con tres asteriscos ('***').
Descripción de la salida
Para cada caso de prueba se debe imprimir una línea con la mínima cantidad de potencias de dos que sumadas dan n.
Entrada de ejemplo:
5
***
1
***
4
***
15
***
16
***
19
***
Salida correspondiente a la entrada de ejemplo
1
1
4
1
3
Y se preguntarán ustedes al igual que yo Y COMO #$%# acomodo eso, pues me saco la madre y al final lo pude hacer de esta forma:
# @RadicalEd

import sys

# esta funcion ayudara a mejorar el rendimiento del for
def bucleRapido(valor):
  x = 0
  while x < valor:
    yield x
    x += 1

# me toco jugar con una lista, que shit
def potencia(valor, suma=0, lista=[]):
  # haacemos un recorrido por el tamano
  # del valor que se pase
  for h in bucleRapido(valor):
    # si 2 elevado a la h es mayor que el valor
    # entonces guardaremos una variable para ir sumando
    if 2**h>=valor:
      pot = 2**(h-1)
      suma += 1
      lista.append(suma)
      break 
  # aca podran ver lo bonito de una funcion recursiva
  if valor>0:
    if h!=0:
      potencia(valor-pot, suma)
  return lista[len(lista)-1]

# abrimos el archivo que contiene los datos
f = open(sys.argv[1])
z = f.read()
f.close()

# separamos los datos por saltos de linea y los 3 *
# en una lista
z = z.split('\n***\n')

# aca se agregaran los datos a una lista nueva que
# servira para guardar los datos en un nuevo archivo
d = []
for h in z:
  # a veces el ultimo salto de linea es un vacio,
  # hay que validarlo para no dar un valor errado
  if h!='':
    x = potencia(int(h))
    d.append(x)

# guardamos los datos en el nuevo archivo
f = open('salida', 'w')
for h in d:
  f.write(str(h)+"\n")
f.close()

martes, 2 de febrero de 2010

Reunión día de Internet

En Cali queremos hacer el Día de Internet más grande del mundo y todos estos chavos y yo, el moacho con sonrisa de oreja a oreja nos proponemos a hacerlo, será genial trabajar con tod@s est@s loc@s y pues animo moachos, serémos los únicos en el mundo ese día que trataremos de movilizar toda una ciudad, será GENIAL.

lunes, 1 de febrero de 2010

DELM Cali

Pues mi querido blog y a los que me siguen, últimamente ya no posteo, pero no es por que ya no quiera mi Python, eso sería una calumnia y los podría demandar por eso :P , lo que pasa es que ando metido en varios grupos muchos de tecnología y Linux, otros de Anime y ahora ando para meterme en uno de protección animal junto a mi esposita para evitar que se maltrate a los toros en los mataderos (como les digo yo) o mejor conocidos como plazas de toros; ayer estuvé también en una reunión de tecnología, el DELM o más mejor dichó Domingo en la Mañana, hechó en la ciudad de Cali, es el 4 y mi primer participación, los conocí participando en el BarCamp Cali y uno de los proyectos es participar en el Día del Internet en la ciudad de Cali y si es posible hacer que los participantes del DELM-BarCamp seamos los asignados para llevar a cabo el proyecto.

Vamos a ver cómo nos va, por ahora les dejó una foto que se tomo el día de ayer y sí yo soy el moacho de camisa negra con parrafo geek :P no es que sea tan chiquito, es que me toco bajar un poquito mi cabeza y mis piernas para que los de atras pudieran ser vistos, el moacho de camiseta azul que está sentado es un compañero del grupo Cabuntu al cual pertenezco.

martes, 26 de enero de 2010

Ecuaciones Cuadraticas???

Por ahí hay un reto, no diré de dónde para que no hagan trampa y es resolver la ecuación cuadratica, de la forma ax^2+bx+c = 0 y pues quién más sino es Python para ayudarme en esas arduas tareas, el problema no es resolver la ecuación de segundo grado, el problema es resolver 9999 funciones en un archivo de texto con inconsistencias en el archivo, cómo:
  • Tabulaciones
  • Signos pegados (+--+)
  • Saltos de línea
  • Cuando hay una x sola reemplazarla por un valor 1
  • Quitar las expresiones x^2 y x
Y pues esto fue lo que se me ocurrió con mi querida culebrita
import math

def separar(ecu):
"""Esta funcion separara cada valor de la ecuacion"""
ecu = ecu.replace('\t', '') #Se reemplazan los tabulados
nueva = ecu.split('x^2') #quitamos los valores con x^2 y x
nueva += nueva[1].split('x')
#Se elimina el indice 1 de la lista y lo dejamos
#con los datos necesarios
nueva.remove(nueva[1])
#Ahora recorremos la lista para no dejar signos sin valores
#creamos un contador para el indice
cont = 0
for h in nueva:
if h == '+' or h == '-' or h == '': #Si es un signo +/- o sino es nada
h += '1'
nueva.remove(nueva[cont])
nueva.insert(cont, h)
cont += 1
x = cuadratica(int(nueva[0]), int(nueva[1]), int(nueva[2]))
return x

def cuadratica(a, b, c):
"""Vamos a obtener el valor de X por medio de la ecuacion cuadratica"""
raiz = math.sqrt((b**2)-(4*a*c))
x1 = (-b + raiz)/(2*a)
x2 = (-b - raiz)/(2*a)
lista = [str(x1), str(x2)]
return lista

archi = open('quadratic.txt').readlines()
suma = 0
for h in archi:
z = separar(h)
for l in z:
#Si al final sale un .0 entonces lo volvemos entero y se suma
if l[-2:] == '.0':
suma += int(l.replace('.0', ''))

print suma