Simplificar código
Me encanta programar, es algo que me divierte, pero ayer me di cuenta que me gusta mas cuando aprendo algo nuevo y cuando es una especie de reto lo que debo hacer. Ayer estaba como siempre en el mIRC, probando unas cosas en Scripting, tenia esto:
on 1:INPUT:#{
if($1 == +a) { mode # +a $2 }
if($1 == -a) { mode # -a $2 }
if($1 == +o) { mode # +o $2 }
if($1 == -o) { mode # -o $2 }
if($1 == +h) { mode # +h $2 }
if($1 == -h) { mode # -h $2 }
if($1 == +v) { mode # +v $2 }
if($1 == -v) { mode # -v $2 }
}
Lo que hace es que al escribir yo mismo +o nick, le daría status de operador al nick mencionado. Pero entonces, despues de una pequeña charla, resulto que un amigo tenia en una sola linea lo necesario para hacer lo que yo hacia.. y la linea tenia 100 caracteres aproximadamente.. y como no quiso decirme como lo tenia, fue mi turno de ponerme a investigar y tratar de realizarla en menos caracteres.
Después de un rato pensando e intentando cosas, deje mi función en aproximadamente 120 caracteres, lo que aun hacia que perdiera el pequeño reto, ya que la de el tenia aun menos.. como parte de eso, habíamos quedado que el que tuviera mas caracteres mostraría su código, así que me toco hacerlo.. cuando lo vio, dijo que podía hacer su código aun mas corto.. y después de un rato dijo que ahora eran solo alrededor de 85 caracteres.. entonces yo seguí pensando como hacerlo, pero en lo mas que pude dejarlo fueron 90 caracteres u_u..
Al fin, me mostró como tenia su código, eran ya como 70-80 caracteres.. y de ahí, discutiendo sobre algunas cosas fuimos reduciendo el código hasta que quedo en esto:
on 1:INPUT:#:{if ($regex(,$1,^[-+][vhoa])){ mode # $1 $2- } }
¡61 caracteres! Cumple exactamente la misma función (y hasta mejor) que el código que tenia al principio, requiere un poco mas de comprensión, pero se simplifica mucho lo que se hace. Francamente, me encanto hacer eso.. me distraje de un ensayo que tenia que hacer (que termine ya muy noche, por lo que tengo sueño u-u) pero valió la pena, y aun creemos que podemos disminuirlo un poco mas ese código..
En fin, solo quería escribir esto xD.. ya que fue algo que me pareció por demás interesante, y chance a alguien le llegue a servir algún día o.O… y si puedes disminuir el código, déjalo en los comentarios xD
Edito: Mmh.. nueva linea.. 2 caracteres mas pero la expresión regular esta mejorada para corregir algunos problemas al escribir ciertas cosas =P
on 1:INPUT:#:{if ($regex(,$1,^([+-][aohv]+)+$)){ mode # $1- } }