[edit] Question 1 (HTML/CSS Interpretation)
20 points total
- 7 two floating sections
- 2 float to right
- 2 correct L/R order
- 2 border and background color
- 1 width (approximate), vertical alignment
- 4 Emperor quote
- 1 text wraps around floating paragraphs
- 2 deflector shield dotted border
- 1 deflector shield left padding
- 3 Luke quote
- 2 has solid border
- 1 border goes under/past the floating content
- 5 May the Force be with you
- 1 centered
- 2 underneath floating stuff (clear)
- 2 background color
- 1 misc. point for any other random shit they fuck up
- -1 point each for any other misc. stuff they do wrong that isn't listed above
.
[edit] Question 2 (PHP)
<?php if (isset($_REQUEST["student"])) { $student = $_REQUEST["student"]; $filename = "students/$student/asciimation.txt"; if (file_exists($filename)) { $text = file_get_contents($filename); $frames = explode("=====\n", $text); $frame = 0; if (isset($_REQUEST["frame"])) { $frame = (int) $_REQUEST["frame"]; } if ($frame < count($frames)) { header("Content-type: text/plain"); print $frames[$frame]; } } } ?>
20 points total
- 6 student
- 2 grabs from REQUEST
- 2 checks whether student is set
- 2 creates proper file name from student name
- 6 frame
- 2 grabs from REQUEST
- 2 default of 0 if not set
- 2 no output if frame >= array length
- 5 file/frames
- 2 checks whether file exists
- 1 reads entire file properly
- 2 splits properly on =====\n
- 3 output
- 1 header content-type text/plain
- 1 prints frame
- 1 <?php ?> surrounding tags
.
[edit] Question 3 (JS/DOM)
var answer; var guesses = 0; document.observe("dom:loaded", function() { $("makeguess").observe("click", makeGuessClick); answer = parseInt(Math.random() * 100) + 1; }); function makeGuessClick() { guesses++; var guess = $("number").value; var li = document.createElement("li"); li.innerHTML = guess; if (guess > answer) { $("result").innerHTML = "Too high!"; li.addClassName("high"); } else if (guess < answer) { $("result").innerHTML = "Too low!"; li.addClassName("low"); } else { $("result").innerHTML = "You got it right in " + guesses + " tries!"; $("makeguess").disabled = true; } $("guesses").appendChild(li); }
20 points total
- 3 window onload
- 1 window.onload or document.observe handler declared properly
- 2 onclick handler attached to 'makeguess' button properly
- 4 picks a random answer from 1-100
- 2 attempt
- 2 correct (correct range, scales up properly, etc.)
- 3 game play
- 1 grabs user's guess properly out of 'number' field
- 2 too high/low clues in 'result' span
- 5 end of game
- 2 counts guesses properly
- 1 puts correct message into 'result' (you got it right!)
- 2 disables 'makeguess' button
- 5 li for each guess
- 1 creates/puts proper text in it
- 2 CSS class
- 2 puts onto page (appendChild)
.
[edit] Question 4 (Ajax/XML)
document.observe("dom:loaded", function() { new Ajax.Request("q5.xml", { method: "get", onSuccess: ajaxSuccess }); }); function ajaxSuccess(ajax) { var moves = ajax.responseXML.getElementsByTagName("move"); for (var i = 0; i < moves.length; i++) { var animal = moves[i].getAttribute("animal"); var move = moves[i].firstChild.nodeValue; var critters = $$("." + animal); for (var j = 0; j < critters.length; j++) { var x = parseInt(critters[j].getStyle("left")); var y = parseInt(critters[j].getStyle("top")); if (move == "N") { y -= 20; } else if (move == "S") { y += 20; } else if (move == "W") { x -= 20; } else if (move == "E") { x += 20; } critters[j].style.left = x + "px"; critters[j].style.top = y + "px"; } } }
20 points total
- 3 window onload
- 1 window.onload handler attached properly
- 1 Ajax request attempt
- 1 method "get"; attaches onSuccess handler properly
- 1 Ajax onSuccess handler header (including ajax parameter)
- 6 XML parsing
- 2 grabs all "move" elements and loops over them
- 2 grabs attributes e.g. "animal"
- 2 grabs .firstChild.nodeValue inside each move
- 4 grabs all proper animal spans using $$, and loops over them
- 1 attempt
- 3 correct (remembers '.', understands that $$ returns an array, etc.)
- 6 moves each animal
- 1 attempt: if/else involving N/S/E/W and x/y +- 20px
- 2 gets old position correctly (getStyle left/top)
- 1 sets new position correctly, attempt
- 2 sets new position correctly, correct (appends 'px', no setStyle, etc.)
.
[edit] Question 5 (SQL)
SELECT DISTINCT a.first_name, a.last_name FROM actors a JOIN roles r1 ON r1.actor_id = a.id JOIN movies m ON m.id = r1.movie_id JOIN movies_genres mg ON mg.movie_id = m.id JOIN roles r2 ON r2.actor_id = a.id JOIN roles r3 ON r3.actor_id = a.id WHERE r1.movie_id <> r2.movie_id AND r1.movie_id <> r3.movie_id AND r2.movie_id <> r3.movie_id AND mg.genre = 'Action' ORDER BY a.last_name, a.first_name;
25 points total
- 4 SELECT
- 2 columns first_name, last_name (probably requires the student to give names to their tables in the query)
- 2 DISTINCT (no duplicates)
- 6 FROM/JOIN (choice of tables)
- 2 has at least 3 'roles' records
- 2 has at least 1 'movies' record
- 2 has at least 1 'movies_genres' record
- -2 for each extra record added unnecessarily if it screws up the query; -0 if it doesn't
- 8 WHERE/ON (constraints)
- 2 actor <-> roles by id/actor_id
- 1 role <-> movie by movie_id/id
- 1 movie <-> genre by id/movie_id
- 2 three roles are different
- 2 at least one role has genre of 'Action'
- -2 for each extra incorrect constraint if it screws up the query; -0 if it doesn't
- 2 ORDER BY
- 1 last_name
- 1 first_name and order