Site WWW de Laurent Bloch
Slogan du site

ISSN 2271-3905
Cliquez ici si vous voulez visiter mon autre site, orienté vers des sujets moins techniques.

Pour recevoir (au plus une fois par semaine) les nouveautés de ce site, indiquez ici votre adresse électronique :

Le compte est bon
Article mis en ligne le 4 octobre 2004
dernière modification le 2 novembre 2017

par Laurent Bloch

Voici le programme (emprunté à Jacques Chazarain) pour le calcul du jeu « le compte est bon ». Soit n le nombre dont le joueur doit s’approcher le plus possible, et L la liste des nombres tirés au hasard, triés en ordre croissant. La règle du jeu est simplifiée : le programme n’admet que l’addition pour combiner les nombres, et seules les solutions exactes sont retenues.

  1. (define (compte-bon n L)
  2.   (cond
  3.    ((null? L)
  4.     (if (zero? n)
  5.         L
  6.         #f))
  7.    ((= n (car L))
  8.     (list (car L)))
  9.    ((< n (car L))
  10.     #f)
  11.    (else
  12.     (let ((solution
  13.              (compte-bon
  14.                  (- n (car L))
  15.                  (cdr L))))
  16.       (if solution
  17.           (cons (car L) solution)
  18.           (compte-bon n (cdr L)))))))

Télécharger

Pour avoir une version compilée il faut ajouter en tête du fichier :

  1. (module compte-bon
  2.    (main entre))
  3.  
  4. (define (entre args)
  5.    (let ((n (string->number (cadr args)))
  6.          (L (map string->number (cddr args))))
  7.       (print (compte-bon n L))))

Télécharger

et le programme s’appellera par exemple ainsi :

Il faut se rappeler que le shell Unix interprète tout ce qu’il reçoit sur la ligne de commandes comme des chaînes de caractères, séparées les unes des autres par des espaces, ce qui imposera de convertir en nombre les arguments au moyen de string->number. (cadr args) (ici 27) sera n, le nombre à atteindre, suivi de (cddr args), la liste de nombres fournis.