![]() |
![]() |
|
Due
Your submitted file should be named “hw02.rkt”.
handy helpers: You'll also want to right-click-and-download student-extras.rkt to the same directory as your hw02.rkt. Do not paste it into an empty DrRacket window, else you might end up with an error about `#lang` not enabled. This file gives you functions like real>0?, which are handy for signatures, not to mention define/contract itself.
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.)
For now, your code does not need to give a correct answer for pizzas whose diameter is less than twice the CRUST-WIDTH. However, you should still have test-cases for sensible pizza-diameters which contain the true, expected answer in the check-expect. even if those tests don’t pass.
Terminology: Perhaps “desired answer” would be a better term than “expected answer”.
Optional: If you really want to get your code passing such tests for diameters less than twice CRUST-WIDTH – again, this is NOT required – you can either read about cond or if, or be clever in using the function max.
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 strictly necessary; 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 intermediatej-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 hdtv-screen which 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 (hdtv-screen 32) (rectangle 32 18 'solid 'purple)) (check-expect (hdtv-screen 16) (rectangle 16 9 'solid 'purple)) (check-expect (hdtv-screen 0) (rectangle 0 0 'solid 'purple)) ; Note: for the expected 0x0 rectangle, I could equally well write: (check-expect (hdtv-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 will enforce correct meme usage.
(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 (but don’t worry about having multiple-lines of text, nor about having the font size or color work exactly like the examples I provided).
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.
To save toner/ink: Ideally your hardcopy would include the entire source file, including any image-literals. But since that can be pricy for this homework, feel free to do any or all:In all cases, your D2L-submitted version should still run.
- Print in black-and-white.
- Replace some/all image-literals in your source with code-which-generates-the-image.
- Just before printing, replace some/all image-literals with (say) empty-image or -999 (causing your code to break), then Edit » Undo this change just after printing.
This page licensed CC-BY 4.0 Ian Barland Page last generated | Please mail any suggestions (incl. typos, broken links) to ibarland ![]() |