Enero
Febrero
Marzo(3)
Abril(1)
Mayo(1)
Junio(1)
Julio
Agosto(2)
Septiembre
Octubre
Noviembre
Diciembre
Intrascendentales(3)
Tech Stuff(3)
AI(3)
Math(1)
Chess(2)

Escape Artist

añadido: Thu 19 Mar 2009

Hace unos cuantos minutos, comencé una desesperada búsqueda para contarle a alguien que "Por fin me había salido", y como no encontré demasiadas personas a quienes les pudiera importar, lo escribo aquí que a final de cuentas para eso es.

Desde ayer como a esta misma hora (1 am...) estoy trabajando en un proyecto para mi clase de Inteligencia Computacional, que consiste principalmente en un robot que implemente Programación Genética y cuando creíamos ya haber terminado (ayer como a las 7:00 pm) comenzó lo verdaderamente dificil.

Lo lamento por aquellos que no son tan letrados en las Ciencias Computacionales, pero comenzaré a hablar en "Techie" (Es un lenguaje como el Klingon que solo entendemos algunos pocos jajajajaja):

Resulta ser, que tras "armar" el árbol que describe el programa candidato y pasarlo a un string para poder ser evaluado (estabamos usando Ruby, así que necesitabamos un string para que la funcion eval() hiciera el trabajo pesado), comenzamos a tener problemas con el "escape" de comillas. Que nos tomo alrededor de 4 horas en descifrar:

Un programa ejemplo que se veía así:
"doStuff(\"stuffToDo1\",\"doMoreStuff(\\\"stuff()\\\")\")"
era perfectamente interpretado por el robot...
Sin embargo, uno podría asumir que uno que se viera así:
"doStuff(\"stuffToDo1\",\"doMoreStuff(\\\"doEvenMoreStuff(\\\\\"stuff()\\\\\")\\\")\")"
también sería interpretado felizmente.

Pues no, resulta que el escape de comillas no se logra añadiendo 2 slashes más...(como uno podría intuir...) si no que por cada "nivel" que querramos anidar nuestro programa, debemos agregar 2*La última cantidad de slashes+1, osea:

Nivel 1: 1 Slash
Nivel 2: 3 Slashes
Nivel 3: 7 Slashes (no 5 como creíamos)
Nivel 4: 15 Slashes ...
(Ya se imaginaran lo chistoso que se ve un programa de estos con 6 o 7 niveles de profundidad :P)

Y bueno, sería todo lo que quería comunicarles... espero les haya gustado el brevario cultural e intrascendental, los leo luego...


Sisnett.

PD: La función que logra duplicar los slashes y sumarles uno es la siguiente:


def escape(string)
return string.gsub(/[\\]/, '\\\\\\').gsub(/["]/, '\\"')
end


Espero sea útil :)


kyyjrbjnqel dijo:

newB1T <a href="http://fprcehfsrwmq.com/">fprcehfsrwmq</a>, [url=http://sxepoivnnnvn.com/]sxepoivnnnvn[/url], [link=http://japjkcnujlvi.com/]japjkcnujlvi[/link], http://yluivfxovugu.com/

cpkwnk dijo:

rUDe5l <a href="http://awckujaawoay.com/">awckujaawoay</a>, [url=http://aqscdfnihymc.com/]aqscdfnihymc[/url], [link=http://txjnvvdklond.com/]txjnvvdklond[/link], http://thmfwlowngru.com/

rené dijo:

peeeeerdón... MENOS 1 !!!! jejeje :P

rené dijo:

Lástima que no puedes simplemente multiplicar tus slashes por (2^n + 1), ya que para cada nivel n, éste es el número de diagonales que pareces necesitar... jejeje.
Saluuudos.

Sisnett dijo:

Si, de hecho así lo terminé implementando... aunque ahora hay millones de "nils" por todos lados :P

Dios padre, todo poderoso. Creador del cielo y la tierra. De todos los bugs visibles e invisibles dijo:

Estoy seguro que hubiera sido más elegante si cada nodo tuviera un do_run que mandara llamar todo lo demás recursivamente.

ale dijo:

ayudamee con mi exceeeel, es mas sencillo que tu problema de robots(lo cual debo aclarar, no son mis compas)y las comillas y asii!!!

(: que bueno que ya te salio esoo loco

(tu nombre)
(tu email, no será publicado)