;; The first three lines of this file were inserted by DrRacket. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(lib "htdp-advanced-reader.ss" "lang")((modname Aufgabe_6) (read-case-sensitive #t) (teachpacks ((lib "image.rkt" "teachpack" "2htdp") (lib "universe.rkt" "teachpack" "2htdp"))) (htdp-settings #(#t constructor repeating-decimal #t #t none #f ((lib "image.rkt" "teachpack" "2htdp") (lib "universe.rkt" "teachpack" "2htdp")) #f))) ; Aufgabe 6 (a) ; Number Number -> Bool ; Checks if one can win the game if the two rows contain ; n and m matches. (check-expect (win? 2 2) false) (check-expect (win? 3 2) false) (check-expect (win? 2 4) true) (check-expect (win? 2 5) true) (check-expect (win? 9 6) true) (define (win? n m) (if (and (< n 2) (< m 2)) false (not (and (if (>= n 3) (win? (- n 3) m) true) (if (>= n 2) (win? (- n 2) m) true) (if (>= m 3) (win? n (- m 3)) true) (if (>= m 2) (win? n (- m 2)) true) )))) ; Aufgabe 6 (c) ; Number Number -> String ; Suggests a move for the pick-a-match game (check-expect (suggest 3 2) "Du kannst das Spiel mit keinem Zug mehr gewinnen") (check-expect (suggest 2 2) "Du kannst das Spiel mit keinem Zug mehr gewinnen") (check-expect (suggest 6 2) "Ziehe 3 aus der ersten Reihe") (check-expect (suggest 4 2) "Ziehe 2 aus der ersten Reihe") (check-expect (suggest 2 4) "Ziehe 2 aus der zweiten Reihe") (check-expect (suggest 2 5) "Ziehe 3 aus der zweiten Reihe") (define (suggest n m) (if (not (win? n m)) "Du kannst das Spiel mit keinem Zug mehr gewinnen" (cond [(and (>= n 3) (not (win? (- n 3) m))) "Ziehe 3 aus der ersten Reihe"] [(and (>= m 3) (not (win? n (- m 3)))) "Ziehe 3 aus der zweiten Reihe"] [(and (>= n 2) (not (win? (- n 2) m))) "Ziehe 2 aus der ersten Reihe"] [(and (>= m 2) (not (win? n (- m 2)))) "Ziehe 2 aus der zweiten Reihe"])))