Home | Day 1 | Day 2 | Day 3 | Day 4 | Day 5 | Handouts
Red = changes from recent years or official resources |
Green = important for 1st year AP teachers |
Blue = activities for workshop participants |
Orange = personal perspectives by workshop leader |
Morning Session I : Teaching the Course [Data Structures & Algorithms]
Key Understanding:
-
Data structures and algorithms that manipulate them are essential to understanding computer science.
Explore Algorithms as per Course Description
-
Operations on Data Structures [String, ArrayList, array, 2D-array]
-
Traversals (loops, iterators, for:each)
-
Insertions
-
Deletions
-
-
Searching
-
Sequential (linear)
-
Binary
-
-
Sorting
-
Selection
-
Insertion
-
Mergesort
-
-
Other
-
Counters
-
LCM & GCF
-
Swap
-
BubbleSort & QuickSort
-
Personal perspectives
-
Understand the Course Description's use of terms: apply, assume, complete (program code), consider, describe (behavior), describe (initial conditions), design, determine (code), determine (value or result), explain how, explain why, identify (errors), implement/write, and use (test-cases).
-
Course description states that students "should be able to USE and IMPLEMENT... algorithms"
-
The MergeSort algorithm is a challenge for many students because it requires multiple recursive calls...hence the "USE and IMPLEMENT" rather than "WRITE, TEST, etc."
Participant Activity [Workshop Binder -> Exam Info tab -> page 200 "Task Verbs..."]
-
Analyze the Course Description's use of terms: apply, assume, complete (program code), consider, describe (behavior), describe (initial conditions), design, determine (code), determine (value or result), explain how, explain why, identify (errors), implement/write, and use (test-cases) for:
-
use standard data structures [int, boolean, double, String, Classes, ArrayList, array (1D & 2D)]
-
-
Provide an example of sorting algorithms and, in particular, Selection Sort
-
use an array of ints
-
describe (behavior) a method to sort from largest to smallest...on an array of ints...on an array of Cards
-
Morning Session II : Teaching the Course [2D array using Picture Lab]
Key Understanding:
-
Using the Picture Exemplar Lab encourages student exploration of algorithms and data structures.
Participant Activity [Workshop Software : Picture Lab from 2014]
-
Student's Guide & Code
-
Teacher's Guide & Code [do NOT give this to your students as it is now under "secure documents"]
-
Explore the software (Guides & Code) provided. If computers are not available, then view the Sample Student Starter Code linked below.
Picture Lab
Sample Student Starter Code- Picture class
- beach.jpg
- ...see page 251 for details about setting up "images" folder and leftArrow.gif & rightArrow.gif files. ...see page 255 for Exercises
- PictureTester class...for testing 2D matrix manipulation, forEach loops ...from page 262
- Exercises in Activity 5
- grayscale: gr=(r+g+b)/3. Use pixelObj.setColor(new Color(gr , gr , gr))
- sepia definition is (112, 66, 20), watch for out-of-bounds conditions (255).
r = gray*112/255
g = gray*66/255
b = gray*20/255
- Add other pictures
- Use another Picture Lab Activity (or Exercise in Activity 5)
- Write a class to complete your selected Activity/Exercise
Afternoon Session I : Assessing Student Progress & Understanding [Previous Exams]
Key Understanding:
-
Examining prior years' Exam information helps to prepare students for their AP CSA Exam at the end of the course.
Explore Student Performance using prior Exams
Prior years' Exam Information[https://apcentral.collegeboard.org/courses/ap-computer-science-a/exam]
-
Free Response Questions
-
Scoring Guidelines (rubrics)
-
Student Performance Q&A (i.e. most common student errors from Chief Reader)
-
Sample Responses (i.e. actual hand-written student answers along with their scores and scoring commentary)
-
Score Statistics & Distributions
-
Unofficial Free Response solutions courtesy Maria and Gary Litvin at SkyLit publishing
Historical Free Response Questions [what students receive on Exam Day]
2021 Free Response Analysis
2021 | Specification |
Notes |
Classes and Methods |
FRQ 1: Methods & |
Write two methods that call other specified methods.
int scoreGuess(String guess) returns a score based on rules that require a call to substring()
String findBetterGuess(String g1, String g2) returns the parameter which has the higher score (or first if tied) based on calls to the scoreGuess() method |
String.equals() must be used |
WordMatch WordMatch(String word) int scoreGuess(String guess)
String findBetterGuess(String g1, String g2) |
FRQ 2 : Class Design |
Write a class, constructor, 2 methods, and two field variable to implement a restaurant seating which combines 2 SingleTables objects into a CombinedTable with appropriate checks for seating size and desireable view specifications.
|
Declare & initialize private field variable.
Declare parameters and assign to field variable.
check if CombinedTable can seat all from SingleTable
calculate desirability
Cast int average properly to double. |
SingleTable int getNumSeats() int getHeight() doulbe getViewQuality() setViewQuality(double)
CombinedTable CombinedTable(SingleTable, SingleTable) boolean canSeat(int) double getDesirability() |
FRQ 3 : array or |
Given an ArrayList of members, add to the list an array of names and graduation year. Also remove any that have graduated and are not in good standing.
void addMembers(String[] names, int gradYear) adds new club members to memberList according to rules.
ArrayList<MemberInfo> removeMembers(int year) returns a list of students who have graduated and are in good standing. Also removes from the memberList all who have graduated |
Correct instantiation : constructor call with parameters. Removal from ArrayList while iterating. |
MemberInfo MemberInfo(String, int, boolean) int getGradYear() boolean inGoodStanding()
ClubMembers addMembers(String[], int) ArrayList<MemberInfo> removeMembers(int) |
FRQ 4 : 2D array |
Given an ArrayResizer class with a on-specified 2D array of ints as well as a method that identifies the number of non-zero rows, write a static method to identify if any row contains only non-zero elements. Write a 2nd static method that returns a copy of the 2D array of ints with rows that contain only non-zero rows.
static int numNonZeroRows( int[][] array2D) will return the number of rows that have no zeros as elements. |
Use of static Correctly instantiate the size of a 2D array of ints |
ArrayResizer static boolean isNonZeroRow(int[][] array2D, int r) static int numNonZeroRows(int[][] array2D) static int[][] resize(int [][] array2D) |
2020 Free Response Analysis
2020 | Specification |
Notes |
Classes and Methods |
Covid Year | testing was all online : considered highly confidential by College BOard | numerous test questions aligned to new CED | available in AP Classroom Question bank |
2019 Free Response Analysis
2019 | Specification |
Notes |
Classes and Methods |
APCalendar
FRQ 1: Methods & |
Write two methods that call other specified methods.
numberOfLeapYears() returns the number of leap years between two given years.
dayOfWeek() returns the value of the day of the week with Sunday=0,...,Saturday=6 |
static used |
APCalendar boolean isLeapYear(int y) int numberOfLeapYears(int y1, int y2) int firstDayOfYear(int y) int dayOfYear(int m, int d, int y) int dayOfWeek(int m, int d, int y) |
StepTracker
FRQ 2 : Class Design |
Write a class, constructor, 3 methods, and a field variable to implement a fitness tracking system.
|
Declare & initialize private field variable.
Declare parameters and assign to field variable.
Return updated field variable
Cast int to double. |
StepTracker StepTracker(int d) void addDailySteps(int s) int activeDays() double averageSteps() |
Delimiter
FRQ 3 : array or |
Given a Delimiters class with two String field variables, write two methods.
ArrayList<String> getDelimitersList(String[] t) returns a list of delimiters from an array of tokens in the order they appear.
boolean isBalanced(ArrayList<String> d) returns whether or not the opening and closing delimiters are balanced. |
Assumes open and close delimiters are distinct Strings.
Use of String.equals(String o)
Local variable as accumulator for balancing equal number and sequencing of open & close delimters..
Recursive solution possible but few were correct. |
Delimiters private String openDel private String closeDel public Delimeters(String o, String c)
ArrayList<String> getDelimitersList(String[] t)
boolean isBalanced(ArrayList<String> d) |
LightBoard
FRQ 4 : 2D array |
Given a LightBoard class with a 2D array of on/off lights, write a constructor and method to initialize and determine if a light is on or off.
LightBoard(int numR, int numC) will initialize a 2D array of booleans with a 40% probability of any light being on.
boolean evaluateLight(int r, int c) will return whehter a specified light is on (return true) or off. |
Use of Math.random() and assignment/cast of double to boolean.
Rules include use of modulus operator to determine if column is even or a multple of 3.
Use of an accumulator for number of lights on in 2D array. |
LightBoard private boolean[][] lights LightBoard(int numR, int numC) boolean evaluateLight(int r, int c) |
Free Response Analysis 2018-2006 : originally provided by Ria Galanos and others
Name |
String based |
Design / Simulation |
array 1D or 2D |
ArrayList or List |
Interacting Classes |
Topics and Notes |
Classes and Methods |
2018 | |||||||
FrogSimulation | x | Use of conditionals, loops, method calls | FrogSimulation, hopDistance, simulate, runSimulations | ||||
WordPair | x | x | x | Write a constructor and method for a class representing a list of pairs of words | WordPair, WordPairList, numMatches | ||
StringChecker | x | x | x | Write two constructors and a method. Check string length within given limits and exclude specified substring | StringChecker, isValid, CodeWordChecker | ||
ArrayTester | x/x | Extract a column in a 2D array of integers and Test if 2D array represents a specific criteria ("Latin Square") | ArrayTester, getColumn, hasAllValues, containsDuplicates, isLatin | ||||
2017 | |||||||
Digits | x | write a constructor that select digits from an int parameter, %, determine if digits are increasing in value | Digits constructor, isStrictlyIncreasing | ||||
MultiPractice | x | write a MultiPractice class that implements a given interface | StudyPractice, MultPractice, getProblem, nextProblem | ||||
Phrase | x | write a search for a sub-String and replace at the n-th occurrance | Phrase, findNthOccurrence, replaceNthOccurrence, findLastOccurrence, toString | ||||
Successor | x | x | write 2 static methods: search 2D array of ints to create a new 2D array of Positions | Position, findPosition, getSuccessorArray | |||
2016 |
|||||||
RandomStringChooser | x | x | selecting character from String and String from an array of Strings | RandomStringChooser, RandomLetterChooser , getSingleLetters | |||
LogMessage | x | x | x | search for String, Lists of interacting objects | LogMessage, containsWord, SystemLog , removeMessages | ||
Crossword | x | x/x | 2D array of objects, identify objects by neighboring object properties | Square, Crossword, toBeLabeled | |||
StringFormatter | x | x | String and character manipulation and formatting | StringFormatter, totalLetters, basicGapWidth, format | |||
2015 |
|
|
|
|
|
|
|
Diverse Array | x/x | array manipulation, array of arrays | arraySum, rowSums, isDiverse | ||||
HiddenWord | x | x | Design a class to process a String | HiddenWord, getHint | |||
SparseArray | x | x | x | Given class definitions for SparseArrayEntry and SparseArray (i.e. List of objects), manipulate the list based on the entry's location and value. | SparseArrayEntry, getRow, getCol, getValue, SparseArray, getNumRows, getNumCols, getValueAt, removeColumn | ||
NumberGroup | x | x | x | Interface design and implementation including | NumberGroup, contains, Range, MultiGroup, contains | ||
2014 |
Case Study |
|
|
|
|
|
|
Scrambler |
|
|
|
x |
|
String manipulation, ArrayList processing |
scrambledWord, scrambleOrRemove |
Director |
x |
x |
|
x |
x |
Grid World, write complete class, ArrayList processing |
Director, act |
Seating Chart |
|
|
x |
x |
x |
2-D array processing, ArrayList processing |
Student, SeatingChart, removeAbsentStudents |
Trio |
|
x |
|
|
x |
interface, write a complete class, finding min |
MenuItem, Trio, getName, getPrice |
2013 |
|
|
|
|
|
|
|
Song List |
|
|
|
x |
x |
list processing, equals |
DownloadInfo, getDownloadInfo, updateDownloads |
Token Pass |
|
x |
x |
|
|
array processing, random, consecutive elements, pre/post |
TokenPass, constructor, distributeCurrentPlayerTokens |
Jumping Critter |
x |
|
|
x |
x |
GridWorld, write complete class, ArrayList processing |
GridWorldUtilities, getEmptyLocations, JumpingCritt |
Sky View |
|
|
x |
|
|
2-D array processing (doubles), constructor |
SkyView, constructor, getAverage |
2012 |
|
|
|
|
|
|
|
Climber |
|
|
|
x |
|
ArrayList <String>, compareTo, and implicatons of design choices |
ClimbInfo, addClimb, distinctPeakNames |
Retro Bug |
x |
x |
|
|
|
inheritance, maintaining state, overriding, write complete class |
act, restore |
Horse Barn |
|
|
x |
|
|
array processing (Horses), interface |
Horse, HorseBarn, findHorseSpace, consolidate |
Gray Image |
|
|
x |
|
|
2-D array processing (ints) |
GrayImage, countWhitePixels, processImage |
2011 |
|
|
|
|
|
|
|
Sound |
|
|
x |
|
|
array processing |
limitAmplitude, trimSilenceFromBeginning |
AttractiveCritter |
x |
|
|
|
|
Grid World, write complete class, don't violate postConditions |
AttractiveCritter |
Fuel Depot |
|
|
|
x |
x |
interface, ArrayList <FuelTank>, min |
FuelDepot, FuelTank, FuelRobot, nextTankToFill, moveToLocation |
Route Cipher |
|
|
x |
|
|
2-D array processing (String), string manipulation |
RouteCipher, fillBlock, encryptMessage |
2010 |
|
|
|
|
|
|
|
Cookie Order |
|
|
|
x |
x |
ArrayList, accumulator |
getTotalBoxes, removeVariety |
APLine |
|
x |
|
|
|
write a complete class, integer division |
APLine, getSlope, isOnLine |
Trail |
|
|
x |
|
|
array, consecutive elements |
isLevelTrailSegment, isDifficult |
GridChecker |
x |
|
|
x |
x |
GridWorld, ArrayList processing |
actorWithMostNeighbors, getOccupiedWithinTwo |
2009 |
|
|
|
|
|
|
|
Number Cube |
|
|
x |
|
|
array processing (int), max/min |
NumberCube, getNumTosses, getLongestRun |
Stockpile Critter |
x |
x |
|
|
|
Grid World, inheritance, write complete class, no part A/B |
StockPileCritter |
Battery Charger |
|
|
x |
|
|
array processing (int), wrap around, modulus |
BatteryCharger, getChargingCost, getChargeStartTime |
Tile Game |
|
|
|
x |
|
ArrayList <NumberTile> processing, interface |
TileGame, getIndexForFit, insertTile |
2008 |
|
|
|
|
|
|
|
Flight List |
|
|
|
x |
x |
ArrayList processing, max/min |
Flight,Trip, getDuration, getShortestLayover |
String Coder |
|
|
|
x |
|
ArrayList <String> processing, string manipulation |
StringCoder, decodeString, encodeString |
Opossum Critter |
x |
|
|
|
|
Grid World, inheritance |
OpossumCritter, processActors, selectMoveLocation |
Checker Objects |
|
x |
|
|
|
write two classes, interface, indexOf, object instantiation |
SubstringChecker, AndChecker, yummyChecker |
2007 |
|
|
|
|
|
|
|
Self Divisor |
|
|
x |
|
|
array processing (int), extracting digits, modulus |
SelfDivisor, isSelfDivisor, firstNumSelfDivisors |
Pounce Fish (MBS) |
x |
|
|
|
|
Marine Biology, inheritance |
PounceFish, findFish, act |
Answer Sheets |
|
|
|
x |
x |
ArrayList <String> processing, max/min |
ScoreSheets, getScore, highestScoringStudent |
Game Design |
|
x |
|
|
|
inheritance, interface, write entire class + 1 method |
GameDriver, RandomPlayer, playGame |
2006 |
|
|
|
|
|
|
|
Daily Schedule |
|
|
|
x |
x |
ArrayList processing, remove |
TimeInterval, Appointment, conflictsWith, clearConflicts, addAppt |
Taxable Items |
|
x |
|
|
|
inheritance, interface, write class |
Item, TaxableItem, purchasePrice, Vehicle |
Customer List |
|
|
x |
|
|
array processing, merge, compare customers |
compareCustomer, prefixMerge |
Drop Game |
x |
|
|
|
|
Marine Biology like, Connect-4 like drop game, 2-D array |
dropLocationForColumn, dropMatchesNeighbors |
2005 |
|
|
|
|
|
|
|
Hotel Reservation |
|
|
x |
x |
x |
array and ArrayList processing |
Hotel, Reservation, requestRoom, cancelAndReassign |
Ticket Sales |
|
x |
|
|
|
inheritance,write two complete classes |
Ticket, AdvanceTicket, StudentAdvanceTicket |
Zig Zag Fish (MBS) |
x |
|
|
|
|
Marine Biology, inheritance |
ZigZagFish, nextLocation, move |
Improve Grades |
|
|
x |
|
|
array processing (int), average, compare consecutive elements |
average, hasImproved, finalAverage |
Scoring Performance and Statistics
2021 Test Question Details and Statistics are coming soon...AP CSA Reading is first half of June 2021
2020 Test Question Details and Statistics are not provided by the College Board
2019 Test Question Details
Question |
Mean |
StandardDeviation |
Number ofPossible Points |
1 |
6.18 | 2.98 | 9 |
2 |
4.90 | 3.53 | 9 |
3 |
5.56 | 3.54 | 9 |
4 |
4.82 | 3.3.8 | 9 |
2019 Overall Exam Statistics
Exam Score |
N |
% At |
5 |
18583 | 26.7 |
4 |
15275 | 21.9 |
3 |
14660 | 21.0 |
2 |
8.320 | 11.9 |
1 |
12847 | 18.4 |
Number ofStudents |
69685 | |
3 or Higher / % |
44129 | 67.8 |
Mean Score |
3.18 | |
Standard Deviation |
1.45 |
2018 Test Question Details
Question |
Mean |
StandardDeviation |
Number ofPossible Points |
1 |
5.34 | 3.14 | 9 |
2 |
4.38 | 3.53 | 9 |
3 |
5.11 | 3.61 | 9 |
4 |
4.75 | 3.62 | 9 |
2018 Overall Exam Statistics
Exam Score |
N |
% At |
5 |
16105 | 24.7 |
4 |
13802 | 21.2 |
3 |
14222 | 21.8 |
2 |
7738 | 11.9 |
1 |
13266 | 20.4 |
Number ofStudents |
65133 | |
3 or Higher / % |
44129 | 67.8 |
Mean Score |
3.18 | |
Standard Deviation |
1.45 |
2017 Test Question Details
Question |
Mean |
StandardDeviation |
Number ofPossible Points |
1 |
4.10 | 3.17 | 9 |
2 |
5.86 | 3.54 | 9 |
3 |
3.84 | 3.31 | 9 |
4 |
4.75 | 3.46 | 9 |
2017 Overall Exam Statistics
Exam Score |
N |
% At |
5 |
14623 | 24.2 |
4 |
12650 | 20.9 |
3 |
13271 | 21.9 |
2 |
6970 | 11.5 |
1 |
13005 | 21.5 |
Number ofStudents |
60519 | |
3 or Higher / % |
40544 | |
Mean Score |
3.15 | 67.0 |
Standard Deviation |
1.46 |
2016 Test Question Details
Question |
Mean |
StandardDeviation |
Number ofPossible Points |
1 |
3.42 | 2.97 | 9 |
2 |
2.94 | 2.73 | 9 |
3 |
2.59 | 2.97 | 9 |
4 |
3.29 | 3.06 | 9 |
2016 Overall Exam Statistics
Exam Score |
N |
% At |
5 |
12055 | 20.8 |
4 |
11900 | 20.5 |
3 |
13386 | 23.1 |
2 |
7215 | 12.5 |
1 |
13381 | 23.1 |
Number ofStudents |
57937 | |
3 or Higher / % |
37937 | |
Mean Score |
3.04 | 64.5 |
Standard Deviation |
1.44 |
2015 Test Question Details
Question |
Mean |
StandardDeviation |
Number ofPossible Points |
1 |
5.05 | 3.36 | 9 |
2 |
4.41 | 3.4 | 9 |
3 |
3.05 | 3.4 | 9 |
4 |
3.99 | 3.19 | 9 |
2015 Overall Exam Statistics
Exam Score | N | % At |
5 |
11963 | 24.4 |
4 |
12061 | 24.6 |
3 |
7470 | 15.2 |
2 |
3529 | 7.2 |
1 |
13971 | 28.5 |
Number ofStudents |
48994 | |
3 or Higher / % |
31494 | |
Mean Score |
3.09 | 64.3 |
Standard Deviation |
1.56 |
2014 Test Question Details
Question |
Mean |
StandardDeviation |
Number ofPossible Points |
1 |
3.57 |
2.88 |
9 |
2 |
4.35 |
3.08 |
9 |
3 |
3.57 |
2.99 |
9 |
4 |
4.14 |
3.44 |
9 |
2014 Overall Exam Statistics
Exam Score | N | % At |
5 | 8,367 | 21.3 |
4 | 9,091 | 23.1 |
3 | 6,588 | 16.8 |
2 | 3,016 | 7.7 |
1 | 12,216 | 31.1 |
Number ofStudents | 39,278 | - |
3 or Higher / % | 24,046 | 61.2 |
Mean Score | 2.96 | - |
Standard Deviation | 1.55 | - |
Participant Activity - available practice Assessments
Sample Questions, Practice Exam and Released Exams
find on AP Classroom and Resources: Secure Documents for Teachers
Sample Questions, Practice Exam (Effective Fall 2014), and 2015 Released Exam
I. Sample Questions from AP CSA Course Description pages 19-60
-
Multiple Choice (MC) Questions(25) focus on specific topics and "newer-style" questions:
-
7 (inheritance),
-
15 (polymorphism),
-
16 (recursion),
-
20 (challenge!),
-
23 (shuffle--see Elevens lab),
-
24 (arrays of arrays, 2D),
-
25 (selectionSort) ...be aware that answers are on the same page
-
Question: 11 derived from older Free Response (FR)
-
Free Response Questions
-
Question 1 - writing methods using Lists
-
Question 2 - String manipulation [see Magpie Lab]
-
Question 3 - Design of Class hiearchy ["is-a", "has-a"]
-
Question 4 - 1D and 2D array/ArrayList manipulatio
-
II. AP CSA Practice Exam Effective Fall 2014 (must complete course Audit to access secure documents)
-
Don't give to students as this works well as a full 3-hour Mock Exam
III. 2015 Released Exam (must complete course Audit ti access secyre documents)
-
FR & MC Questions available from the Course Audit secure website
-
Score Legend
-
Question overview, scoring guidelines, Canonical solutions, commentary and student handwritten responses
Works well as practice scoring student's responses via rubrics (aka AP CSA Reading in June which requires at least 3 years' of AP CSA teaching experience)
Full Exam is on College Board website available and is downloaded as a "secure" document available after your Syllabus has been approved via Audit process.
Afternoon Session II : Assessing Student Progress & Understanding [Write MC Question]
Key Understanding:
-
Writing sample multiple choice questions focuses on specific skills that students must have for the AP Exam.
Participant Activity [Sample Questions]
- Focus on specific topics and "newer-style" questions :
- Questions that can easily be modified (i.e. create-your-own-test): 2, 3, 7, 11, 15
- Write one MC Question that models:
- Composition (aka "has a")
- Inheritance (aka "is a")
- String, Math, or ArrayList API