Categoría: Ruby
18 Noviembre 2006
9 Noviembre 2006
30 Agosto 2006
Relaciones entre conceptos
Busca el tag que sobra:
acb antena3 caja san fernando cuatro lasexta serie telecinco tve
Sin embargo este no está mal:
alemania futbol humor juegos mundial
Ni este:
guerra israel libano palestina papa religion
Este muestra un grupo de tags irrelevantes:
a con el en granada julio las los mas o que ser un y
Pero también nos hacemos "la picha un lío":
actualidad iglesia libertad silvio rodriguez windows yo
26 Agosto 2006
Nuevo reto de Code Golf: las pirámides de números

Total Triangles Challenge: un reto para desenpolvar los apuntes de Algorítmica y repasar Programación Dinámica, porque además de poco código, esta vez es necesario que se ejecute todo en menos de 4 segundos (mi primer intento ha tardado más de 30 con el último triángulo).
Víctor, ¿te animas?
26 Agosto 2006
Lenguajes de script vs. "lenguajes tradicionales"
Los lenguajes de script están de moda: ¿quién no ha oído hablar de Ruby, Python, PHP, Lua,...?
Y además, se están posicionando fuertemente en el desarrollo de software frente a los elefantes sagrados (C, C++, Java y C#), equiparando el número de aplicaciones desarrollados con unos y con otros, y con una tendencia de aumento por los lenguajes de script, frente al descenso de uso de los lenguajes tradicionales.
Algunas ventajas de los lenguajes de scripting son:
- sintaxis sencilla (excepto Perl, claro está)
- código usable y fácil de comprender
- alto nivel: oculta la complejidad de muchas partes y te permite centrarte en el problema
- gran cantidad de librerías
Pero eso no es todo, muchos de estos lenguajes de script se pueden integrar con C, C++ y Java (es el caso de Lua, Python y Ruby, por ejemplo), con lo cuál nosotros podríamos desarrollar en uno de estos lenguajes pero luego incrustarlos en nuestro lenguaje de scripting favorito, mediante los bindings como si de un elemento más del lenguaje se tratara.
Por ejemplo, Lua [en], se utiliza en multitud de videojuegos como lenguaje de scripting para ocultar toda la complejidad de C++.
Si os interesa el tema le podéis echar un vistazo a scriptometer, un pequeño estudio comparativo sobre diferentes lenguajes de script en el que se muestra la complejidad, la facilidad, cúanto ocupa el programa más corto, etc.
Así que vale la pena plantearse el tema seriamente y aprender uno o dos de ellos (tres ya es para nota, aunque los hay por ahí que dicen que saben unos 5 o 6). Y si en el trabajo no os dejan utilizarlo, siempre podéis utilizarlo con sus bindings.
18 Agosto 2006
Code Golf, retos de programación para pasar el verano

Code Golf se presenta como una página de pasatiempos de programación. En ella se plantean una serie de retos, los cuáles podemos resolver en uno de los lenguajes permitidos: Ruby, PHP, Perl y Python.
De cada reto se nos da la salida que debe de producir nuestro programa, y se valora el tamaño del programa (cuanto más pequeño mejor, evidentemente). De ahí a que la programación se convierta en una pequeña locura.
El mecanismo es muy sencillo: nos registramos y elegimos un reto. Entonces programos un script y lo subimos, seleccionando el lenguaje, para que se ejecute y se compare la salida deseada con la de nuestro programa. Si ha ido bien se nos introducirá en el ránking de dicho reto y si no, tenemos que esperar 2 minutos hasta poder volver a subir un fichero.
Yo ayer estuve pasando el rato por la noche con un reto de los "sencillos": 99 Bottles of Beer, que requiere una salida tal que así:
99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.
...
2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.1 bottle of beer on the wall, 1 bottle of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
En realidad es bastante sencillo, teniendo en cuenta el singular y plural de beers y que la última línea cambia y en lugar de coger una cerveza te dice que vayas a la tienda.
Así que tras algunas horas de rehacer código y comprimirlo quedó algo así:
$a=" on the wall"
def k(l) "#{l} bottle#{l<1?'s':''} of beer"end
def l(m) a=k(m);puts a+$a+", #{a}.\n"+(m<1?"Take one down and pass it around, #{k(m-1)+$a}.\n\n":"Go to the store and buy some more, #{k(99)+$a}.")end
99.downto(1){|m| l(m)}
Total, 239 caracteres de código que ahora mismo no soy capaz de entender, y que me han dado la posición 22ª, posición que espero mejorar en breve.
Actualización: tras una tarde más que friki he reducido el código a 211 caracteres, alcanzando la 8ª posición.
¿Alguien se anima a intentarlo? Si conseguís reducir el tamaño me gustaría saber cómo lo habéis hecho, que ahora sí que ya no soy capaz de mejorarlo.
