![]() |
![]() |
|
Due
Your submitted file should be named “hw02.rkt”.
Standard instructions for all homeworks:
For every functions you write, follow the steps of the design recipe that we've covered in class (currently 4,5,7,8). (You don't need to label each step; just turn in the final result.) When grading, there are points for having a good purpose-statement, good tests, etc. In general, test cases alone can be worth nearly half the points.
Of course, pizzas have topping in the middle, and crust all the way around the rim. (You can think of the full pizza being a disc, with a smaller pure-topping-covered disc inside of it.)
Hint: For diameters less than twice CRUST-WIDTH, you can certainly use cond (or, if) if you like, but they're not actually needed; you can instead use a min or max in a clever (but standard) way.
Note that this is a computer-sciency definition of “suffix”. It has nothing to do with syllables or English. More precisely: we say that string a has b as a suffix, iff: there exists a string x such that (string=? a (string-append x b))2.
Hint: You remember to include tests with strings of length 0, 1, and many, of course. Since we have two string inputs, you can try up to all combinations. (Admittedly, many of those combinations are perhaps redundant, if we think about the white-box testing — but such knee-jerk test cases do help provide a routine, non-clever way to be sure all reasonable cases do get tested.)
Hint: You can certainly use cond (or, if) if you like, but they're not actually needed; you can instead use a min or max in a clever (but standard) way.
No library required:Don't use the built-in string-suffix? or similar functions for this problem. (They aren't in the beginner-student language, so you'd have to use a require to get them anyway). Do use substring.
To experiment with functions-which-create-and-handle-images in DrRacket, include (require 2htdp/image) near the top of your file. Then you should be be able to evaluate each of the following:
(rectangle 80 20 'solid 'blue) (circle 20 'solid 'red) (ellipse 80 20 'outline 'orange) (beside (rectangle 80 20 'outline 'blue) (circle 20 'solid 'red)) (underlay (rectangle 80 20 'outline 'blue) (circle 20 'solid 'red)) ; Think of 'underlay' and 'beside' as being "addition for images" ; underlay with an offset: (underlay/offset (rectangle 80 20 'outline 'blue) 0 10 (circle 20 'solid 'red)) ; If you want to explore documentation: ; In DrRacket, position the caret on a function-name ; like 'underlay', and hit F1. |
For functions that return an image, your expected-value should either be (a) an expression involving calls to: the image primitives and/or previously-tested functions, OR (b) an image-literal (but, show the expressions you used to create that image-literal).
For example, if the problem were create a function that takes in a width, and returns a solid
purple rectangle with the given width and a 16:9 aspect ratio
, then the expected-result could
be created by directly calling the image-library's functions like rectangle:
(check-expect (screen 32) (rectangle 32 18 'solid 'purple)) (check-expect (screen 16) (rectangle 16 9 'solid 'purple)) (check-expect (screen 0) (rectangle 0 0 'solid 'purple)) ; Note: for the expected 0x0 rectangle, I could equally well write: (check-expect (screen 0) empty-image) |
You only need steps 4,5,7,8 of the design recipe (once you decide what how you'll represent "size", which is a straightforward choice), and we're only using existing, simple datatypes (so no steps 1-3 or 6).
(0pts — optional!) Write the function scale-to-width, which takes in two images and returns the first image, scaled so that it has the same image-width as the second image.
For example:
(check-expect (scale-to-width (rectangle 50 20 'solid 'blue) (square 30 'solid 'red)) (rectangle 30 12 'solid 'blue)) |
(check-expect (super-cool-ski-instructor-meme "spend all semester making memes") |
correct meme-usage: Note that the wordsIf youandyou're gonna have a bad time.are not provided by the caller, since they are part of the supercool ski instructor memes, by definition. (Put differently: Your function does not allow the caller to use this particular meme improperly.)
(check-expect (futurama-fry-meme "the image-library is easy" "Java's GUI library is hard") |
We notice that there is a lot of repeated code in our
functions — very ugly.
We will refactor it out.
Task: Write a more general function make-meme, and change your preceding three functions so that they are EACH very-short calls to make-meme. You should not change their behavior at all, nor change any of the existing test cases.
It is up to you to decide how many parameters (and their type) to provide to
make-meme.
It should be general enough so that it can create almost all standard memes with
text at the top and bottom
Only submit your refactored versions of the functions for (b),(d),(e) — you don’t need to (and, shouldn’t) keep the original versions around.
This page licensed CC-BY 4.0 Ian Barland Page last generated | Please mail any suggestions (incl. typos, broken links) to ibarland ![]() |