PasteRack.org
Paste # 95055
2024-09-05 14:14:16

Fork as a new paste.

Paste viewed 239 times.


Embed:

  1. #lang htdp/bsl
  2. (require 2htdp/image)
  3.  
  4. ;; dist : Number Number Number -> Number
  5. ;; Returns the distance from the origin (0, 0, 0) to the point (x, y, z)
  6. (define (dist x y z)
  7.   (sqrt (+ (expt x 2) (+ (expt x 2)
  8.                          (expt y 2)))))
  9.  
  10. ;; iff : Boolean Boolean -> Boolean
  11. ;; Returns #true if sunny is #true and beach is #true,
  12. ;; or sunny is #false and beach is #false, else returns #false
  13. (define (iff sunny beach)
  14.   (cond [(and sunny beach) #true]
  15.         [(and (not sunny) (not beach)) #true]
  16.         [else #false]))
  17.  
  18. ;; compute-width2height-ratio : Image -> Number
  19. ;; Returns the width-to-height ratio of the given image
  20. (define (compute-width2height-ratio img)
  21.   (/ (image-width img) (image-height img)))
  22.  
  23. ;; image-classify : Image -> String
  24. ;; Classifies an image into one of 5 categories based off of its width-to-height ratio
  25. (define (image-classify img)
  26.   (cond [(> 1 (compute-width2height-ratio img)) "portrait"]
  27.         [(= 1 (compute-width2height-ratio img)) "square"]
  28.         [(>= 4/3 (compute-width2height-ratio img)) "fullscreen"]
  29.         [(>= 16/9 (compute-width2height-ratio img)) "widescreen"]
  30.         [else "too wide"]))
  31.  
  32. ;; image-area : Image -> Number
  33. ;; Returns the number of pixels found in a given image
  34. (define (image-area img)
  35.   (* (image-width img) (image-height img)))
  36.  
  37. (define shape1 (rectangle 20 40 "solid" "black")) ;; should be < 1:1
  38. (define shape2 (rectangle 40 40 "solid" "red")) ;; should be 1:1
  39. (define shape3 (rectangle 40 30 "solid" "yellow")) ;; should be 4:3
  40. (define shape4 (rectangle 71 40 "solid" "green")) ;; should be ~16:9
  41. (define shape5 (rectangle 100 40 "solid" "blue")) ;; should be > 16:9
  42.  
  43. (check-within (dist 10 10 10) 17.321 0.001)
  44.  
  45. (check-expect (iff #t #t) #t)
  46. (check-expect (iff #t #f) #f)
  47. (check-expect (iff #f #t) #f)
  48. (check-expect (iff #f #f) #t)
  49.  
  50. (check-expect (image-classify shape1) "portrait")
  51. (check-expect (image-classify shape2) "square")
  52. (check-expect (image-classify shape3) "fullscreen")
  53. (check-expect (image-classify shape4) "widescreen")
  54. (check-expect (image-classify shape5) "too wide")
  55.  
  56. (check-expect (image-area shape1) 800)
  57. (check-expect (image-area shape2) 1600)
  58. (check-expect (image-area shape3) 1200)
  59. (check-expect (image-area shape4) 2840)
  60. (check-expect (image-area shape5) 4000)

=>

All 15 tests passed!

All 15 tests passed!