# CS0111 - Spring 2024: Mid-Semester Quiz Prep Guide **When:** available in Gradescope Thu 3/14 12pm through Mon 3/18 11pm. You choose when to take it during that time (75 minute window). **There will be no extensions granted for the quiz, except for significant unexpected medical/personal circumstances -- the reason that the quiz is open for several days is so you can schedule it around your other obligations.** The goal of the quiz is to check your **conceptual** understanding of working with functions, conditionals, named expressions, tables, and lists. We want to see whether you understand how these constructs work and when to use them. We also want to see whether you can plan an analysis based on tabular data. This is not primarily a coding exam. :::info The exam will cover the material up through list functions (Feb 28 lecture). It will not include recursion, datatypes, trees, or reactors. ::: :::success After Drill 16 (due 3/8), there will be no drills out until 4/1, to give you time to prepare for and take the quiz. ::: ## What should you expect? - You will complete the quiz in Gradescope. The quiz will be designed to take 25-35 minutes, but you'll get 75 minutes (those with SEAS/SAS accommodations will get their approved time adjustments on top of the 75 minutes). - The quiz will be self-contained. You will not be asked to remember any specific problem or scenario from lecture, homework, projects, or labs. - You may refer to your own notes and any material linked directly to the course website (including the textbook) during the quiz. You may NOT search the internet beyond material directly linked to the course website. - You will not need to have memorized library functions or complicated syntax. If you have been writing your own homework solutions (as the collaboration policy expects), you should have all the coding knowledge you need to do fine on the exam. - You will not be expected to write much code on the quiz. - You may be asked to fill in fragments of code (along the lines of what you've done on the drills). - You may be asked to provide the names and input/output types of functions that you would need in solving a problem. - You will not be tested or graded on details of syntax. For example, if we ask you to write an if-expression and you forget the colon after the question, that's fine. The exam focuses on concepts. We'd be looking for your code to be close enough to convey that you know how to approach a given problem. Using reasonable indentation (such as indenting the code to execute when a conditional statement is true) will be important though, as that conveys which code gets executed when. - There will be a mix of fill-in-the-blank questions, multiple-choice/checkbox questions, outline steps questions, and open-ended/free-response questions. - You may be asked to draw something on paper or in your favorite tool and upload a picture or PDF of your work. ## What you are expected to know ### Programming - Which programming constructs are appropriate for different situations: when should you use each of conditionals, (helper) functions, named values, and different table operators? - How does the program directory evolve as a program with functions and conditionals evaluates. - How data is passed around in a program: what is a valid input to a function with a specific intype annotation, how the output of one function can be used as the input to another function. ### Tables - Which operations to use to prepare a table for a given data analysis - What sorts of errors to look for in a table - When you can/cannot use programming to identify or correct errors in tabular data ### Lists - The behaviors of the list operations (`filter`, `map`, `distinct`, `remove`, `member`, `length`, `M.sum`, `.get`) and how to choose list operation(s) for a specific task ### Writing Examples - Creating a diverse set of examples for a given function - Evaluating whether a given set of examples is good for illustrating a given function ## What you will NOT be tested on - Fine-grained details of language syntax - The specific names of built-in Pyret functions (we expect you to recognize those we have used frequently in class, but not to recall them for yourself) - e.g., If we reference `build-column`, you should know that it adds a column to a table, but we won't ask you "what is the name of the table function that ..." - Reactors - raise - Recursion (or anything about lists after the Feb 26 lecture) - Datatypes ## What kinds of problems might you get? *This is not exhaustive, but it should give you a good idea of what to expect* - Given a program, what will its output be when executed? - Given a program, what will be in the program directory at a specific point in the program's execution? - Given a partially-written program with blanks, how do you fill in the blanks to achieve a certain behavior or result? - Given a problem, what would be some good examples for it? - Given a problem and a set of examples, identify valuable examples that are missing. - Given a program, identify which helper functions or local names would clean up the code - Given a program that is producing the wrong answer, identify and correct the error. - Given the description of an external dataset (e.g., in a Google Sheet), what would you do to clean and prepare the data for answering a given question? - Given a table of data, roughly what operations would you use to process it (i.e., what combination of filtering, sorting, computing new columns, etc would let you solve a problem) Note that these are kinds of questions you've done across homeworks, labs, and drills. Reviewing your work on these might be good ways to prepare for the exam. ## Collaboration Policy No collaboration is permitted. This includes no sharing of notes files. Your work on the quiz must be entirely your own. ## How to Prepare? We've created a [separate Gradescope](https://www.gradescope.com/courses/748622) (entry code on Ed) that has the two most recent quizzes, assorted questions from previous quizzes, and the past drills (in case you missed them). Spring/Fall 2023's quizzes should give you a *rough* idea of how long the quiz will be. Working through the questions in these assignments should give you a sense of what to expect. Note that nothing you turn in in this separate Gradescope will count towards your grade -- the official quiz will be posted in our course Gradescope on 3/14.