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