« Ca ne marchera pas ...
Par Dark-Side le lundi, novembre 5 2007, 16:16 - Algo - Lien permanent
... Vous savez pourquoi ? Parce que ça nous amuse. Vous trouvez quelque chose pour m’emmerder, je trouve quelque chose pour vous emmerder. C’est un jeu et je vais gagner. J’ai un coup d’avance. Vous êtes déjà emmerdé. »
Edité le 25/12/07
Edité le 25/12/07
Je crois que je vais faire comme ça désormais, toujours commencer mes articles par une citation sans rapport (ou du moins sans rapport logique apparent).
Bref, je suis là parce que j'avais dis que je vous montrerai une IA en prolog. Donc voilà je vais vous en montrer une.
Pour qu'on soit d'accord tout de suite :
Naturellement je vais faire quelques remarque, alors il faut savoir que c'est mon premier code en prolog, c'est pour ça qu'il est sale. Ensuite : ce code est surement optimisable (surtout au niveau des fonctions traiter) mais ce n'est pas important, ce qu'il faut voir c'est que même si ce code est un peu plus long qu'un code OCaml bien optimisé il est quand même bien plus facile à comprendre par un non initié. Et c'est ça l'important !
Voilà, bonne journée !
Bref, je suis là parce que j'avais dis que je vous montrerai une IA en prolog. Donc voilà je vais vous en montrer une.
Pour qu'on soit d'accord tout de suite :
- oui le code est sale
- oui je m'en fous
- non je n'accepterai aucune remarque
est_vainqueur(papier, pierre).
est_vainqueur(pierre, ciseaux).
est_vainqueur(ciseaux, papier).
corres(pierre, 1).
corres(papier, 2).
corres(ciseaux, 3).
corresp(perdu, 0).
corresp(nul, 1).
corresp(gagne, 2).
same(X, X).
plus_joue([Papier,Pierre,Ciseaux], X) :- Pierre >= Papier, Pierre >= Ciseaux, same(X, pierre).
plus_joue([Papier,Pierre,Ciseaux], X):- Pierre =< Papier, Papier >= Ciseaux, same(X, papier).
plus_joue([Papier,Pierre,Ciseaux], X) :- Ciseaux >= Papier, Pierre =< Ciseaux, same(X, ciseaux).
traiter(perdu, pierre, [Papier, Pierre, Ciseaux], X) :- P is Papier + 1, same(X, [P,Pierre, Ciseaux]).
traiter(perdu, ciseaux, [Papier, Pierre, Ciseaux], X) :- P is Pierre + 1, same(X, [Papier,P, Ciseaux]).
traiter(perdu, papier, [Papier, Pierre, Ciseaux], X) :- C is Ciseaux + 1, same(X, [P,Pierre, C]).
traiter(nul, papier, [Papier, Pierre, Ciseaux], X) :- P is Papier + 1, same(X, [P,Pierre, Ciseaux]).
traiter(nul, pierre, [Papier, Pierre, Ciseaux], X) :- P is Pierre + 1, same(X, [Papier,P, Ciseaux]).
traiter(nul, ciseaux, [Papier, Pierre, Ciseaux], X) :- C is Ciseaux + 1, same(X, [P,Pierre, C]).
traiter(gagne, ciseaux, [Papier, Pierre, Ciseaux], X) :- P is Papier + 1, same(X, [P,Pierre, Ciseaux]).
traiter(gagne, papier, [Papier, Pierre, Ciseaux], X) :- P is Pierre + 1, same(X, [Papier,P, Ciseaux]).
traiter(gagne, pierre, [Papier, Pierre, Ciseaux], X) :- C is Ciseaux + 1, same(X, [P,Pierre, C]).
alea(X) :- random(1,4, X).
stat(Coups, Nb) :-
plus_joue(Coups, Adv),
est_vainqueur(Coup, Adv),
corres(Coup, Nb).
jouer(Coups, X) :-
random(1, 11, Al),
(Al =:= 1 -> alea(Nb);
stat(Coups, Nb)),
write(Nb), nl,
write('Gagné, nul ou perdu ?'), nl,
read(Score),
corresp(S, Score),
traiter(S, Coup, Coups, X).
boucle(Coups) :-
jouer(Coups, N_coups),
write('1 pour rejouer, 0 pour arreter.'), nl,
read(X),
X =:= 1,
boucle(N_coups).
init :- boucle([0,0,0]).
Naturellement je vais faire quelques remarque, alors il faut savoir que c'est mon premier code en prolog, c'est pour ça qu'il est sale. Ensuite : ce code est surement optimisable (surtout au niveau des fonctions traiter) mais ce n'est pas important, ce qu'il faut voir c'est que même si ce code est un peu plus long qu'un code OCaml bien optimisé il est quand même bien plus facile à comprendre par un non initié. Et c'est ça l'important !
Voilà, bonne journée !
Commentaires
Les sanglots longs des violons de l’automne blessent mon coeur d’une langueur monotone…
Beuh, d'accord je vais voir pour m'en occuper :S
Quoi ? :−−−°
Tssssk !
Lache, tout ça parce que tu veux pas que je fasse d'autres articles :D
Fin bref j'ai édité pour montrer un code un peu plus beau.
Putain, le jour de la noYël en plus o: