Sujet : Re: Sugurus
De : samuel_dot_devulder (at) *nospam* laposte_dot_net.invalid (Samuel DEVULDER)
Groupes : fr.sci.mathsDate : 31. Aug 2021, 10:57:26
Autres entêtes
Organisation : Aioe.org NNTP Server
Message-ID : <sgkue5$hu3$1@gioia.aioe.org>
References : 1 2 3 4 5 6
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.0.3
Le 31/08/2021 à 10:33, Samuel DEVULDER a écrit :
Bref, cela s'encode très bien sous la forme de prédicats Prolog, par exemple là:
https://pastebin.com/sKq1DRMk
Le code Prolog est généré par ce script Lua que j'ai écrit rapidement(il est archi perfectible et ne m'aide qu'à expérimenter):
https://pastebin.com/uATrbBUD
Erratum, j'ai pasté une mauvaise version, voici la bonne version du générateur:
https://pastebin.com/uX9vz7Luqui donne ce genre de fichier Prolog:
----8<--------------------------------------------------------------
eq(X,X).
ne(X,X):-!,fail.
ne(_,_).
ex(_,[]).
ex(X,[X|_]):-!,false.
ex(X,[_|L]):-ex(X,L).
in(X,[X|L],L).
in(X,[Y|L],[Y|M]):-in(X,L,M).
match([],[]).
match([X|L],Q):-in(X,Q,M),match(L,M).
suguru([
[V1_1,V1_2,V1_3],
[V2_1,V2_2,V2_3],
[V3_1,V3_2,V3_3]]) :-
eq(V1_1, 1),
match([V1_2,V1_3], [1,2]),
match([V2_1,V3_1], [2,3]),
match([V2_2,V2_3,V3_2,V3_3], [1,2,3,4]),
ex(V1_2, [V2_2,V2_3]),
ex(V1_3, [V2_3]),
ex(V1_1, [V1_2,V2_2]),
ex(V2_1, [V2_2,V1_2,V3_2]),
ex(V3_1, [V3_2,V2_2]),
ex(V2_2, [V1_3]),
true.
describe:-write('solving...\n'),
write('+---+---+---+\n'),
write('| 1 | |\n'),
write('+ +---+---+\n'),
write('| | |\n'),
write('+ + + +\n'),
write('| | |\n'),
write('+---+---+---+\n'),
true.
w([]).
w([X|L]):-write(X),write('\n'),w(L).
r:-reconsult(suguru).
h:-halt.
x:-describe,time(suguru(L)),w(L).
----8<--------------------------------------------------------------
Qui se résout très facilement:
----8<--------------------------------------------------------------
$ lua suguru.lua > suguru.pl && swipl -s suguru.pl -t "x,fail;h"
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 7.2.3)
Copyright (c) 1990-2015 University of Amsterdam, VU 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).
solving...
+---+---+---+
| 1 | |
+ +---+---+
| | |
+ + + +
| | |
+---+---+---+
% 1,162 inferences, 0.000 CPU in 0.000 seconds (0% CPU, Infinite Lips)
[1,2,1]
[3,4,3]
[2,1,2]
% 32 inferences, 0.000 CPU in 0.000 seconds (0% CPU, Infinite Lips)
----8<--------------------------------------------------------------
sam.