11 mar 2008

47 segundos, juego en Prolog

Hace tiempo me dejaron de proyecto, en la materia Programación funcional, hacer un juego en Prolog, el juego de: 47 segundos, el era transmitido por el canal 22 (de México), y consistía en lo siguiente:

A dos participantes se les da una lista con números enteros, y otro número B, los concursantes tenían que formar el número B, operando los 6 números con : sumas, restas, multiplicaciones y divisiones, además solo se podía usar una ves cada número que se les daba, así como los resultados intermedios. Todo esto en 47 segundos. (Era un excelente programa, no entiendo porque lo quitaron.)

Ejemplo

Dados : 3, 7, 12, 5, 9 formar el 150.

Una solución:

3+7 = 10 (ya no puedo usar el 3 y el 7 para cálculos posteriores)
12- 9 = 3 (ya no puedo usar el 12 y el 9 para cálculos posteriores)
5* 3 = 15 (este 3 es el resultado de la operación anterior, por lo que si puedo usarlo)
15 * 10 = 150 (puedo usar el 10 y el 15 ya que no los había usado)


Gracias a la maravilla de la unificación y resolución logré implementar tal programa, dejo un link para su descarga. ¿cómo funciona?

Hay que Instalar Prolog.
Cargar programa con: prolog epachecogomezP1.pl
Ejecutar: cuarentay7([lista de numeros enteros], el numero que se quiere, R).

Dejo un ejemplo.



Welcome to SWI-Prolog (Multi-threaded, Version 5.6.14)
Copyright (c) 1990-2006 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- [pachecogomezP1].
% pachecogomezP1 compiled 0.00 sec, 5,256 bytes

Yes
?- cuarentay7([12,4,5,7,8],200,R).

R = [12*4, 48-8, 40*5, 200] ;

R = [12+4, 5+7, 12*16, 192+8, 200] ;

R = [12+4, 5+7, 16*12, 192+8, 200] ;
.
.
.
.

¿cómo se lee la salida?, fácil,

1. 12 * 4 = 48
2. 48 - 8 = 40
3. 40 * 5 = 200

El programa puede repetir algunas respuestas... y aveces tarda más de 47 segundos para dar la solución (je je), aclaro que no es eficiente, en Prolog aveces es complicado hacer eficientes las cosas, pero funciona y me sirvió para sacar 10 en esa materia :), si alguien lo mejora que lo pase.

2 comentarios:

Julio Cesar Alfaro dijo...

oye esta chido tu programa, pero cuando corre hay que meterle los numeros y el resultado ??o como funciona esa parte?, o el programa te los da solo?
ojala y me ayudes de verdad
mi correo es seko_died@hotmail.com
gracias de antemano!!

PAGE dijo...

Pues el chiste del juego es que dada una lista de números xs y un resultado R, buscar una forma de operar los elementos de xs tal que el resultado sea R. Es decir debes pasarle una lista de números y otro número que quieras formar apartir de la lista de números haciendo sumas, restas, etc. Si ves el ejemplo:

cuarentay7([12,4,5,7,8],200,R).

se lee: con el 12, 4, 5 7 y 8 quiero formar el 200 operandolos con suma, resta etc, de tal forma que sólo use cada número y resultado intermedio una ves.

Por lo tanto sí, debes pasarle los números y el número que quieres formar. La salida del programa es la lista de operaciones que debes realizar para obtener R

ga