viernes, 27 de junio de 2008

Prohibido usar "Punto y Coma"

En estos días me topé con un problema bien interesante para intentar resolver. La cosa va como sigue: Se tiene una cantidad fija de expresiones aritméticas de la forma , donde es un número entero de a lo sumo dos dígitos y es un operador de sum '+', resta '-' y multiplicación '*'. El objetivo del problema es calcular el resultado de dicha expresión aritmética e imprimirla. ¿Suena facil, no? Je je, pero ahora viene lo bueno. El código fuente no puede tener ni un solo punto y coma. Ademas, se mide la calidad un programa correcto, en proporción a la cantidad de caracteres que no sean espacios en blanco que usa el programa (incluyendo saltos de linea y tabs). Los lenguajes disponibles son C, C++, Pascal y Java (Aquellos que pensaban que sería facil en Haskell o que podrían sacar la mejor puntación con el lenguaje Whitespace).

Por mi parte pude encontrar una solución que funciona para C y C++. Estoy en el proceso de encontrar una para Java. Una pequeña (y no tanto) pista para resolver éste problema es la siguiente: Primero intentemos imprimir un "hola mundo" sin usar ningún punto y coma. El código sería el siguiente:

#include <stdio.h>

int main () {

    if (printf("hola mundo\n")) { }

}


Je je... Esto funciona por que en C/C++, los booleanos y los enteros son equivalentes :P. Además la función printf devuelve un número entero diferente de cero (si es exitoso) por lo que la expressión anterior es completamente valida y libre de puntos y comas.

Bueno, Si alguien quisiera intentar atacar este problema, pongo el Link a continuación (y hay muchos mas problemas como este en ésta página):

http://www.spoj.pl/problems/EXPR2/

;;;;;;;Enjoy;;;;;;;


Edit: Je je. Ya encontré la solución para JAVA. Les doy también una pistilla para el que quiera intentarlo. Ahí les vá el "hola mundo":

class Main {

    public static void main (String [] args) {

        if (System.out.append("hola mundo\n")!=null) { }

    }

}

1 comentario:

Cristisa dijo...

Que comico eres, no pense que fueras a escribir sobre el problema en tu blog :). Te amo!