Final Exam Grading 11sp
From CSE190M-Admin
Contents |
[edit] Exam
[edit] Question 1 (HTML/CSS Tracing)
20 points total
- 2 alignment: a/b text is close to right edge of enclosing div
- 3 background color: overall #b area, and one/two spans (-1 if missing from one span; -2 if missing from one div; -3 if missing multiple)
- -2 if a,b divs aren't white
- 3 block vs. inline: a/b are vertical, and x/y are horizontal
- 2 borders: on overall #b area, on "a" and "b" divs (and not elsewhere)
- 2 br: line break between one/two and between three/four, but NOT between two/three
- 2 margins: a/b divs have 2em margin on all sides (outside the border); no margin between x/y, one/two/three/four
- 2 padding on right side of "a" / "b" divs (distance from a/b to right border)
- 2 underline: -2 if underline is applied to any elements
- 2 width of #b area is half the page; width of a/b divs extends across entire area
- -1 point each for any other minor misc. stuff they do wrong that isn't listed above
.
[edit] Question 2 (HTML/CSS Coding)
HTML:
<div id="main">
<div id="column1">
<h1>Zen Garden</h1>
<div id="slogan">
<p>A demonstration of...</p>
</div>
<div id="enlightenment">
<h3>The Road to Enlightenment</h3>
<p>Littering a dark and dreary road lay...</p>
<p>Today, we must clear the mind...</p>
<div id="selectadesign">
<h3>Select Design</h3>
<ul><li><a href="">Under the Sea!</a> by Eric Stoltz</li>
<li><a href="">Make 'em Proud</a> by Michael McAghon and Scotty Reifsnyder</li>...</ul>
</div>
</div>
</div>
<div id="whatabout">
<h3>So What is This About?</h3>
<p>There is clearly a need for CSS to be taken seriously...</p>
<p>CSS allows complete and total control over the style of a hypertext document.</p>
<h3>Participation</h3>
<ul>
<li>Graphic artists only please. You are modifying this page...</li>
<li>Zen editors modify the style sheet in any way you wish, but not the HTML.</li>
</ul>
</div>
</div>
CSS:
body {
background-image: url("heading.gif");
background-repeat: no-repeat;
color: #471C47;
font-family: Verdana, sans-serif;
font-size: 9pt;
}
#main { margin-left: 130px; }
h1 { display: none; }
#slogan { font-style: italic; }
#selectadesign { border-top: 3px solid #A690AF; }
#selectadesign a { font-weight: bold; }
|
#enlightenment {
background-image: url("toad.png");
background-repeat: no-repeat;
background-position: right bottom;
float: left;
padding-right: 1em;
width: 26em;
}
#whatabout {
background-color: #A690AF;
border: 2px solid #471C47;
float: left;
padding: 1em;
width: 21em;
}
#whatabout h3 { text-align: right; }
|
20 points total
- 1 colors
- body - color: #471C47;
- "What's this about?" area - background-color: #A690AF;
- 4 fonts
- 1 body font: family Verdana, sans-serif (must have both); font-size 9pt
- 1 italic "Demonstration" text
- 2 bold links: in "Select a design" section, font-weight bold
- (-2 for strong tags in HTML; -2 for making ALL links bold)
- 4 images
- 2 header.gif at top-left as div background
- (-2 if inserted as IMG tag; -1 if they forget background-repeat: no-repeat;)
- 2 toad.jpg at bottom-right of "Enlightenment/Select" area
- (-2 if inserted as IMG tag; -1 if they forget background-position: bottom right;)
- 2 header.gif at top-left as div background
- 5 margins, padding, box model
- 2 130px move content right to avoid header.gif (must be on all of "A demonstration of" thru "Select Design")
- 1 padding: all around "What's this about" area; on right side of "Enlightenment/Select" area
- 1 width: 26em for "Enlightenment" area; 21em for "What's this about" area (25em and 19em are okay)
- 1 border-top/bottom between Enlightenment and Select Design areas
- 2 headings
- 1 #whatabout h3 text-align: right;
- 1 h1 is hidden (display none, or visibility hidden)
- 4 columns/floating
- 2 attempt: content is in >= 2 column divs; div(s) float
- 2 correct: proper divs both float to left
- other deductions
- -2 if they try to add any other tags/attributes (id, class, etc.)
- -2 class/id confusion in their CSS syntax (# vs .)
- -6 no HTML markup, but CSS makes it obvious what they mean (ask head TA / instructor)
.
[edit] Question 3 (JS/DOM)
window.onload = function() { // document.observe is okay
$("blend").observe("click", blendClick); // onclick is okay
};
function blendClick() {
$("output").innerHTML = ""; // .update() okay
var name = $("yourname").value; // .innerHTML NOT okay (-1)
var x = 0;
var y = 0;
for (var i = 0; i < name.length; i++) {
if ($("sequential").checked) { // .checked == "checked" NOT okay (-1)
x = x + 15;
y = y + 15;
} else {
x = parseInt(Math.random() * 300); // Math.floor is okay
y = parseInt(Math.random() * 100); // 301, 101 okay
}
var span = document.createElement("span"); // new Element("span") okay
span.innerHTML = name[i]; // name.charAt(i) is okay; .update() okay
span.style.fontFamily = $("font").value; // setting on whole output div is okay
span.style.position = "absolute";
span.style.left = x + "px";
span.style.top = y + "px"; // setStyle({a:b, c:d, ...}) okay
$("output").appendChild(span);
}
}
20 points total
- 2 window onload (1 attempt, 1 perfect) - attaches click handler
- 3 loops over characters of name properly (-1 for small error such as OBOB)
- 7 span/div for each percentage
- 2 clears previous text properly (removes children or sets output.innerHTML = "")
- 2 creates and puts text into it; puts onto page in proper DOM place (output.appendChild)
- 3 CSS properties of each letter span
- -1 for each missing: fontFamily, position absolute
- OK (but not required) to set font-family every time select box is modified (onchange)
- -1 for relative/fixed instead of absolute pos
- -2 overall if they set ".foo" rather than ".style.foo"
- 8 positions
- 4 sequential x/y position (-2 if correct but doesn't start properly at x=15, y=15)
- 4 random x/y position from (0, 0) to (300, 100)
- -1 if they forget parseInt/Math.floor
- -1 if they get the 100 and 300 backwards or use 100 or 300 for both
- -2 overall if they forget "px" when setting left/top CSS property
- -3 overall if they set "x" and "y" properties or other distortions, rather than "left" and "top"
- other deductions
- -1 for misc. invalid JavaScript (e.g. explode, count, $_REQUEST, etc.)
.
[edit] Question 4 (PHP)
<?php
# ok for letter to preg_match [A-Za-z]
# ok for times to preg_match [0-9]+; -1 if times matches just [0-9] or [0-9]*
if (!isset($_REQUEST["letter"]) || !isset($_REQUEST["times"]) ||
strlen($_REQUEST["letter"]) != 1 || $_REQUEST["times"] <= 0) {
header("HTTP/1.1 400 Invalid Request");
die("invalid request");
}
$letter = strtolower($_REQUEST["letter"]);
$times = (int) $_REQUEST["times"]; # cast to (int) is optional
$matches = 0;
foreach (file("peeps.txt", FILE_IGNORE_NEW_LINES) as $line) { # file_get_contents/explode ok
$lowerline = strtolower($line); # (explode on letter, check array length) ok
$count = 0;
for ($i = 0; $i < strlen($line); $i++) { # count($line) ok
$ch = $lowerline[$i];
if ($ch == $letter) { # strcmp == 0 okay
$count++;
}
}
if ($count >= $times) {
$matches++;
?> <p><strong><?= $line ?></strong>
contains '<?= $letter ?>' exactly <?= $times ?> times.</p>
<?php
}
}
if ($matches == 0) {
?> <p>No names contained '<?= $letter ?>' enough times.</p>
<?php
}
?>
20 points total
- 1 query params
- 1 $_REQUEST params are read/used properly
- 4 errors
- 2 param(s) not passed -> HTTP 400 error
- 2 param(s) bad value -> HTTP 400 (letter not 1-char string; times not positive int)
- -2 if they just print the error or die(), but don't use header() to show the HTTP error
- 10 file/string processing
- 2 reads / loops over lines of file properly
- 3 properly detects character ('letter') presence at a given index in string
- -2 if they preg_split on '.' (consumes all characters)
- -1 if they explode on "" (causes error at runtime)
- 2 counts properly and has a proper if/else test to determine whether to print a given name
- -2 if they misuse regex, e.g. look for 2 consecutive occurrences
- -2 if they require the count of matches to be exactly == rather than >=
- 3 string case sensitivity issues
- -2 if it doesn't match insensitively
- -1 if they just upper/lowercase everything and this causes matches to lookwrong
- 5 HTML output
- 2 paragraph inserted properly with each value
- -1 for minor formatting issues like forgetting 'quotes' around number, etc.
- 1 name in bold
- 2 no matches found case (prints special "not found" message)
- 2 paragraph inserted properly with each value
- misc. deductions
- -1 if they use print/echo ???
- -1 if they use b tag instead of strong ???
- -1 for misc. incorrect PHP (e.g. str.length(), split(), if (strcmp(...)), etc.)
.
[edit] Question 5 (SQL)
-- all the times a director has appeared in his own movie, twice -- SELECT DISTINCT d.first_name, d.last_name FROM directors d JOIN movies_directors md ON md.director_id = d.id JOIN roles r1 ON r1.movie_id = md.movie_id JOIN roles r2 ON r2.movie_id = md.movie_id JOIN actors a ON a.id = r1.actor_id AND a.id = r2.actor_id WHERE a.first_name = d.first_name AND a.last_name = d.last_name AND r1.role < r2.role ORDER BY d.last_name, d.first_name;
20 points total
- 2 SELECT director first/last name (-1 if not DISTINCT)
- 8 FROM/JOIN
- 3 directors → movies_directors → movies
- 1 movies → roles (first role)
- 2 movies → roles (second role)
- 2 roles → actors (2 actors OK if linked properly)
- -2 for each extra table added unnecessarily
- -2 if table(s) are joined by something other than IDs (e.g. on first/last name)
- OK to use "FROM table1, table2, ... WHERE a AND b AND c..." syntax if it's right
- 8 WHERE
- 3 two roles/actors linked to each other (have same ID or first/last name)
- 3 actor(s) linked to director (same first/last name)
- 1 roles unequal (<, >, <>, != allowed)
- -2 for each extra incorrect constraint if it screws up the query; -0 if it doesn't
- 2 ORDER BY last name, first name (ok to write ASC; -1 for DESC)
- other deductions
- -1 for surrounding their SQL with PHP code
- -2 for each piece of advanced SQL syntax not taught in class (GROUP BY, HAVING, LEFT INNER JOIN, etc.)

