• [^] # Re: En Prolog

    Posté par (site web personnel, Mastodon) . En réponse au journal résoudre "trouve 24". Évalué à 3.

    En fait il faudra essayer sur l'exemple problématique : bonCompte(24, [1,4,5,6])
    La solution étant 6/((5/4)-1) ; il ne faudrait pas que s'arrêter à 5/4 qui n'est pas entier, ni même à (5/4)-1 = 1/4 qui n'est pas un entier, donc probablement un truc dans le genre

    calcul(Res, Op1, Op2, [Op1, '/', Op2, '=', Res]):- Op2 >= 1, 
     Res is Op1 / Op2, 
     rational(Res).

    Ça, ça marcherait aussi pour des cas difficiles du compte est bon. Pour le cas de jeu du Hollandais Volant, d'après le source JS on est plutôt dans du number/1 mais faudrait savoir si on a la même précision de part et d'autre (sachant que les fraction vont couvrir plus de 99% des cas on peut ne pas aller jusqu'à ce niveau de détail.)

    Il y a aussi des subtilités avec les soustractions : notre résultat sera forcément positif, mais pas forcément certaines opérations intermédiaires... Par exemple : 1-5=-4; 7-4=3; 3*8=24; avec bonCompte(24, [1,5,3,8]) S'il le trouve pas, faudra probablement modifier

    calcul(Res, Op1, Op2, [Op1, '-', Op2, '=', Res]):- Res is Op1 - Op2.

    De même, par anticipation, je me demande si les fractions doivent être forcément positives ? (je pense qu'il faudrait utiliser dif au lieu de \= ou \==)

    calcul(Res, Op1, Op2, [Op1, '/', Op2, '=', Res]):- Op2 \== 0, 
     Res is Op1 / Op2, 
     rational(Res).

    Les tests sur le site web de trouve 24 amènent à changer un peu les bornes qu'on se fixait pour le compte est bon...

    "It is seldom that liberty of any kind is lost all at once." ― David Hume