Archive for March, 2008

Super Smash Bros. Brawl

March 10th, 2008

Seguro todos se imaginan que esta entrada es como las cientos de entradas en los blogs que empezaron a salir desde el lanzamiento del juego presumiendo que ya lo habían adquirido y contando que esta de webos, etc.

SE EQUIVOCAN

No, no lo compre, por lo menos por ahora, y si, me muero de envidia.

Así que se jodan todos los que ya lo compraron, yo tendré que esperarme un mes o algo así.

Claro que si no quieren ser las fuentes de tan horribles sentimientos pueden regalarme una copia para sacar todo el odio de mi alma. Y ya que andan entrados un router inalámbrico para jugar en linea. ¿Si no?, ¡pudranse!

¿Como funciona el swaping con XOR?

March 6th, 2008

Los que estudiaron programación indudablemente se encontraron con el problema de swapear dos variables, es decir, intercambiar su valor, y los profesores indudablemente mostraban la resolución:

1
2
3
4
5
6
	void Swap (ref int a, ref int b) 
	{
		int swapTemporal = a;
		a = b;
		b = swapTemporal;
	}

Donde se usaba una variable temporal para no perder el valor de a cuando se le asigna el valor de b, para posteriormente asignárselo a b. Algunos tal ves se hayan encontrado la resolución alternativa, usando XOR sin variable temporal:

1
2
3
4
5
6
	void Swap (ref int a, ref int b) 
	{
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
	}

Y quedaron sorprendidos por que ciertamente funciona.

¿Pero, por que?

Empezamos definiendo rápidamente, XOR es un OR exclusivo, lo que significa que es un operador binario que nos da como resultado un 1 solamente si uno de los dos (pero no ambos) operandos es igualmente 1, es decir, la siguiente tabla de verdad:

	_________________
	| a | b | a ^ b |
	-----------------
	| 0 | 0 |   0   |
	| 0 | 1 |   1   |
	| 1 | 0 |   1   |
	| 1 | 1 |   0   |
	-----------------

Dado esto podemos definir un par de axiomas:

	a ^ a = 0
	a ^ 0 = a

es decir:

  • Si ambos operandos son iguales en un XOR el resultado es invariablemente cero
  • Si un operando es igual a cero en un XOR el resultado es invariablemente el valor del otro operando

Y estos dos axiomas son lo único que necesitamos para comprobar que el primer y segundo código son equivalentes:

a’ = a ^ b //Es a prima para evitar confundir la variable con el valor original de a

b’ = a’ ^ b
Si sutituimos el valor de a’ tenemos:
b’ = (a ^ b) ^ b
b ^ b = 0 por nuestro primer axioma, por lo que nos queda:
b’ = a ^ 0
a ^ 0 = a por nuestro segundo axioma, por lo que tenemos
b’ = a

a’ = a’ ^ b’ //Si sustituimos los valores de a’ y b’ tenemos:
a’ = (a ^ b) ^ a
a ^ a = 0 por nuestro primer axioma, por lo que nos queda:
a’ = b ^ 0
b ^ 0 = b por nuestro segundo axioma, por lo que tenemos
a’ = b

Asi, al finl de las tres operaciones a’ tiene el valor original de b, y b’ el valor original de a.

Q.E.D. \o/

Como ven la demostración es trivial y seguramente un overkill, pero te puede matar 5 minutos de aburrimiento :p. Nos vemos en la siguiente entrega cuando demuestre que el negro es blanco, claro, al menos que muera antes en un crucero de zebras.

¡Deja mi savefile, maldito!

March 5th, 2008

Hace poco en una historia de slashdot alguien preguntaba cual era la mejor edad para introducir a tus hijos a los videojuegos.

La respuesta mas popular fue algo como: “Pueden jugar videojuegos cuando los pequeños bastardos aprendan a no borrar mis savefiles”

AMEN HERMANO

Tengo un niño de cuatros años y el malvado me borro mi savefile de mario galaxy con 120 estrellas de mario y como 50 con luigui. No contento con eso borro mi savefile de Twilight Princess.

Muchos creerán que no es accidente, que simplemente mi hijo me odia y solo desea mi muerte y destrucción. Creo que no se equivocan, aunque no soy el único, tambien a borrado los savefiles de Mariana.

No se si morphy haya dicho algo al respecto, pero debio de haberlo hecho. No importa que la opción este escondida, ni que tan difícil sea de accesar, un niño al jugar invariablemente terminara borrando tu archivo. Tarde o temprano.

PERO TENGO LA SOLUCION

Ojala me lean algún día los desarrolladores de las casas de videojuegos por que tengo la solucion al problema. Cuando quieras sobreescribir o eliminar un savefile todos los juegos deberían de requerir que la persona pueda leer y resolver un pequeño problema matemático, suma, resta o multiplicación.

Si no sabes leer ni sumar no tienes la capacidad cognitiva para decidir si esta bien borrar mi archivo, además, si el pequeño bastardo no se sabe las tablas de multiplicar debería de estar estudiando en ves de jugando.

POR UN MUNDO MAS SEGURO PARA LOS SAVEFILES \o/