Bergervei/Zahlenraten

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
== Raten einer Zahl ==

Wir kennen das einfache Spiel zum Raten einer Zahl <math>z</math> im Intervall <math>1 \le z \le max</math>:<br />
Aus einem zuvor vereinbarten Intervall denkt sich ein Spieler eine Zahl, die sein Mitspieler erraten muss. Nach jedem Versuch erhält der Mitspieler den Hinweis, ob seine vermutete Zahl kleiner bzw. größer als die erdachte Zahl ist oder sogar mit ihr übereinstimmt. Die erdachte Zahl soll so mit einem Minimum an Versuchen erraten werden.<br />
Wir vollen gegen den Computer spielen und eine Zufallszahl erraten:

<code id="4d56c1d3e4ac7">
(define zufzahl
  (lambda (max)
    (+ 1 (randomint max))))

(define spielerraten
  (lambda (max)
    (letrec
        ([suche
          (lambda (z anzahl)
            (let ([zahl (string->number (inputdialog "Deine Zahl:"))])
              (cond
                [(= z zahl) 
                 (display (string-append "Du hast die Zahl " (number->string zahl) 
                                         " mit " (number->string anzahl) " Versuch(en) erraten!"))
                 (newline)
                 'ok]
                [(< z zahl) 
                 (showmessage (string-append "Die Zahl " (number->string zahl) " ist zu groß!"))
                 (suche z (+ 1 anzahl))]
                [else
                 (showmessage (string-append "Die Zahl " (number->string zahl) " ist zu klein!"))
                 (suche z (+ 1 anzahl))])))])
      (suche (zufzahl max) 1))))
</code>

<run id="4d56c1d3e4b39">
(spielerraten 100)
</run>