All Discussions - null http://null.cl0.vanillaforums.com/discussions/feed.rss Thu, 17 May 12 02:29:24 -0400 All Discussions - null en-CA Login Bypass en Sahilices.com.ar http://null.cl0.vanillaforums.com/discussion/14/login-bypass-en-sahilices.com.ar Wed, 02 Mar 2011 22:47:53 -0500 Fran 14@/discussions http://sahilices.com.ar/login.asp

user: lo que se te cante el huevo
pass: ' OR ''='   (la archifamosa sql injection)

Si a alguien le da curiosidad como funciona eso, lo puedo explicar :)
]]>
La sucesión Look-and-say http://null.cl0.vanillaforums.com/discussion/27/la-sucesion-look-and-say Wed, 29 Jun 2011 14:12:13 -0400 Fran 27@/discussions
Los primeros términos de la sucesión son:

1,11,21,1211,111221, \ldots

Viendo el termino inicial, que es 1, escribimos la cantidad de números que vemos. Digamos: un uno. Entonces el segundo termino de la sucesión sera 11. Recursivamente, viendo 11, vemos dos unos, entonces el tercer termino de la sucesion seria 21. Ahora, el cuarto, seria un (1) dos (2) y un (1) uno (1): 1211.

Los 10 primeros términos:

## Sucesion 'look and say'
#
# 1:  1
# 2:  11
# 3:  21
# 4:  1211
# 5:  111221
# 6:  312211
# 7:  13112221
# 8:  1113213211
# 9:  31131211131221
# 10: 13211311123113112211
#
##########################
  
¿Fácil no? Esta sucesión tiene varias características interesantes que pueden observar aquí. Se me vienen varias preguntas a la cabeza como: se podría encontrar una definición explicita para la sucesión?

En fin, acá dejo una función en python (versión estudiante de primer año) para calcular el ultimo termino a partir de un valor raíz y el termino que se desee conocer (optimizaciones al codigo son bienvenidas).


Por ejemplo, el termino 50 de la sucesión vendría a contener mas de un millón de números, que lo calculo en 5 seg. (+/-) con el algoritmo anterior (totalmente no optimo pero bueh :P)
]]>
Simulador de la bolsa de comercio http://null.cl0.vanillaforums.com/discussion/26/simulador-de-la-bolsa-de-comercio Mon, 16 May 2011 00:02:09 -0400 Fran 26@/discussions
Hay acciones de diferentes empresas, y cada día que pasa esas acciones van cambiando de valor al azar (tampoco TAN al azar, estaría bueno plantear algún modelo para eso). Las acciones se pueden ir comprando y vendiendo.

El objetivo del juego realmente no sabría decirles cual es, jajaj, obviamente que uno va a apuntar a quedarse con todas las acciones, y ahí esta la competencia y el uso de la inteligencia para predecir el comportamiento de la bolsa (que en este caso seria más cuestión de suerte, por el hecho que los nuevos valores se generarían al azar).

Viéndonos limitado por esto, podríamos usar las acciones de alguna bolsa real y importarlas cada día en el sitio. Y ahí competir usando datos reales (eso lo haría bastante más emocionante).

No lo veo para nada complejo y sobre todo, estaría bueno que lo orientemos a que sea un proyecto del foro. Total con un svn y un poco de planificación y diseño lo levantamos en 2 patadas.

¿Quién se prende? 
]]>
Obtener una fracción a partir de un número decimal. http://null.cl0.vanillaforums.com/discussion/15/obtener-una-fraccion-a-partir-de-un-numero-decimal. Thu, 03 Mar 2011 22:25:28 -0500 Fran 15@/discussions
Ejemplo: 0.5 => 1/2
              0.33333333 => 1/3
              7.85106383 => 369/47

Sin complicarmela tanto se me ocurrió este algoritmo:

Yo tengo un numero decimal X, y quiero expresarlo de la forma N/D donde N es e el númerador y D el denominador. Lo que quedaría:

N/D = X

Despejando N, nos quedaria:

N = X*D

El número que busco tiene que ser la mínima expresión fraccionaria (como 1/2 = 2/4 = 3/6 = ... me quedo con 1/2). Entonces lo único que tengo que hacer es ir dándole valores a D (a partir de 2, o 1 en el caso que el número que se ingresa ya sea entero) hasta que N sea entero.

Una simple implementación en Python:

def toFraction(x): 
d = 1
while not float(x*d).is_integer():
d += 1
return str(int(x*d)) + "/" + str(int(d))

¿A alguien se le ocurre un método mejor?
]]>
Pelea de algoritmos http://null.cl0.vanillaforums.com/discussion/22/pelea-de-algoritmos Fri, 25 Mar 2011 14:58:07 -0400 Fran 22@/discussions
Las acciones posibles serian:

Atacar: un golpe que causa un daño entre un rango pequeño.

Defender: una probabilidad de esquivar el ataque y contra-atacar (con un daño menor al de Atacar).

Curar: te recarga un poco de vida. (usa mana) 

Rayo: es un golpe que causa un daño entre un rango grande, mayor al de atacar. (usa mana) (no se puede esquivar)


Las características de los luchadores (para todos iguales):

Vida: 500 puntos de vida.
Mana: 10 puntos de mana (cada conjuro gasta 1 punto).
Rango ataque: 5 - 25
Rango contra-ataque: 1 - 10
Rango Rayo: 10 - 50
Rango curar: 1 - 100

Obviamente todos estos valores son arbitrarios, habría que buscar algunos para que las luchas sean balanceadas. Aunque pensándolo bien, le eficiencia de los algoritmos se basaría en descubrir por donde se puede sacar más ventaja a partir de las características de los luchadores (lo que es un buen ejemplo de programación lineal y optimización de la producción ;) ).

Bien, bien, bien. Hasta ahora todo bonito. Lo complicado es: no todos programamos en los mismos lenguajes. ¿Entonces como hacemos? Bueno, yo hago un servidor que se encargue de gestionar las peleas, y ustedes programan sus algoritmos en lo que se les cante, siempre y cuando se pueda conectar al servidor.

Si les interesa podemos ir especificando el protocolo del juego. También más adelante podríamos ir variando las características de los luchadores, hasta lograr algoritmos totalmente genéricos que basen sus estrategias puramente en estas.

Las luchas serian turno por turno.

Una estrategia para un luchador A seria (simple):

si la ronda es par: Atacar.
sl la ronda es impar: Defender.

La de un luchador B podría ser:

si ronda es 1: movimiento de ataque al azar (Ataque o Rayo).
si vida propia es baja: Si hay mana: curar; Sino Atacar.
si vida contrincante es baja: Si hay mana: Rayo; Sino Atacar.
si enemigo Ataco en ronda anterior: Defender.

Espero que se entienda. A mayor complejidad de algoritmo, mejores resultados (o no...). Hasta algunos podrían hacer una red neuronal que vaya aprendiendo a mejorar su estrategia a medida que pelea, y así, después de muchas peleas poder vencer a todos. Todo eso queda a criterio del concursante. Que cada uno haga lo que quiera con su algoritmo, solamente debe respetar el protocolo y enviar una acción cada vez que se pase a la siguiente ronda. Hasta que se ocurrio un algoritmo que me hacke la PC y busque los fuentes de los demas algoritmos para poder espiar sus estrategias (pero eso ya seria de limado :P ).

Bueno espero respuestas y si les copa nos ponemos manos a la obra total no es difícil.

]]>
Hex http://null.cl0.vanillaforums.com/discussion/24/hex Sat, 23 Apr 2011 15:27:22 -0400 Fran 24@/discussions http://franr.com.ar/hex

para jugar de a 2 personas
]]>
Locura número 1 :D ( XD ) http://null.cl0.vanillaforums.com/discussion/25/locura-numero-1-d-xd- Sat, 23 Apr 2011 23:06:04 -0400 Nico 25@/discussions Hola, les presento un prototipo de modelo matemático que estoy desarrollando para poder comprimir información (como el WinRar, por ejemplo, pero usando mi propio método). Les advierto que esto va a ser demasiado largo.

Y digo prototipo porque todavía no está terminado, falta mucho por hacer (este proyecto lo dejé hace tiempo atrás porque tenía que ocuparme en otras cosas, pienso retomarlo). Es un proyecto experimental y bastante jodido, escribo todo esto para descargar un poco la tensión (estoy enloqueciendo mas de lo normal). xD

Esto va a ser excesivamente largo, no es necesario que lo lean. (supongo que me sirve de guía, y ya que estoy lo postéo acá)



Introducción:
-------------



La compresión de datos tiene por objetivos usar menos espacio de memoria en el disco rígido a costa de modificar los datos en cuestión. Obviamente los datos comprimidos no pueden ejecutarse como un .exe, y como están alterados no sirven para nada hasta que se los descomprima.

Supongamos que tenemos una cadena de caracteres: $A.

$A podría ser, por ejemplo: [ A48^*S¨"=GKA?"¨RA::>¨!?·)VK"?DA ]

Pero podriamos guardar esa cadena en un archivo txt, y leer el archivo de forma binaria, obteniendo ceros y unos.

$A quedaría algo así:

[ 0110100101010010101010010101010001010100101010101001 ]

Mucho más larga por supuesto, ya que para cada caracter necesitamos más de un bit (dependiendo del tipo de codificación, pero no viene al caso, supongamos que necesitamos 8 bits).



Exceso de bits:
---------------



Si cada caracter toma información de 8 bits, a nosotros no nos interesa. Nosotros vamos a tomar de a 10 caracteres (1024 posibilidades)

Si la cadena binaria tiene, por ejemplo, 13 dígitos, entonces van a sobrar 3 dígitos (o a faltar 7 dígitos). Lo que se hace en ese caso es apartar esos 3 bits y registrarlos por ahi. La idea es que esos 3 bits no van a ser comprimidos.

Un archivo podría tener 450137463 bits, de modo que 3 bits definitivamente no hacen la diferencia.



Números decimales:
------------------



Para simplificar MUCHO la tarea de entender cómo funciona todo, vamos a representar las 1024 posibilidades de los 10 bits como números decimales. Siempre trabajaríamos con números binarios, pero los representamos en decimal.

Y los números que tienen ceros a la izquierda, se quedan tal y como están: con ceros a la izquierda.

Ejemplos:     0012     0003     0628     1024     0000     0391

Esto lo hacemos así porque en realidad estamos trabajando con cadenas, aunque se vea como números.

El 0082 podría estar representando la letra "R" por ejemplo. Noten que tomo siempre de a 4 caractéres.

Si tuvieramos una cadena de caractéres asi: "0371037510120092"

la dividiríamos así: 0371 0375 1012 0092

A cada grupo de 4 dígitos, llamemoslé código.
]]>
Sumatoria de rangos http://null.cl0.vanillaforums.com/discussion/23/sumatoria-de-rangos Sun, 17 Apr 2011 22:42:16 -0400 Fran 23@/discussions n primeros números naturales:


 n * (n + 1)
-----------------
       2


Ejemplo: n = 100


 100 * (100 + 1)          10100
------------------------  =   ----------- = 5050
          2                       2



Es muy fácil extender esta formula para cual tipo de rango (que no empiece de 0 necesariamente)
Sumatoria de los números naturales de n a m:


 m * (m + 1)      (n - 1) * (n - 1 + 1)           m^2 + m - n^2 + n
-------------------  -  ----------------------------  =  --------------------------------
       2                             2                                 2


Uso n-1 en vez de n porque sino le estoy quitando el primer número al rango.

Ejemplo: n = 50, m = 500


500^2 + 500 - 50^2 + 50
----------------------------------  =  124025
               2
]]>
Protocolo de Zezenia http://null.cl0.vanillaforums.com/discussion/21/protocolo-de-zezenia Sun, 20 Mar 2011 15:28:31 -0400 Fran 21@/discussions Zezenia para poder hacer un "bot" y boludear un rato. Dejo un cacho de lo resuelto:

Estructura del paquete login:

1: longitud total del paquete
2: versión del cliente desde el cual nos conectamos
3: longitud de usuario
4: usuario
5: longitud de password
6: password
7: longitud de nombre del personaje
8: nombre del personaje

Cada uno de estos datos es separado por un "00" (en hexadecimal)

un ejemplo:

referencias
<1 > <2     > <3  > <4                    > <5  > <6                    > <7  > <8              >
texto plano
.  .  .  .  .  .  .  3  5  2  6  3  f  f  f  .  .  3  5  2  6  3  f  f  f  .  .  P  a  k  i  t  o 
heaxdecimal
1F 00 02 9B 01 08 00 33 35 32 36 33 66 66 66 08 00 33 35 32 36 33 66 66 66 06 00 50 61 6B 69 74 6F

Los puntos son caracteres que no se pueden representar como texto plano pero viajan sin ningún problema por TCP/IP.

Se debe mandar todo en hexadecimal (tienen que transformar todos los caracteres).

Ok, con eso ya nos podemos conectar al servidor. Ahora vamos al siguiente paso: dar un paso :P

Estructura del paquete para moverse:
1: codigo '01'
2: direccion (de 04 hasta 07)

Lo que nos quedaría (recordar que el '00' separa datos):

abajo
01 00 04

izquierda
01 00 05

arriba
01 00 06

derecha
01 00 07

Con esto ya podemos conectarnos y caminar desde una consola sin necesidad de ningún cliente. Un poco más de investigación, nos permitiria lograr muchas cosas. Aunque hay un pequeño inconveniente que todavía no pude resolver y por eso perdí el interés de continuar, capas que a alguien le sirve.

Dejo un script hecho en python que utiliza todo lo descripto previamente:
]]>
Tabla de Localidades http://null.cl0.vanillaforums.com/discussion/20/tabla-de-localidades Fri, 18 Mar 2011 08:30:50 -0400 Natan 20@/discussions No se si a alguno le sirva, pero acá va.

En la muni necesitabamos una tabla con todas las localidades de Argentina, y encontramos que Correo Argentino la tiene, acá:

Así que armé un script PHP que recorre todas las provincias de esa lista y va copiandose a lo bruto las localidades con su código postal y provincia, y finalmente vuelca los datos en consultas SQL.

Para simplificar, paso los datos en un archivo .ODS por si alguna vez alguno necesita los datos para un proyecto o algo.

http://www.mediafire.com/?wb6x1nknp96xdbo]]>
Cuéntame más... http://null.cl0.vanillaforums.com/discussion/17/cuentame-mas... Thu, 10 Mar 2011 01:22:41 -0500 Fran 17@/discussions
Por mi parte, acabo de implementar OpenGL en el (interminable) Pixel War, y por lo que veo, van a volver los muchachitos de negro con ametralladoras y mucha mucha sangre. También ando con ganas de meterme en alguna comunidad de desarrollo de algún RPG online, algo como Argentum o OpenTibia.

¿Qué hay de ustedes?

image
]]>
Duplicar tamaño de imagen for dummies http://null.cl0.vanillaforums.com/discussion/18/duplicar-tamano-de-imagen-for-dummies Wed, 16 Mar 2011 02:26:53 -0400 Fran 18@/discussions 8-X


Primero: la carita - 10 pixels x 10 pixels - la linea roja marca el limite de la imagen original

image


Segundo: tomando pixel por pixel, lo movemos al doble de sus coordenadas (si mi pixel esta en [5, 5] ahora paso a [10, 10])
Atención: empezar siempre por abajo a la derecha yendo hacia la izquierda para arriba


image


Tercero y último: rellenar los 3 pixels vacíos alrededor de cada pixel nuevo con el color de ese mismo pixel (en el algoritmo formal este paso se combina con el paso 2 en la misma iteración de c/pixel)


image


Este proceso sirve tanto para duplicar, triplicar, cuadruplicar, hasta n-plicar una imagen, pero solo eso. Solo aumenta el tamaño en forma potencial y esa es la gran macana, por lo que no tiene ningún aplicación útil, je.

¿Qué opinan?
]]>
CS Tutoring Center http://null.cl0.vanillaforums.com/discussion/16/cs-tutoring-center Tue, 08 Mar 2011 18:07:24 -0500 Fran 16@/discussions http://www.cstutoringcenter.com/


Web con retos de programación y matemáticas, parecida a Project Euler pero un poco más fáciles. Si alguno se copa podemos ir resolviéndolos cooperativamente 

:-D ]]>
¿Qué es esto y quienes somos nosotros y por que el mundo gira alrededor del Sol? http://null.cl0.vanillaforums.com/discussion/11/que-es-esto-y-quienes-somos-nosotros-y-por-que-el-mundo-gira-alrededor-del-sol Wed, 02 Mar 2011 22:11:51 -0500 Fran 11@/discussions
return 0;
]]>
Kevin http://null.cl0.vanillaforums.com/discussion/13/kevin Wed, 02 Mar 2011 22:21:48 -0500 Fran 13@/discussions



~:> ]]>